Gewusst wie: Erstellen identischer Quelldateien mit unterschiedlichen Optionen
Aktualisiert: November 2007
Wenn Sie Projekte erstellen, ist es oft notwendig, die gleichen Komponenten mit unterschiedlichen Buildoptionen zu kompilieren. So können Sie beispielsweise ein Debugbuild mit Symbolinformationen oder ein Releasebuild ohne Symbolinformationen, dafür aber mit aktivierten Optimierungen, erstellen. Alternativ können Sie ein Projekt erstellen, das auf einer bestimmten Plattform wie x86 oder x64 ausgeführt werden soll. In allen diesen Fällen bleiben die meisten Buildoptionen unverändert. Nur einige Optionen werden zur Steuerung der Buildkonfiguration geändert. Bei MSBuild verwenden Sie Eigenschaften und Bedingungen, um die verschiedenen Buildkonfigurationen zu erstellen.
Verwenden von Eigenschaften zum Ändern von Projekten
Das Property-Element definiert eine Variable, auf die in einer Projektdatei mehrfach verwiesen wird. Die Variable kann beispielsweise den Speicherort eines temporären Verzeichnisses angeben oder zum Festlegen der Eigenschaftenwerte für verschiedene Konfigurationen verwendet werden, beispielsweise Debug- und Releasebuilds. Weitere Informationen zu Eigenschaften finden Sie unter MSBuild-Eigenschaften.
Sie können Eigenschaften verwenden, um die Konfiguration des Builds zu ändern, ohne die Projektdatei zu modifizieren. Das Condition-Attribut des Property-Elements und das PropertyGroup-Element ermöglichen Ihnen, den Wert von Eigenschaften zu ändern. Weitere Informationen zu MSBuild-Bedingungen finden Sie unter MSBuild-Bedingungen.
So legen Sie eine Gruppe von Eigenschaften auf Grundlage einer anderen Eigenschaft fest
Verwenden Sie ein Condtion-Attribut in einem mit dem folgenden Beispiel vergleichbaren PropertyGroup-Element:
<PropertyGroup Condition="'$(Flavor)'=='DEBUG'"> <DebugType>full</DebugType> <Optimize>no</Optimize> </PropertyGroup>
So definieren Sie eine Eigenschaft auf der Grundlage einer anderen Eigenschaft
Verwenden Sie ein Condition-Attribut in einem mit dem folgenden Beispiel vergleichbaren Property-Element:
<DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>
Angeben von Eigenschaften in der Befehlszeile
Nachdem die Projektdatei für die Unterstützung mehrerer Konfigurationen eingerichtet wurde, muss die Möglichkeit bestehen, diese Konfigurationen bei jeder Projekterstellung zu ändern. MSBuild bietet diese Möglichkeit, indem das Festlegen von Eigenschaften über die Schalter /property oder /p in der Befehlszeile erfolgen kann.
So legen Sie eine Projekteigenschaft in der Befehlszeile fest
Verwenden Sie den Schalter /property mit der Eigenschaft und dem Eigenschaftenwert. Beispiel:
msbuild file.proj /property:Flavor=Debug
- oder -
Msbuild file.proj /p:Flavor=Debug
So geben Sie mehrere Projekteigenschaften in der Befehlszeile an
Verwenden Sie den Schalter /property oder /p mehrere Male mit der Eigenschaft und den Eigenschaftenwerten, oder verwenden Sie den Schalter /property oder /p einmal, und trennen Sie mehrere Eigenschaften mithilfe von Semikolons (;). Beispiel:
msbuild file.proj /p:Flavor=Debug;Platform=x86
- oder -
msbuild file.proj /p:Flavor=Debug /p:Platform=x86
Umgebungsvariablen werden ebenfalls als Eigenschaften behandelt und automatisch von MSBuild integriert. Weitere Informationen zur Verwendung von Umgebungsvariablen finden Sie unter Gewusst wie: Verwenden von Umgebungsvariablen in einem Build.
Hinweis: |
---|
Der in der Befehlszeile festgelegte Eigenschaftenwert hat Vorrang vor allen anderen Werten, die für dieselbe Eigenschaft in der Projektdatei festgelegt wurden. Der Wert in der Projektdatei hat wiederum Vorrang vor dem Wert in der Umgebungsvariablen. |
Beispiel
Im folgenden Codebeispiel enthält das Projekt "Hello World" zwei neue Eigenschaftengruppen, die zur Erstellung eines Debugbuilds und eines Releasebuilds verwendet werden können.
Um die Debugversion dieses Projekts zu erstellen, geben Sie Folgendes ein:
msbuild consolehwcs1.proj /p:flavor=debug
Um die Einzelhandelsversion dieses Projekts zu erstellen, geben Sie Folgendes ein:
msbuild consolehwcs1.proj /p:flavor=retail
<Project DefaultTargets = "Compile"
xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<!-- Sets the default flavor of an environment variable called
Flavor is not set or specified on the command line -->
<PropertyGroup>
<Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
</PropertyGroup>
<!-- Define the DEBUG settings -->
<PropertyGroup Condition="'$(Flavor)'=='DEBUG'">
<DebugType>full</DebugType>
<Optimize>no</Optimize>
</PropertyGroup>
<!-- Define the RETAIL settings -->
<PropertyGroup Condition="'$(Flavor)'=='RETAIL'">
<DebugType>pdbonly</DebugType>
<Optimize>yes</Optimize>
</PropertyGroup>
<!-- Set the application name as a property -->
<PropertyGroup>
<appname>HelloWorldCS</appname>
</PropertyGroup>
<!-- Specify the inputs by type and file name -->
<ItemGroup>
<CSFile Include = "consolehwcs1.cs"/>
</ItemGroup>
<Target Name = "Compile">
<!-- Run the Visual C# compilation using input files
of type CSFile -->
<CSC Sources = "@(CSFile)"
DebugType="$(DebugType)"
Optimize="$(Optimize)"
OutputAssembly="$(appname).exe" >
<!-- Set the OutputAssembly attribute of the CSC
task to the name of the executable file that is
created -->
<Output TaskParameter="OutputAssembly"
ItemName = "EXEFile" />
</CSC>
<!-- Log the file name of the output file -->
<Message Text="The output file is @(EXEFile)"/>
</Target>
</Project>