Kompilacja tych samych plików źródłowych przy użyciu różnych opcji
Podczas kompilowania projektów często kompilujesz te same składniki z różnymi opcjami kompilacji. Możesz na przykład utworzyć kompilację debugowania z informacjami o symbolach lub kompilacją wydania bez informacji o symbolach, ale z włączonymi optymalizacjami. Możesz też utworzyć projekt do uruchomienia na określonej platformie, takiej jak x86 lub x64. We wszystkich tych przypadkach większość opcji kompilacji pozostanie taka sama; tylko kilka opcji jest zmienianych w celu kontrolowania konfiguracji kompilacji. Program MSBuild używa właściwości i warunków do tworzenia różnych konfiguracji kompilacji.
Używanie właściwości do kontrolowania ustawień kompilacji
Element Property
definiuje zmienną, do którego odwołuje się kilka razy w pliku projektu, na przykład lokalizację katalogu tymczasowego lub ustawia wartości właściwości używanych w kilku konfiguracjach, takich jak kompilacja debugowania i kompilacja wydania. Aby uzyskać więcej informacji o właściwościach, zobacz Właściwości programu MSBuild.
Właściwości umożliwiają zmianę konfiguracji kompilacji bez konieczności zmiany pliku projektu. Atrybut Condition
Property
elementu i PropertyGroup
elementu umożliwia zmianę wartości właściwości. Aby uzyskać więcej informacji na temat warunków programu MSBuild, zobacz Warunki.
Aby ustawić grupę właściwości, która zależy od innej właściwości
Użyj atrybutu w elemecie
Condition
PropertyGroup
podobnym do następującego:<PropertyGroup Condition="'$(Flavor)'=='DEBUG'"> <DebugType>full</DebugType> <Optimize>no</Optimize> </PropertyGroup>
Aby zdefiniować właściwość, która zależy od innej właściwości
Użyj atrybutu w elemecie
Condition
Property
podobnym do następującego:<DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>
Określanie właściwości w wierszu polecenia
Gdy plik projektu zostanie zapisany w celu zaakceptowania wielu konfiguracji, musisz mieć możliwość zmiany tych konfiguracji za każdym razem, gdy kompilujesz projekt. Program MSBuild umożliwia określenie właściwości w wierszu polecenia przy użyciu przełącznika -property lub -p .
Aby ustawić właściwość projektu w wierszu polecenia
Użyj przełącznika -property z właściwością i wartością właściwości. Na przykład:
msbuild file.proj -property:Flavor=Debug
lub
Msbuild file.proj -p:Flavor=Debug
Aby określić więcej niż jedną właściwość projektu w wierszu polecenia
Użyj przełącznika -property lub -p wiele razy z wartościami właściwości i właściwości lub użyj jednego przełącznika -property lub -p i rozdziel wiele właściwości średnikami (;). Na przykład:
msbuild file.proj -p:Flavor=Debug;Platform=x86
lub
msbuild file.proj -p:Flavor=Debug -p:Platform=x86
Zmienne środowiskowe są również traktowane jako właściwości i są automatycznie uwzględniane przez program MSBuild. Aby uzyskać więcej informacji na temat używania zmiennych środowiskowych, zobacz Instrukcje: używanie zmiennych środowiskowych w kompilacji.
Wartość właściwości określona w wierszu polecenia ma pierwszeństwo przed dowolną wartością ustawioną dla tej samej właściwości w pliku projektu, a ta wartość w pliku projektu ma pierwszeństwo przed wartością w zmiennej środowiskowej.
To zachowanie można zmienić przy użyciu atrybutu
TreatAsLocalProperty
w tagu projektu. W przypadku nazw właściwości wymienionych za pomocą tego atrybutu wartość właściwości określona w wierszu polecenia nie ma pierwszeństwa przed wartością w pliku projektu. Przykład można znaleźć w dalszej części tego tematu.
Przykład 1
Poniższy przykład kodu, projekt "Hello World", zawiera dwie nowe grupy właściwości, których można użyć do utworzenia kompilacji debugowania i kompilacji wydania.
Aby skompilować wersję debugowania tego projektu, wpisz:
msbuild consolehwcs1.proj -p:flavor=debug
Aby skompilować wersję detaliczną tego projektu, wpisz:
msbuild consolehwcs1.proj -p:flavor=retail
<Project DefaultTargets = "Compile"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Sets the default flavor if 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>
Przykład 2
W poniższym przykładzie pokazano, jak używać atrybutu TreatAsLocalProperty
. Właściwość Color
ma wartość Blue
w pliku projektu i Green
w wierszu polecenia. W TreatAsLocalProperty="Color"
tagu projektu właściwość wiersza polecenia (Green
) nie zastępuje właściwości zdefiniowanej w pliku projektu (Blue
).
Aby skompilować projekt, wprowadź następujące polecenie:
msbuild colortest.proj -t:go -property:Color=Green
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="4.0" TreatAsLocalProperty="Color">
<PropertyGroup>
<Color>Blue</Color>
</PropertyGroup>
<Target Name="go">
<Message Text="Color: $(Color)" />
</Target>
</Project>
<!--
Output with TreatAsLocalProperty="Color" in project tag:
Color: Blue
Output without TreatAsLocalProperty="Color" in project tag:
Color: Green
-->