Macros 如何在生成后事件中使用宏区分TFS生成和手动生成

Macros 如何在生成后事件中使用宏区分TFS生成和手动生成,macros,tfsbuild,post-build-event,Macros,Tfsbuild,Post Build Event,在.proj文件的TFS生成后脚本中,我想确定项目生成是通过TFS触发生成还是通过手动触发生成进行的。 有人可以建议我如何在生成后事件中使用宏来执行此操作。简短回答:您可以在csproj文件中使用IsDesktopBuild MSBUILD属性来区分TFS和本地生成 长答覆: 开发人员还是团队建设 为了区分构建环境,我们必须实现一种机制来检测在哪个环境中执行构建。换句话说,我们需要知道是运行由开发人员执行的本地构建,还是运行在构建服务器上的团队构建。 事实上,我们需要考虑三种不同的构建环境: ·

在.proj文件的TFS生成后脚本中,我想确定项目生成是通过TFS触发生成还是通过手动触发生成进行的。
有人可以建议我如何在生成后事件中使用宏来执行此操作。

简短回答:您可以在csproj文件中使用IsDesktopBuild MSBUILD属性来区分TFS和本地生成

长答覆:

开发人员还是团队建设

为了区分构建环境,我们必须实现一种机制来检测在哪个环境中执行构建。换句话说,我们需要知道是运行由开发人员执行的本地构建,还是运行在构建服务器上的团队构建。 事实上,我们需要考虑三种不同的构建环境:

·Visual Studio Build–由开发人员在Visual Studio IDE中自己的开发机器上执行的构建

·团队构建–由TFS(手动或计划)在构建上执行的构建

·桌面构建–在开发工作站上使用命令“msbuild.exe tfsbuild.proj”显式手动执行的构建

“DesktopBuild”和“TeamBuild”在性质上非常相似,只是“DesktopBuild”不从源存储库执行“GetLatest”功能,不会“标记”源树,也不会确定更改集

使用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”属性的一个警告是,默认情况下,许多目标文件中都没有定义它。此属性在VisualStudio生成中将有一个“empty”值,因此我们将其初始化为“true”值作为默认值。因此,我们需要在测试它的所有MSBUILD目标文件中显式定义它

我们只需将以下元素添加到所有目标文件中,在这些文件中,我们需要区分开发机器上的构建和构建服务器上的构建(在第一节中)


非常感谢以赛亚,这些信息非常有用
$(IsDesktopBuild)
在vs2013中不受支持,现在有了
$(BuildingSideVisualStudio)
。资料来源:
<IsDesktopBuild Condition="'$(IsDesktopBuild)' == ''">true</IsDesktopBuild>
BuildingInsideVisualStudio