Condividi tramite


Elemento Import (MSBuild)

Importa il contenuto di un file di progetto in un altro file di progetto.

<Importazione progetto><>

Sintassi

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

Attributi ed elementi

Nelle sezioni seguenti vengono descritti gli attributi, gli elementi figlio e gli elementi padre.

Attributi

Attributo Descrizione
Project Attributo obbligatorio.

Percorso del file di progetto da importare. Il percorso può includere caratteri jolly. I file corrispondenti vengono importati in base all'ordine. Usando questa funzionalità, è possibile aggiungere codice a un progetto aggiungendo il file di codice a una directory.
Condition Attributo facoltativo.

Una condizione da valutare. Per altre informazioni, vedere Condizioni.
Label Attributo facoltativo.

Applica un identificatore a questo elemento di importazione.
Sdk Attributo facoltativo.

Fa riferimento a un SDK di progetto.

Elementi figlio

None

Elementi padre

Elemento Descrizione
Progetto Elemento radice obbligatorio di un file di progetto MSBuild.
ImportGroup Contiene una raccolta di elementi Import raggruppati in una condizione facoltativa.

Osservazioni:

Tramite l'elemento Import , è possibile riutilizzare codice comune a più file di progetto. L'uso delle importazioni semplifica la gestione del codice, perché tutti gli aggiornamenti apportati al codice condiviso vengono propagati a tutti i progetti che lo importano.

Per convenzione, i file di progetto condivisi importati vengono salvati come .targets file, ma sono file di progetto MSBuild standard. MSBuild non impedisce di importare un progetto con un'estensione di file diversa, ma è consigliabile usare l'estensione .targets per coerenza.

I percorsi relativi nei progetti importati vengono interpretati in relazione alla directory del progetto di importazione (con alcune eccezioni descritte più avanti in questo paragrafo). Pertanto, se uno stesso file di progetto viene importato in vari file di progetto che si trovano in posizioni diverse, i percorsi relativi nel file di progetto importato vengano interpretati in modo diverso per ogni progetto importato. Esistono due eccezioni. Un'eccezione è che negli Import elementi il percorso viene sempre interpretato rispetto al progetto che contiene l'elemento Import . Un'altra eccezione è che interpreta UsingTask sempre il percorso relativo dell'attributo AssemblyFile rispetto al file che contiene l'elemento UsingTask .

Tutte le proprietà riservate di MSBuild correlate al file di progetto a cui viene fatto riferimento in un progetto importato (ad esempio, MSBuildProjectDirectory e MSBuildProjectFile) vengono assegnati valori in base al file di progetto di importazione.

Se il progetto importato non ha un DefaultTargets attributo, i progetti importati vengono controllati nell'ordine in cui vengono importati e viene usato il valore del primo attributo individuato DefaultTargets . Ad esempio, se ProjectA importa ProjectB e ProjectC (in tale ordine) e ProjectB importa ProjectD, MSBuild cerca DefaultTargets prima di tutto specificato in ProjectA, quindi ProjectB, quindi ProjectD e infine ProjectC.

Lo schema di un progetto importato è identico a quello di un progetto standard. Anche se MSBuild può essere in grado di compilare un progetto importato, è improbabile che un progetto importato in genere non contenga informazioni sulle proprietà da impostare o sull'ordine in cui eseguire le destinazioni. Il progetto importato dipende dal progetto in cui viene importato per fornire tali informazioni.

Caratteri jolly

In .NET Framework 4, MSBuild consente l'uso di caratteri jolly nell'attributo Project. Quando sono presenti caratteri jolly, tutte le corrispondenze trovate vengono ordinate (per riproducibilità) e quindi vengono importate nell'ordine specificato come se l'ordine fosse stato impostato in modo esplicito.

Ciò è utile se si desidera offrire un punto di estensibilità in modo che un altro utente possa importare un file senza che sia necessario aggiungere esplicitamente il nome del file al file di importazione. A questo scopo, Microsoft.Common.Targets contiene la riga seguente all'inizio del file.

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

Esempio

L'esempio seguente illustra un progetto con diversi elementi e proprietà che importa un file di progetto generale.

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

Vedi anche