【问题标题】:Call MSBuild passing it a single task to run调用 MSBuild 将其传递给单个任务以运行
【发布时间】:2015-06-01 15:37:04
【问题描述】:

我们可以在csproj 文件中定义一个目标,然后在我们从命令行调用msbuild 时指定该目标。看起来像这样:

my.csproj

<Target Name="CopyFiles">
    <Copy
        SourceFiles="@(MySourceFiles)"
        DestinationFolder="c:\MyProject\Destination" />
</Target>

msbuild

msbuild my.csproj /t:CopyFiles

CopyFiles 目标要求msbuild 运行Copy 任务。

如果我们不想编辑csproj 文件怎么办。我们如何仅从命令行定义目标?或者,仅使用命令行,我们如何要求msbuild 只运行一个或两个任务?

伪代码

msbuild my.csproj /t:"Copy SourceFiles=@(MySourceFiles) DestinationFolder=..."

【问题讨论】:

    标签: msbuild csproj


    【解决方案1】:

    根据MSBuild Command-Line Reference,这不可能完全如您所描述的那样,即 MSBuild 不会从命令行输入中获取目标定义。它们必须在某个文件中定义。

    但是,您可以有一个脚本(甚至可能是 .bat?),它可以执行以下操作:

    1. 新建一个基本上为空的项目文件。
    2. 导入.csproj,与&lt;Import Project="foo.csproj" /&gt;
    3. 添加目标
    4. 使用具有所需目标的新项目文件调用 MSBuild。多个目标可以通过多个/t: 开关指定。可以使用/p: 指定属性

    以编程方式/脚本生成的最终项目文件可能类似于:

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <Import Project="foo.csproj" />
      <Target Name="CopyFiles">
      <Copy
        SourceFiles="@(MySourceFiles)"
        DestinationFolder="$(Destination)" />
      </Target>
    </Project>
    

    实际调用的 MSBuild 命令可能是:

    msbuild temp.proj /t:CopyFiles /p:"Destination=c:\MyProject\Destination"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多