MSBuild:从命令行指定目标

24 msbuild

我有一个MSBuild任务来在解决方案文件中构建一个特定的项目.它看起来像这样:

<Target Name="Baz">
  <MSBuild Projects="Foo.sln" Targets="bar:$(BuildCmd)" />
</Target>
Run Code Online (Sandbox Code Playgroud)

在命令行中,我可以把我BuildCmd要么RebuildClean与它按预期工作:

msbuild/target:Baz/property:BuildCmd = Rebuild MyMsbuildFile.xml msbuild/target:Baz/property:BuildCmd = Clean MyMsbuildFile.xml

但是我用什么词来设置BuildCmd才能构建?我已经尝试过Build,Compile只是把它留空或未定义,但我总是得到一个错误.

msbuild/target:Baz/property:BuildCmd = Build MyMsbuildFile.xml Foo.sln:error MSB4057:项目中不存在目标"bar:Build".

msbuild/target:Baz/property:BuildCmd =编译MyMsbuildFile.xml Foo.sln:错误MSB4057:项目中不存在目标"bar:Compile".

msbuild/target:Baz MyMsbuildFile.xml Foo.sln:错误MSB4057:项目中不存在目标"bar:".

Che*_*rra 24

我知道你想用一个特定的命令构建一个目标:Build,Clean等.

我就是这样做的.

创建一个属性以接收构建命令,当未指定默认为Build时

<PropertyGroup>
  <BuildCmd Condition=" '$(BuildCmd)' == ''">Build</BuildCmd>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

之后,创建将在参数中使用指定目标启动MSBuild的目标:

<Target Name="Stackoverflow">
  <MsBuild Projects="Foo.sln" Targets="$(BuildCmd)" />
</Target>
Run Code Online (Sandbox Code Playgroud)

然后使用target和BuildCmd参数调用MSBuild文件,如下所示:

msbuild msbuild.xml /t:Stackoverflow /p:BuildCmd=Clean
Run Code Online (Sandbox Code Playgroud)

只需确保目标存在于解决方案或项目文件中.


Tim*_*art 6

来自:http://msdn.microsoft.com/en-us/library/ms164311.aspx

/目标:目标

在此项目中构建这些目标.使用分号或逗号分隔多个目标,或单独指定每个目标./ t也可以接受.例如:/ target:Resources;编译

  • 问题是指定如何处理每个目标:构建,重建,清理.部分问题是在命令行上使用术语"目标"来指定msbuild文件中的目标,并再次指定在解决方案文件中构建哪个项目(名称空间冲突). (7认同)