Martin
Martin

Reputation: 2096

Pass property for single project on commandline when building a solution

When I use msbuild to build a solution containing multiple projects, can I pass a property on the command line in a way that the property will only be used for one of the projects?

That means, can I say that -p:Foo=42 shall be used for Project1, but not for Project2?

Upvotes: 1

Views: 731

Answers (1)

Mr Qian
Mr Qian

Reputation: 23868

MSBuild cannot specify a property for one of the project by the solution file(msbuild xxx\xxx.sln) easily and only targets can be specified. Or you have to type multiple msbuild command line to specify to the related csproj file to enable that changed property like msbuild Project1.csproj -t:build -p:xxx=xxx, msbuild Project2.csproj -t:build. However, it is too complex and inconvenient.

So I recommend that you could use msbuild script to get what you want.

1) create a file called build.proj file:

<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) if you want to change the foo property again, you can just modify the build.proj based on your needs.

Run msbuild xxx\build.proj -t:Build to build it.

Upvotes: 2

Related Questions