是否可以从csproj文件中知道是否使用devenv或msbuild来运行它?

时间:2009-07-14 13:00:41

标签: msbuild fxcop

动机: 我在构建过程中集成了fxcop,这使得每次目标更改时都会运行fxcopcmd.exe,或者只要上次运行fxcop时出现警告。

但是当一个人在工作室工作时,devenv.exe经常决定在后台编译项目,无论出于何种原因。例如,当我向解决方案添加新项目时,我注意到fxcopcmd.exe运行,这意味着后台构建已经开始。还有其他时间。

所以,我希望在使用devenv构建时抑制fxcop。我们的CI服务器使用msbuild构建,所以没问题。

顺便说一句,如果有办法禁用后台构建,那可能会很棒。

2 个答案:

答案 0 :(得分:1)

有一个属性 BuildingInsideVisualStudio 会告诉你这个。

例如,将 msbuild.exe devenv.exe 与.csproj一起使用时的结果与以下AfterBuild目标定义进行比较

<Target Name="AfterBuild">
  <Message Text="BuildingInsideVisualStudio: $(BuildingInsideVisualStudio)" Importance="high"/>
</Target>

Sayed Ibrahim Hashimi

我的书:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build

答案 1 :(得分:0)

我唯一能想到的是

  1. 创建不同的构建类型(例如debug_and_rules,release_and_rules等)。我认为ms build可以读到这个。
  2. 让您的CI服务器将fxcop exe与构建项目分开调用。这是我在将fxcop集成到VS之前我曾经做过的事情。
  3. 让msbuild设置ms build可以读取的设置或编译器标志。我不确定这是否有用。
  4. 在VS 2008中将后台编译器添加到C#中,据我所知,这是不可配置的。 VS 2010应该是超可配置的,所以可能会改变

    编辑:将我的列表格式化得更好