2012-01-18 38 views
2

我正在尝试在VS/TFS2010中配置团队版本。我想MSBuild参数包括以下内容:如何在TFS2010中的MSBuild参数中进行变量替换?

/p:Changeset=BuildDetail.SourceGetVersion 

我想MSBuild展开“BuildDetail.SourceGetVersion”。我知道如何通过编辑xaml来做到这一点,但我希望有一种方法可以让它在没有需要的情况下工作。有任何想法吗?

回答

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> 

我会使用属性来计算向大会的路径,因为它可能会有所不同,由于开发人员的机器上这将是在Visual Studio下安装(在我认为的PrivateAssemblies中)。

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

+0

您可以在此共享xaml吗? – Mrchief 2012-09-20 16:32:32

1

我知道你问过关于TFS 2010.
但是,自从TFS 2013有一个非常简单的方法做到这一点!
只需在您的MsBuild中使用TF_BUILD_SOURCEGETVERSION var,它将从TFS Build传递。
请参阅TF_BUILD environment变量仅供参考