Visual Studio 设置了 MSBuild 属性吗?我希望根据 Visual Studio 的版本(如果有)有一些条件行为。
BuildingInsideVisualStudio
,当您在 Visual Studio 内部构建时,此属性将设置为 true。由于 ProductVersion
在项目文件中声明,因此您无法使用它,因为无论是在 VS 内部构建还是通过 msbuild.exe 构建,它都具有相同的值。
<PropertyGroup>
<MyProp Condition=" '$(BuildingInsideVisualStudio)' == 'true' ">Foo</MyProp>
<MyProp Condition=" '$(BuildingInsideVisualStudio)' != 'true' ">Bar</MyProp>
</PropertyGroup>
要直接解决标题中的问题 - 如果您只是想知道您是否是从 VS 构建的,请检查
IsDesktopBuild
的值,它将相应地返回 true
或 false
。
是的,
<ProductVersion>
列在项目文件中。 它与 Visual Studio 版本号匹配。
<ProductVersion>
将为您提供正在运行构建过程的 MSBuild 版本。
请注意,在 VS 2010 中,构建过程可能针对 .Net 4.0 或 3.5。您需要仔细考虑您的条件编译是否取决于 msbuild 版本本身,或者取决于构建的目标框架以及构建所使用的工具。如果您的条件基于目标框架,请使用
<TargetFrameworkVersion>
。
当然,如果您的构建也可能在 VS 2008 下运行,则如果缺少
<TargetFrameworkVersion>
,您需要支持适当的回退。