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>