Verwenden desselben Ziels in mehreren Projektdateien
Wenn Sie mehrere MSBuild-Projektdateien erstellt haben, ist Ihnen wahrscheinlich aufgefallen, dass Sie die gleichen Aufgaben und Ziele in verschiedenen Projektdateien verwenden müssen. Statt die vollständige Beschreibung dieser Aufgaben oder Ziele in jede Projektdatei einzuschließen, können Sie ein Ziel in einer separaten Projektdatei speichern und dieses Projekt anschließend in einem beliebigen anderen Projekt importieren, in dem das Ziel verwendet werden muss.
Verwenden des Import-Elements
Das Import
-Element wird verwendet, um eine Projektdatei in eine andere Projektdatei einzufügen. Die importierte Projektdatei muss eine gültige MSBuild-Projektdatei sein, die wohlgeformtes XML enthält. Das Attribut Project
gibt den Pfad zur importierten Projektdatei an. Weitere Informationen zu dem Import
-Element finden Sie unter Import-Element (MSBuild).
So importieren Sie ein Projekt
Definieren Sie in der importierten Projektdatei alle Eigenschaften und Elemente, die als Parameter für Eigenschaften und Elemente im importierten Projekt verwendet werden.
Verwenden Sie das
Import
-Element zum Importieren des Projekts. Zum Beispiel:<Import Project="MyCommon.targets"/>
Definieren Sie nach dem
Import
-Element alle Eigenschaften und Elemente, mit denen Standarddefinitionen von Eigenschaften und Elementen im importierten Projekt überschrieben werden müssen.
Reihenfolge der Auswertung
Wenn MSBuild ein Import
-Element erreicht, wird das importierte Projekt effektiv an der Stelle des Import
-Elements in das importierende Projekt eingefügt. Aus diesem Grund kann der Speicherort des Import
-Elements Auswirkungen auf die Werte der Eigenschaften und Elemente haben. Die Eigenschaften und Elemente, die durch das importierte Projekt festgelegt wurden, und die Eigenschaften und Elemente, die vom importierten Projekt verwendet werden, müssen bekannt sein.
Wenn das Projekt erstellt wird, werden zunächst alle Eigenschaften ausgewertet, gefolgt von den Elementen. Folgendes XML definiert z.B. die importierte Projektdatei MyCommon.targets:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Name>MyCommon</Name>
</PropertyGroup>
<Target Name="Go">
<Message Text="Name=$(Name)"/>
</Target>
</Project>
Folgendes XML definiert MyApp.proj, worüber MyCommon.targets importiert wird:
<Project
DefaultTargets="Go"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Name>MyApp</Name>
</PropertyGroup>
<Import Project="MyCommon.targets"/>
</Project>
Wenn das Projekt erstellt wird, wird die folgende Nachricht angezeigt:
Name="MyCommon"
Da der Import des Projekts nach der Definition der Eigenschaft Name
in MyApp.proj erfolgt ist, wird mit der Definition von Name
in MyCommon.targets die Definition in MyApp.proj überschrieben. Wenn der Import des Projekts vor der Definition der Eigenschaft „Name“ erfolgt, würde die folgende Nachricht im Build angezeigt werden:
Name="MyApp"
Gehen Sie beim Importieren von Projekten wie folgt vor
Definieren Sie in der Projektdatei alle Eigenschaften und Elemente, die als Parameter für Eigenschaften und Elemente im importierten Projekt verwendet werden.
Importieren Sie das Projekt.
Definieren Sie in der Projektdatei alle Eigenschaften und Elemente, mit denen Standarddefinitionen von Eigenschaften und Elementen im importierten Projekt überschrieben werden müssen.
Beispiel 1
Im folgenden Codebeispiel wird die Datei MyCommon.targets dargestellt, die im zweiten Codebeispiel importiert wird. Die TARGETS-Datei wertet Eigenschaften des importierten Projekts für die Konfiguration des Builds aus.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
<Optimize Condition="'$(Flavor)'=='RETAIL'">yes</Optimize>
<appname>$(MSBuildProjectName)</appname>
<PropertyGroup>
<Target Name="Build">
<Csc Sources="hello.cs"
Optimize="$(Optimize)"
OutputAssembly="$(appname).exe"/>
</Target>
</Project>
Beispiel 2
Im folgenden Codebeispiel wird die Datei MyCommon.targets importiert.
<Project DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Flavor>RETAIL</Flavor>
</PropertyGroup>
<Import Project="MyCommon.targets"/>
</Project>