Import-Element (MSBuild)

Importiert den Inhalt einer Projektdatei in eine andere Projektdatei.

<Import Project="ProjectPath"
    Condition="'String A'=='String B'" />

Attribute und Elemente

In den folgenden Abschnitten werden Attribute, untergeordnete Elemente und übergeordnete Elemente beschrieben.

Attribute

Attribut

Beschreibung

Project

Erforderliches Attribut.

Der Pfad der zu importierenden Projektdatei. Der Pfad kann Platzhalterzeichen enthalten. Die entsprechenden Dateien werden sortiert importiert. Mit dieser Funktion können Sie einem Projekt Code hinzufügen, indem Sie lediglich die Code-Datei einem Verzeichnis hinzufügen.

Condition

Optionales Attribut.

Eine auszuwertende Bedingung. Weitere Informationen finden Sie unter MSBuild-Bedingungen.

Untergeordnete Elemente

None

Übergeordnete Elemente

Element

Beschreibungen

Project

Erforderliches Stammelement einer MSBuild-Projektdatei.

ImportGroup

Enthält eine Auflistung von Import-Elementen, die unter einer optionalen Bedingung gruppiert sind.

Hinweise

Mit dem Import-Element können Sie Code wiederverwenden, der vielen Projektdateien gemeinsam ist. Dies erleichtert es, den Code verwalten, da alle Updates, die Sie am freigegebenen Code vornehmen, an alle Projekte weitergegeben werden, die Sie importieren.

Der Konvention nach werden importierte Projektdateien als Dateien mit der Erweiterung .targets gespeichert, es handelt sich aber um standardmäßige MSBuild-Projektdateien. MSBuild verhindert nicht den Import eines Projekts mit einer anderen Dateinamenerweiterung, aber die Erweiterung TARGETS wird aus Konsistenzgründen empfohlen.

Relative Pfade in importierten Projekten werden als relativ zum Verzeichnis des importierenden Projekts interpretiert. Wenn eine Projektdatei in verschiedene Projektdateien an unterschiedlichen Speicherorten importiert wird, werden daher die relativen Pfade in der importierten Projektdatei je nach importiertem Projekt unterschiedlich interpretiert.

Allen reservierten Eigenschaften von MSBuild mit Bezug zu der Projektdatei, z. B. MSBuildProjectDirectory und MSBuildProjectFile, auf die in einem importierten Projekt verwiesen wird, werden je nach der importierenden Projektdatei Werte zugewiesen.

Wenn das importierte Projekt kein DefaultTargets-Attribut aufweist, werden importierte Projekte in der Reihenfolge, in der sie importiert wurden, überprüft, und der Wert des ersten gefundenen DefaultTargets-Attributs wird verwendet. Wenn beispielsweise ProjektA ProjektB und ProjektC (in dieser Reihenfolge) importiert und ProjektB ProjektD importiert, sucht MSBuild zuerst in ProjektA, dann in ProjektB, anschließend in ProjektD und schließlich in ProjektC nach einer Angabe für DefaultTargets.

Das Schema eines importierten Projekts ist mit dem eines Standardprojekts identisch. Obwohl MSBuild möglicherweise ein importiertes Projekt erstellen kann, ist es unwahrscheinlich, da ein importiertes Projekt meist keine Informationen darüber enthält, welche Eigenschaften festgelegt werden sollen, oder über die Reihenfolge der Ausführung der Ziele. Diese Informationen muss das importierende Projekt für das importierte Projekt bereitstellen.

HinweisHinweis

Bedingte Importanweisungen funktionieren zwar in MSBuilds mit Befehlszeilen, sie funktionieren jedoch nicht, wenn MSBuild in der integrierten Entwicklungsumgebung (IDE) von Visual Studio verwendet wird.Bedingte Importe werden unter Verwendung der Konfigurations- und Plattform-Werte, die beim Laden des Projekts festgelegt werden, ausgewertet. Wenn spätere Änderungen eine Neuauswertung der Bedingungen in der Projektdatei erfordern, zum Beispiel Ändern der Plattform, bewertet Visual Studio die Bedingungen für Eigenschaften und Elemente neu, aber nicht für die Importe.Da die Importbedingung nicht neu ausgewertet wird, wird der Import übersprungen.

Platzieren Sie zur Umgehung dieses Problems die bedingten Importe in den TARGETS-Dateien oder in einem bedingten Block, z. B. einem Choose-Element (MSBuild)-Block.

Platzhalter

In .NET Framework 4 gestattet MSBuild Platzhalter im Project-Attribut. Wenn Platzhalter da sind, werden alle gefundenen Übereinstimmungen (für die Reproduzierbarkeit) sortiert und dann werden sie in dieser Reihenfolge importiert, als ob die Reihenfolge explizit festgelegt worden wäre.

Dies ist nützlich, wenn Sie einen Erweiterungspunkt anbieten möchten, damit jemand eine Datei importieren kann, ohne dass Sie explizit den Dateinamen der importierenden Datei 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 Codebeispiel veranschaulicht ein Projekt, das mehrere Elemente und Eigenschaften festlegt und eine allgemeine Projektdatei importiert.

<Project DefaultTargets="Compile"
    xmlns="https://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>

Siehe auch

Aufgaben

Gewusst wie: Verwenden eines Ziels in mehreren Projektdateien

Konzepte

Referenz zum MSBuild-Projektdateischema