2009-03-03 7 views
20

Ho creato una configurazione denominata Test tramite Visual Studio che attualmente accetta solo tutte le impostazioni di DEBUG, tuttavia utilizzo le condizioni del compilatore per determinare alcune azioni specifiche se la build risulta essere TEST | DEBUG | STAMPA.Msbuild riconosce eventuali configurazioni di build diverse da DEBUG | RELEASE

Tuttavia, come posso ottenere il mio script MSBUILD per rilevare la configurazione TEST ??

Attualmente mi costruire

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

Dove @ (SolutionsToBuild) è una mia soluzione. Nel Common MsBuild Project Properties si afferma che $ (Configurazione) è una proprietà comune ma appare sempre vuota?

Ciò significa che non viene mai impostato ma è semplicemente riservato per il mio utilizzo o che può SOLO rilevare DEBUG | RELEASE. In tal caso, qual è il motivo per consentire la creazione di diverse configurazioni di compilazione?

risposta

41

non ho fatto molto con la definizione di un file di configurazione MSBUILD ma ho fatto build di configurazioni diverse utilizzando un file batch come questo

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

ho definito la configurazioneReleaseNoUploads all'interno di Visual Studio.

Ecco cosa ho dovuto fare per questo (questo è Visual Studio 2005):

  • Aprire le Strumenti: Opzioni di menu, andare ai Progetti e soluzioni: opzione Generale, e verificare Mostra configurazioni di build avanzate.
  • Da lì, andare al Corporatura: configurazione menù Direttore
  • Nella finestra di dialogo che si apre, fare clic sul soluzione di configurazione di Active a tendina e cliccare su < Nuovo ... > per creare una nuova build configurazione.
+1

L'unica altra cosa da tenere a mente è che è anche necessario impostare il Pr configurazioni di creazione dell'ogetto e la soluzione – Dean

+0

Che cosa significa? –

2

Nota che quando 'dentro Visual Studio', il $ (configurazione) e $ (Platform) sono sempre impostati da VS utilizzando la roba Configuration Manager nel menu di scorrimento in alto. Considerando che se si desidera impostare questi valori utilizzando msbuild dalla riga di comando, è necessario passare esplicitamente i valori (come nella risposta di @ MarkBiek).

(La maggior parte dei modelli di progetto VS inserirà "valore predefinito" in Configuration/Platform, in modo che sia possibile utilizzare la riga di comando MSBuild senza specificare esplicitamente questi valori. Ciò è positivo, ma visualizza queste due proprietà utili/comuni un po 'più magico/bizzarro di quello che sono in realtà.)

2

Normalmente cosa fare per ottenere di rilascio e di debug sia costruire da un singolo script MSBuild è:

<PropertyGroup Condition="'$(Configuration)'==''"> 
    <Configuration>Debug;Release</Configuration> 
</PropertyGroup> 

Quindi aggiungere questo, ma di salsa segreta MSBuild:

<Target Name="configurations"> 
    <CreateItem Include="$(Configuration)"> 
     <Output TaskParameter="Include" ItemName="Configuration" /> 
    </CreateItem> 
    </Target> 

E allora per ogni target fare qualcosa del genere:

<Target Name="Compile" DependsOnTargets="configurations" Inputs="@(Configuration)" Outputs="target\%(Configuration.FileName)"> 
    <MSBuild Projects="@(MyProjects)" Targets="Build" Properties="Configuration=%(Configuration.Identity);WarningLevel=1" /> 
    </Target>