2009-04-20 60 views
1

我想一个BuildStep添加到的MSBuild的AfterBuild目标,我现在用的是以下的MSBuild和BuildUri

<Target Name="AfterCompile">  
    <ItemGroup>  
     <TestAssemblies Include="$(OutDir)\DataStoreUnitTests.dll" /> 
    </ItemGroup>  

    <BuildStep  
     Name="Run unit Tests" 
     TeamFoundationServerUrl="$(TeamFoundationServerUrl)"  
     BuildUri="$(BuildUri)"  
     Message="Running unit tests">  
     <Output TaskParameter="Id" PropertyName="StepId" />  
    </BuildStep>  

    <Gallio  
     Assemblies="@(TestAssemblies)"  
     ReportTypes="html"  
     ReportFileNameFormat="buildreport{0}{1}"  
     ReportOutputDirectory="." />  

    <BuildStep  
     TeamFoundationServerUrl="$(TeamFoundationServerUrl)"  
     BuildUri="$(BuildUri)"  
     Id="$(StepId)"  
     Message="Yay! All tests succeded!"  
     Status="Succeeded" />  
     <OnError ExecuteTargets="MarkBuildStepAsFailed" /> 
    </Target> 

    <Target Name="MarkBuildStepAsFailed">  
     <BuildStep  
      TeamFoundationServerUrl="$(TeamFoundationServerUrl)"  
      BuildUri="$(BuildUri)"  
      Id="$(StepId)"  
      Message="Tests have failed. See test report in drop folder for details." 
      Status="Failed" /> 
</Target> 

当我的MSBuild运行它,我得到以下错误:

error MSB4044: The "BuildStep" task was not given a value for the required parameter "BuildUri".

我看不出为什么,有人知道吗?

回答

4

您是作为Team Build(在构建服务器上)还是作为桌面版本(即构建服务器)的一部分运行此目标?本地)?

BuildUri属性通常由构建代理在构建新团队时触发生成。在您的脚本中,Uri用于告知TFS将构建步骤附加到哪个构建细节。如果您正在运行桌面版本,那么除非您通过命令行传递属性,否则它将为空。

4

我的想法是$(BuildUri)正在评估为无。尝试做一个打印语句来调试和定位VS/MSBuild作为错误提供的行号。

<Message Text="$(BuildUri)" /> 

的MSBuild可以在命令行中运行(我发现的MSBuild更容易与工作方式),用下面的命令:

C:\WINDOWS\Microsoft.NET\Framework\%FrameWork_Version%\MSBuild /verbosity:n 
%Solution or Project file% 

设置$(BuildUri)

<Target Name="AfterCompile">  
    <PropertyGroup> 
     <BuildUri>Build_Uri_Value</BuildUri > 
    </PropertyGroup> 

    <ItemGroup> 
     ... 

关于BuildUri的信息可以在这里找到:

What is the BuildUri and where do i get it from when i'm just trying to get some source?