是否可以从 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.exedevenv.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 来运行它?的主要内容,如果未能解决你的问题,请参考以下文章

防止VS向csproj添加显式编译标签

如何从 kproj 引用 csproj

csproj文件中copy指令的使用方式

TFS:在两个分支之间合并 .csproj 文件,两个分支之间有项目引用

如何在源代码控制(Visual Studio 和 TFS)中比较文件 .csproj 与最新版本

将参数/属性从发布配置文件传递到csproj文件