2009-03-03 25 views
20

Utworzono konfigurację o nazwie Test przez Visual Studio, która obecnie zajmuje po prostu wszystkie ustawienia DEBUGA, jednak stosuję warunki kompilacji w celu określenia pewnych konkretnych działań, jeśli kompilacja jest TESTEM | DEBUG | RELEASE.Czy Msbuild rozpoznaje jakiekolwiek konfiguracje kompilacji inne niż DEBUG | RELEASE

Jak jednak uzyskać skrypt MSBUILD do wykrywania konfiguracji testu?

Obecnie buduję

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

Gdzie @ (SolutionsToBuild) jest moje rozwiązanie. W numerze Common MsBuild Project Properties podano, że $ (konfiguracja) jest typową właściwością, ale zawsze jest pusta?

Czy to oznacza, że ​​nigdy nie zostanie ustawiony, ale jest po prostu zarezerwowany dla mojego użytku lub, że może TYLKO wykryć DEBUG | RELEASE. Jeśli tak, jaki jest sens w umożliwieniu tworzenia różnych konfiguracji kompilacji?

Odpowiedz

41

nie robiłem dużo zdefiniowania pliku konfiguracyjnego msbuild ale mam zrobić kompilacje różnych konfiguracjach przy użyciu pliku wsadowego jak ten

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

ja zdefiniował ReleaseNoUploads konfiguracji wewnątrz Visual Studio.

Oto, co musiałem zrobić do tego (to jest Visual Studio 2005):

  • Otwórz Narzędzia: Opcje menu, przejdź do projekty i rozwiązania: Ogólne opcji i sprawdzić Pokaż zaawansowane konfiguracje kompilacji.
  • Stamtąd udać się do produkcji: Menu konfiguracji Menedżer
  • W oknie dialogowym, które się pojawi, kliknij na roztworu aktywnego konfiguracja rozwijanego i kliknij <...> Nowy, aby utworzyć nowy build konfiguracja.
+1

Jedyną rzeczą, aby pamiętać, że trzeba także ustawić Pr konfiguracje oject kompilacji, a także rozwiązanie – Dean

+0

Co to znaczy? –

2

Zauważ, że kiedy 'wewnątrz visual studio', to $ (Configuration) i $ (Platform) są zawsze ustalane przez VS używając rzeczy Configuration Manager w rozwijanego menu na górze. Natomiast jeśli chcesz ustawić te wartości za pomocą msbuild z wiersza poleceń, musisz jawnie przekazać wartości (jak w odpowiedzi @ MarkBieka).

(Większość szablonów projektów VS będzie domyślnie wprowadzać wartość dla konfiguracji/platformy, aby można było użyć wiersza polecenia MSBuild bez wyraźnego określenia tych wartości.) To jest dobre, ale powoduje, że te dwie użyteczne/typowe właściwości są wyświetlane trochę bardziej magiczne/dziwne, niż są w rzeczywistości.)

2

Normalnie co zrobić, aby zwolnić i Debug zarówno budowę z jednym skrypcie MSBuild jest:

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

Następnie dodać to jednak tajnego sosie MSBuild:

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

a następnie dla każdej target zrobić coś takiego:

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