调用MSBuild并向其传递要运行的单个任务

调用MSBuild并向其传递要运行的单个任务,msbuild,csproj,Msbuild,Csproj,我们可以在csproj文件中定义一个目标,然后在从命令行调用msbuild时指定该目标。看起来是这样的: my.csproj CopyFiles目标要求msbuild运行Copy任务 如果我们不想编辑csproj文件怎么办。如何仅从命令行定义目标?或者,仅使用命令行,我们如何要求msbuild仅运行一个或两个任务 伪码 基于,这与您描述的不完全一样,即MSBuild不会从命令行输入中获取目标定义。它们必须在某个文件中定义 但是,您可以有一个脚本(甚至可能是.bat?),它可以执行以下操作: &l

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

my.csproj
CopyFiles
目标要求
msbuild
运行
Copy
任务

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

伪码 基于,这与您描述的不完全一样,即MSBuild不会从命令行输入中获取目标定义。它们必须在某个文件中定义

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

<?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。多个
    /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 my.csproj /t:"Copy SourceFiles=@(MySourceFiles) DestinationFolder=..."
    
    <?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 temp.proj /t:CopyFiles /p:"Destination=c:\MyProject\Destination"