如何在TFS2010中的MSBuild参数中进行变量替换?

Ste*_*oss 2 msbuild tfs tfsbuild

我正在尝试在VS/TFS2010中配置团队构建.我希望MSBuild参数包含以下内容:

/p:Changeset=BuildDetail.SourceGetVersion
Run Code Online (Sandbox Code Playgroud)

我希望MSBuild扩展"BuildDetail.SourceGetVersion".我知道如何通过编辑xaml来做到这一点,但我希望有一种方法可以让它无需工作.有任何想法吗?

Bri*_*ler 6

您需要执行TFS任务

<UsingTask
    TaskName="Microsoft.TeamFoundation.Build.Tasks.GetBuildProperties"
    AssemblyFile="C:\Program Files\Microsoft Team Foundation Server 2010
        \Tools\Microsoft.TeamFoundation.Build.ProcessComponents.dll"
    />

<Target Name="MyTarget">
   <GetBuildProperties
      TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
      BuildUri="$(BuildUri)">
      <Output TaskParameter="BuildNumber" PropertyName="BuildNumber" />
      <Output TaskParameter="SourceGetVersion" PropertyName="SourceGetVersion" />
   </GetBuildProperties>
</Target>
Run Code Online (Sandbox Code Playgroud)

我使用属性来计算程序集的路径,因为它可能会有所不同,因为在开发人员计算机上它将在Visual Studio安装下(我认为在PrivateAssemblies中).

由于属性是从目标执行动态生成的,因此基于此属性执行的任何操作都必须动态计算.基于$(SourceGetVersion)形成全局静态属性将不起作用.当然,您可以计算它,然后使用MSBuild任务来运行实际构建,但由于您需要传递其他属性,因此这变得乏味.如果你想要更好的东西,你最终会在我做的地方,重写Xaml以将其传递给MSBuild Action.