Import-Element (MSBuild)
Importiert die Inhalte einer Projektdatei in eine andere Projektdatei.
<Projekt><Import>
Syntax
<Import Project="ProjectPath"
Condition="'String A'=='String B'" />
Attribute und Elemente
In den folgenden Abschnitten werden Attribute sowie untergeordnete und übergeordnete Elemente beschrieben.
Attribute
Attribut | Beschreibung |
---|---|
Project |
Erforderliches Attribut. Der Pfad der zu importierenden Projektdatei. Der Pfad kann Platzhalter enthalten. Die entsprechenden Dateien werden in sortierter Reihenfolge importiert. Mit dieser Funktion können Sie Code einem Projekt hinzufügen, indem Sie einfach die Codedatei einem Verzeichnis hinzufügen. |
Condition |
Optionales Attribut. Eine auszuwertende Bedingung. Weitere Informationen finden Sie unter Conditions (MSBuild-Bedingungen). |
Label |
Optionales Attribut. Wendet einen Bezeichner auf dieses Import-Element an. |
Sdk |
Optionales Attribut. Verweist auf ein Projekt-SDK. |
Untergeordnete Elemente
Keine
Übergeordnete Elemente
Element | Beschreibung |
---|---|
Projekt | Erforderliches Stammelement einer MSBuild-Projektdatei. |
ImportGroup | Enthält eine Sammlung von Import -Elementen, die unter einer optionalen Bedingung gruppiert sind. |
Bemerkungen
Mithilfe des Import
-Elements können Sie Code wiederverwenden, der in vielen Projektdateien verwendet wird. Die Verwendung von Importen erleichtert die Verwaltung des Codes, da jedes von Ihnen ausgeführte Update für den freigegebenen Code an alle Projekte weitergegeben wird, die ihn importieren.
Gemäß Konvention werden freigegebene importierte Projektdateien als .targets
-Dateien gespeichert, es handelt sich jedoch um MSBuild-Standardprojektdateien. MSBuild hindert Sie nicht daran, ein Projekt zu importieren, das eine andere Dateinamenerweiterung aufweist. Es wird jedoch empfohlen, aus Konsistenzgründen die Erweiterung .targets
zu verwenden.
Relative Pfade in importierten Projekten werden relativ zum Verzeichnis des importierenden Projekts interpretiert (mit einigen wenigen Ausnahmen, die weiter unten beschrieben werden). Wenn eine Projektdatei in verschiedene Projektdateien an unterschiedliche Speicherorte importiert wird, werden daher die relativen Pfade in der importierten Projektdatei unterschiedlich für jedes importierte Projekt interpretiert. Dazu gibt es zwei Ausnahmen: In Import
-Elementen wird der Pfad immer relativ zum Projekt interpretiert, das das Import
-Element enthält. UsingTask
interpretiert den relativen Pfad für das AssemblyFile
-Attribut immer relativ zur Datei, die das UsingTask
-Element enthält.
Allen für MSBuild reservierten Eigenschaften, die sich auf die Projektdatei beziehen, auf die in einem importierten Projekt verwiesen wird (beispielsweise MSBuildProjectDirectory
und MSBuildProjectFile
), werden basierend auf der importierenden Projektdatei Werte zugewiesen.
Wenn das importierte Projekt über kein DefaultTargets
-Attribut verfügt, werden importierte Projekte in der Reihenfolge untersucht, in der sie importiert werden, und der Wert des ersten gefundenen DefaultTargets
-Attributs wird verwendet. Wenn beispielsweise ProjektA ProjektB und ProjektC (in dieser Reihenfolge) importiert, und ProjectB importiert ProjektD, prüft MSBuild zuerst, ob DefaultTargets
in ProjektA angegeben ist, durchsucht dann ProjektB und ProjektD und schließlich ProjektC.
Das Schema eines importierten Projekts ist identisch mit dem Schema eines Standardprojekts. Obwohl MSBuild möglicherweise ein importiertes Projekt erstellen kann, ist es unwahrscheinlich, da ein importiertes Projekt normalerweise keine Informationen enthält, wie Eigenschaften festzulegen sind oder die Reihenfolge, in der Ziele ausgeführt werden. Das importierte Projekt ist abhängig vom Projekt in das es importiert wird, um diese Information bereitzustellen.
Platzhalter
In .NET Framework 4 erlaubt MSBuild Platzhalter im Attribut „Projekt“. Wenn Platzhalter vorhanden sind, werden alle gefundenen Übereinstimmungen (für die Reproduzierbarkeit) sortiert und dann werden sie in dieser Reihenfolge importiert, so als ob diese explizit festgelegt wurde.
Dies ist hilfreich, wenn Sie einen Erweiterungspunkt zur Verfügung stellen möchten, sodass jemand anderes eine Datei importieren kann, ohne dass Sie explizit der zu importierenden Datei den Dateinamen hinzufügen müssen. Zu diesem Zweck enthält Microsoft.Common.Targets die folgende Zeile am Anfang der Datei.
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore\*" Condition="'$(ImportByWildcardBeforeMicrosoftCommonTargets)' == 'true' and exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore')"/>
Beispiel
Das folgende Beispiel zeigt ein Projekt, das über mehrere Elemente und Eigenschaften verfügt und eine allgemeine Projektdatei importiert.
<Project DefaultTargets="Compile"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<resourcefile>Strings.resx</resourcefile>
<compiledresources>
$(O)\$(MSBuildProjectName).Strings.resources
</compiledresources>
</PropertyGroup>
<ItemGroup>
<CSFile Include="*.cs" />
<Reference Include="System" />
<Reference Include="System.Data" />
</ItemGroup>
<Import Project="$(CommonLocation)\General.targets" />
</Project>