简短回答:您可以在csproj文件中利用IsDesktopBuild MSBUILD属性来区分TFS和本地构建。
长回答:
开发者或团队构建?
为了区分构建环境,我们必须实现一种机制,以检测构建正在哪个环境中执行。换句话说,我们需要知道是否运行开发人员执行的本地构建,还是在构建服务器上运行的团队构建。 实际上,我们需要考虑三种不同的构建环境:
· Visual Studio Build - 开发人员在Visual Studio IDE内部在其自己的开发计算机上执行的构建
· Team Build - TFS(手动或计划)在构建上执行的构建。
· Desktop Build - 显式手动在开发工作站上执行的构建,使用命令“msbuild.exe tfsbuild.proj”。
“DesktopBuild”和“TeamBuild”在性质上非常相似,但“DesktopBuild”不会从源代码库执行“GetLatest”功能,不会对源代码树进行“Label”,也不会确定更改集。
当使用MSBUILD任务(主要在以下章节中使用)时,一种常见的方法是使用“IsDesktopBuild”和“BuildingSolutionFile”属性作为测试任务中的条件。 “IsDesktopBuild”属性在“Microsoft.TeamFoundationBuild.targets”中声明。“BuildingSolutionFile”属性由MSBUILD自动声明和分配。
下表列出了每个构建环境中这些属性的值。
Environment IsDesktopBuild BuildingSolutionFile
Visual Studio Build (empty) (empty)
Desktop Build true true
Team Build false true
使用“IsDesktopBuild”属性的一个要注意的地方是,它在许多目标文件中默认情况下未定义。在Visual Studio构建中,此属性将具有“空”值,因此我们将其初始化为“true”作为默认值。因此,我们需要在所有MSBUILD目标文件中显式定义它,以便在测试时使用。
我们只需将以下元素添加到所有需要区分开发机和构建服务器上的构建的目标文件中(在第一个“PropertyGroup”中)。
<IsDesktopBuild Condition="'$(IsDesktopBuild)' == ''">true</IsDesktopBuild>
更新:感谢@dbardakov。从VS 2012开始,我们可以使用该属性来查找构建是否在Visual Studio内部进行:
BuildingInsideVisualStudio
$(IsDesktopBuild)
,现在有一个$(BuildingInsideVisualStudio)
。来源:https://social.msdn.microsoft.com/Forums/vstudio/en-US/b721c3c8-2eb8-40f0-8398-034cb971aaa7/isdesktopbuild-always-empty-in-team-2010-and-visual-studio-2010-when-attempting-to-configure?forum=tfsbuild - dbardakov