views:

939

answers:

3

I created a configuration named Test via Visual Studio which currently just takes all of DEBUG settings, however I employ compiler conditions to determine some specific actions if the build happens to be TEST|DEBUG|RELEASE.

However how can I get my MSBUILD script to detect the TEST configuration??

Currently I build

 <MSBuild Projects="@(SolutionsToBuild)" Properties="Configuration=$(Configuration);OutDir=$(BuildDir)\Builds\" />

Where @(SolutionsToBuild) is a my solution. In the Common MsBuild Project Properties it states that $(Configuration) is a common property but it always appears blank?

Does this mean that it never gets set but is simply reserved for my use or that it can ONLY detect DEBUG|RELEASE. If so what is the point in allowing the creation of different build configurations?

+8  A: 

I haven't done much with defining an MSBUILD configuration file but I have done builds of different configurations using a batch file like this

msbuild /v:n /p:Configuration=Release "Capture.sln" 
msbuild /v:n /p:Configuration=ReleaseNoUploads "Capture.sln"

I defined the ReleaseNoUploads configuration inside Visual Studio.

Here's what I had to do for that (this is Visual Studio 2005):

  • Open the Tools:Options menu, go to the Projects and Solutions:General option, and check Show advanced build configurations.
  • From there, go to the Build:Configuration Manager menu
  • In the dialog that pops up, click on the Active solution configuration pulldown and click <New...> to create a new build configuration.
Mark Biek
The only other thing to bear in mind is that you also need to set the Project build configurations as well as the solution
Dean
+5  A: 

Sure, you can have as many custom build configurations as you want to define. See this related question for how the setup might look.

http://stackoverflow.com/questions/350377/deploy-an-app-config-based-on-build-configuration

Chris Ballance
+1  A: 

Note that when 'inside visual studio', the $(Configuration) and $(Platform) are always set by VS using the Configuration Manager stuff in the dropdowns at the top. Whereas if you want to set these values using msbuild from the command line, you must pass in the values explicitly (as in @MarkBiek's answer).

(Most VS project templates will 'default in' a value for Configuration/Platform, so that you can use the command-line MSBuild without specifying these values explicitly. This is good, but makes these two useful/common properties appear a little more magical/weird than they actually are.)

Brian