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