Msbuild 生成解决方案时在命令行上传递单个项目的属性

Msbuild 生成解决方案时在命令行上传递单个项目的属性,msbuild,Msbuild,使用msbuild生成包含多个项目的解决方案时,是否可以在命令行上传递属性,使该属性仅用于其中一个项目 这意味着,我可以说-p:Foo=42应用于Project1,但不用于Project2吗?MSBuild无法通过解决方案文件(MSBuild xxx\xxx.sln)轻松地为其中一个项目指定属性。或者,您必须键入多个msbuild命令行来指定相关csproj文件,以启用更改的属性,如msbuild Project1.csproj-t:build-p:xxx=xxx,msbuild Project

使用msbuild生成包含多个项目的解决方案时,是否可以在命令行上传递属性,使该属性仅用于其中一个项目


这意味着,我可以说
-p:Foo=42
应用于Project1,但不用于Project2吗?

MSBuild无法通过解决方案文件(
MSBuild xxx\xxx.sln
)轻松地为其中一个项目指定属性。或者,您必须键入多个msbuild命令行来指定相关csproj文件,以启用更改的属性,如
msbuild Project1.csproj-t:build-p:xxx=xxx
msbuild Project2.csproj-t:build
。但是,它太复杂和不方便了

因此我建议您可以使用msbuild脚本获取所需内容

1)创建一个名为
build.proj的文件
文件:

<Project>        
    
  <ItemGroup>
              
     <!--add all the projects from the solution and remove the any project you want to modify the foo property-->
     <MostProjectFile Include="**\*.csproj;**\*.vcxproj" Exclude="**\Project1.csproj" />
              
     <!--add any projects you want to modify the foo value-->
     <SpecialProjectFile Include="**\Project1.csproj" />
              
  </ItemGroup>
            
            
  <Target Name="Build">
            
  <!--build the most projects and remove the project which you want to change foo property-->
  <MSBuild Projects="@(MostProjectFile)" Targets="Build" Properties="Configuration=Debug"/>
            
  <!--build any projects that wants to modify the foo property separately-->
  <MSBuild Projects="@(SpecialProjectFile)" Targets="Build" Properties="Configuration=Debug;Foo=42"/>
            
  </Target>
            
</Project>

2)如果要再次更改foo属性,可以根据需要修改
build.proj

运行
msbuild xxx\build.proj-t:build
来生成它