我们可以在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=..."
答案 0 :(得分:2)
基于MSBuild Command-Line Reference,这与您描述的完全不可能,即MSBuild不会从命令行输入中获取目标定义。它们必须在某个文件中定义。
但是,你可以有一个脚本(甚至可能是.bat?),它可以做类似的事情:
.csproj
<Import Project="foo.csproj" />
/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"