2012-01-31 48 views
3

我必须编写一个仅依次运行两个批处理文件的TFSBuild.proj文件。我只需要从构建定义中调用proj文件,proj文件将依次调用两个批处理文件。所有的建筑物都将由建立服务器上的批处理文件完成。如何编写按顺序运行两个批处理文件的TFSBuild.proj文件?

我有一个批处理文件放在生成服务器上。以下是我写的TFSBuild.proj文件:

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="GetLatest" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> 

<Target Name="EndToEndIteration" 
    Condition=" '$(IsDesktopBuild)'!='true' " 
    DependsOnTargets="$(EndToEndIterationDependsOn)" > 
    <CallTarget Targets="GetLatest"/> 
</Target> 

    <Target Name="GetLatest"> 
    <Exec Command="C:\BuildScript\GetFromTFSTask.bat" /> 
    </Target> 
    <Target Name="BuildStampVer"> 
    <Exec Command="C:\BuildScript\BuildTask.bat" /> 
    </Target> 
</Project> 

我得到一个错误:

The command "C:\StampBuild\GetFromTFS.bat" exited with code 3.

我需要在给定的路径运行,从构建服务器批处理文件,我正在从建设我的开发服务器。

回答

0

阅读此项。 ?

http://www.danielfortunov.com/software/ $ daniel_fortunovs_adventures_in_software_development/2009/05/21/invoking_batch_files_from_msbuild源= ActivityLog

更新 - 示例代码:此示例代码修改为使用EndToEndIterationDependsOn属性来决定的依赖的目标顺序的MSBuild应该调用时运行EndToEndIteration。这有意义吗?

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="GetLatest" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> 

<PropertyGroup> 
    <EndToEndIterationDependsOn> 
    GetLatest; 
    BuildStampVer 
    </EndToEndIterationDependsOn> 
</PropertyGroup> 
<Target Name="EndToEndIteration" 
    Condition=" '$(IsDesktopBuild)'!='true' " 
    DependsOnTargets="$(EndToEndIterationDependsOn)" > 
</Target> 

<Target Name="GetLatest"> 
    <Exec Command="C:\BuildScript\GetFromTFSTask.bat" /> 
</Target> 
<Target Name="BuildStampVer" DependsOnTargets="GetLatest" > 
    <Exec Command="C:\BuildScript\BuildTask.bat" /> 
</Target> 
</Project> 
+0

感谢尼克,但我无法解决我的问题。我已经添加了一些更多的信息,你可以看看它并建议。 – Ashutosh 2012-02-01 08:38:01

+0

蝙蝠文件是否需要特定的工作目录?你有没有试图自己手动运行它?另外,我看到EndToEndIteration在GetLatest上执行一个CallTarget,但我没有看到你将BuildStampVer目标包含在要调用的目标中。你不应该把这个目标放在DependsOn或其他东西吗? – 2012-02-01 15:35:05

+0

嗨,尼克,我对proj文件没有太多的想法。我必须编写一个应该只按顺序调用这两个批处理文件的proj文件。我已经将所有内容写入批处理文件,如果手动运行它,批处理文件工作正常。请建议我应该如何修改我的proj文件。 – Ashutosh 2012-02-03 11:18:19

0

批量退出代码3是路径错误。 'GetFromTFS.bat'中的路径引用是否正确?任何相对路径引用将尝试从.proj运行的位置解析。

0

我没试过你的代码,但是你通过调用CMD/C尝试:

<Target Name="GetLatest"> 
    <Exec Command="cmd /c C:\BuildScript\GetFromTFSTask.bat" /> 
</Target> 
<Target Name="BuildStampVer" DependsOnTargets="GetLatest" > 
    <Exec Command="cmd /c C:\BuildScript\BuildTask.bat" /> 
</Target> 
</Project> 

我只修改了上面的例子,所以请调整CMD/C在命令行正常。

希望这可以工作。

相关问题