【问题标题】:MSBuild task to execute an external MSBuild file执行外部 MSBuild 文件的 MSBuild 任务
【发布时间】:2009-10-01 04:47:31
【问题描述】:

我正在尝试设置一个 MSBuild 文件,该文件将调用另一个 MSBuild 文件,我想知道实现此目的的最佳方法是什么。

我们在构建服务器下载 MSBuild 文件的场景中使用它,然后根据参数执行适当的第二个文件。

我知道我可以只使用<Exec Command="msbuild.exe ..." /> 任务,但这似乎有点hacky 的方式。

有没有更简单的方法来使用 MSBuild 执行另一个 MSBuild 文件?

【问题讨论】:

    标签: msbuild


    【解决方案1】:

    您可以使用MSBuild task 在另一个 MSBuild 项目中构建目标。

    您还可以将目标放在由两个 MSBuild 项目导入的外部 .targets 文件中,并使用 CallTarget task 来构建它。

    更新:要执行外部命令,请使用Exec task

    【讨论】:

    • 啊!我知道必须有更好的方法。我之前没有遇到过 MSBuild 任务 :)
    • 如何使用MSBuild Task执行外部文件?你能告诉我怎么做吗?
    【解决方案2】:

    使用<MSBuild> 任务而不是<Exec Command="msbuild.exe .."/> 不仅更漂亮。这意味着单个 MSBuild 进程知道所有正在构建的项目,并且没有冲突;一个特定的项目不能同时由两个线程构建。如果您使用“/m”进行构建,这通常至关重要。 还有一些其他优点,例如整个构建有一组记录器。

    【讨论】:

      【解决方案3】:

      回应亚当奥伦的评论: 这是一个执行外部文件的示例 - 在这种情况下,它会启动 nunit。 %22 用于转义,它的意思是“所以你可以在你的可执行路径中有空格。

      <Exec Command="%22$(NUnit_Install_Directory)bin\net-2.0\nunit-console.exe%22 
      /noshadow @(TestableAssemblies, ' ') /xml 
       $(BuildFilesPath)\NCover-NUnit-Results.xml" /> 
      

      您不需要像我一样使用变量,但我发现它使您的脚本更具可移植性。 $(NUnit_Install_Directory) 定义为

      <PropertyGroup> 
         <NUnit_Install_Directory>c:\Program Files\NUnit 2.5.3\</NUnit_Install_Directory> 
      

      【讨论】:

        【解决方案4】:
        <Target Name="TA">
            <CallTarget Targets="TB"/>
        </Target>
        
        <Target Name="TB">
            <Message Text="TB..." />
        </Target>
        

        【讨论】:

          猜你喜欢
          • 2011-04-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-23
          • 2010-12-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多