Dela via


Importelement (MSBuild)

Importerar innehållet i en projektfil till en annan projektfil.

<Projektimport><>

Syntax

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

Attribut och element

I följande avsnitt beskrivs attribut, underordnade element och överordnade element.

Attributes

Attribute Description
Project Obligatoriskt attribut.

Sökvägen till den projektfil som ska importeras. Sökvägen kan innehålla jokertecken. Matchande filer importeras i sorterad ordning. Med den här funktionen kan du lägga till kod i ett projekt bara genom att lägga till kodfilen i en katalog.
Condition Valfritt attribut.

Ett villkor som ska utvärderas. Mer information finns i Villkor.
Label Valfritt attribut.

Tillämpar en identifierare på det här importelementet.
Sdk Valfritt attribut.

Refererar till ett projekt-SDK.

Underordnade element

None

Överordnade element

Komponent Description
Projekt Obligatoriskt rotelement i en MSBuild-projektfil.
ImportGroup Innehåller en samling Import element grupperade under ett valfritt villkor.

Anmärkningar

Med hjälp av elementet Import kan du återanvända kod som är gemensam för många projektfiler. Med importer blir det enklare att underhålla koden eftersom alla uppdateringar som du gör i den delade koden sprids till alla projekt som importerar den.

Enligt konventionen sparas delade importerade projektfiler som .targets filer, men de är standard-MSBuild-projektfiler. MSBuild hindrar dig inte från att importera ett projekt som har ett annat filnamnstillägg, men vi rekommenderar att du använder .targets tillägget för konsekvens.

Relativa sökvägar i importerade projekt tolkas i förhållande till katalogen för det importerande projektet (med några undantag som beskrivs senare i det här stycket). Om en projektfil importeras till flera projektfiler på olika platser tolkas därför de relativa sökvägarna i den importerade projektfilen på olika sätt för varje importerat projekt. Det finns två undantag. Ett undantag är att sökvägen i Import element alltid tolkas i förhållande till projektet som innehåller elementet Import . Ett annat undantag är att UsingTask alltid tolkar den relativa sökvägen för AssemblyFile attributet i förhållande till filen som innehåller elementet UsingTask .

Alla reserverade MSBuild-egenskaper som relaterar till projektfilen som refereras till i ett importerat projekt (till exempel MSBuildProjectDirectory och MSBuildProjectFile) tilldelas värden baserat på den importerande projektfilen.

Om det importerade projektet inte har något DefaultTargets attribut kontrolleras importerade projekt i den ordning de importeras och värdet för det första identifierade DefaultTargets attributet används. Om ProjectA till exempel importerar ProjectB och ProjectC (i den ordningen) och ProjectB importerar ProjectD söker MSBuild först efter DefaultTargets angivet på ProjectA, sedan ProjectB, sedan ProjectD och slutligen ProjectC.

Schemat för ett importerat projekt är identiskt med ett standardprojekt. Även om MSBuild kanske kan skapa ett importerat projekt är det osannolikt eftersom ett importerat projekt vanligtvis inte innehåller information om vilka egenskaper som ska anges eller i vilken ordning mål ska köras. Det importerade projektet beror på vilket projekt det importeras till för att tillhandahålla den informationen.

Jokertecken

MSBuild tillåter jokertecken i project-attributet. När det finns jokertecken sorteras alla matchningar som hittas (för reproducerbarhet) och sedan importeras de i den ordningen som om ordningen hade angetts uttryckligen.

Det här är användbart om du vill erbjuda en utökningspunkt så att någon annan kan importera en fil utan att du uttryckligen behöver lägga till filnamnet i importfilen. För detta ändamål innehåller Microsoft.Common.Targets följande rad överst i filen.

<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore\*" Condition="'$(ImportByWildcardBeforeMicrosoftCommonTargets)' == 'true' and exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore')"/>

Example

I följande exempel visas ett projekt som har flera objekt och egenskaper och importerar en allmän projektfil.

<Project DefaultTargets="Compile">

    <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>

Se även