是否可以从 csproj 文件中知道是使用 devenv 还是 msbuild 来运行它?
Posted
技术标签:
【中文标题】是否可以从 csproj 文件中知道是使用 devenv 还是 msbuild 来运行它?【英文标题】:Is it possible from within the csproj file to know whether devenv or msbuild is used to run it? 【发布时间】:2009-07-14 13:00:40 【问题描述】:动机: 我在构建过程中集成了 fxcop,这使得 fxcopcmd.exe 在每次目标更改时运行,或者只要之前运行 fxcop 有警告。
但是当一个人在工作室工作时,无论出于何种原因,devenv.exe 经常决定在后台编译项目。例如,当我向解决方案添加一个新项目时,我注意到 fxcopcmd.exe 运行,这意味着后台构建已经开始。还有其他时间。
所以,我希望在使用 devenv 构建时抑制 fxcop。我们的 CI 服务器使用 msbuild 构建,所以没有问题。
顺便说一句,如果有办法禁用后台构建,那就太好了。
【问题讨论】:
【参考方案1】:有一个属性 BuildingInsideVisualStudio 会告诉你这一点。
例如,比较使用 msbuild.exe 和 devenv.exe 与定义了以下 AfterBuild 目标的 .csproj 时的结果
<Target Name="AfterBuild">
<Message Text="BuildingInsideVisualStudio: $(BuildingInsideVisualStudio)" Importance="high"/>
</Target>
赛义德·易卜拉欣·哈希米
我的书:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build
【讨论】:
【参考方案2】:我唯一能想到的就是要么
-
创建不同的构建类型(例如 debug_and_rules、release_and_rules 等)。我认为 ms build 可以阅读此内容。
让您的 CI 服务器调用 fxcop exe 与构建项目分开。这是我在 fxcop 集成到 VS 之前所做的。
让 msbuild 设置 ms build 可以读取的设置或编译器标志。我不确定这是否可行。
后台编译器是在 VS 2008 中添加到 C# 中的,据我所知,它是不可配置的。 VS 2010 应该是超级可配置的,所以可能会改变
编辑:格式化我的列表更好一点
【讨论】:
以上是关于是否可以从 csproj 文件中知道是使用 devenv 还是 msbuild 来运行它?的主要内容,如果未能解决你的问题,请参考以下文章
TFS:在两个分支之间合并 .csproj 文件,两个分支之间有项目引用