Elemento Import (MSBuild)
Aggiornamento: novembre 2007
Importa il contenuto di un file di progetto in un altro file di progetto.
<Import Project="ProjectPath"
Condition="'String A'=='String B'" />
Attributi ed elementi
Nelle sezioni riportate di seguito vengono illustrati attributi, elementi figlio e padre.
Attributi
Attributo |
Descrizione |
---|---|
Project |
Attributo obbligatorio. Percorso del file di progetto da importare. |
Condition |
Attributo facoltativo. Condizione da valutare. Per ulteriori informazioni, vedere Condizioni di MSBuild. |
Elementi figlio
Nessuno
Elementi padre
Elemento |
Descrizione |
---|---|
Elemento radice obbligatorio di un file di progetto MSBuild. |
Note
L'elemento Import consente di riutilizzare il codice comune a numerosi file di progetto. Lo spostamento di blocchi di codice comuni in altri file di progetto consente di gestire il codice e di propagare le modifiche in una posizione centrale. Se ad esempio nel progetto A e nel progetto B vengono impostati i valori specifici degli elementi e delle proprietà per le relative compilazioni e il progetto C contiene i processi di compilazione comuni, i progetti A e B potranno importare il progetto C e le modifiche ai processi di generazione verranno apportate a un unico file.
I file di progetto comuni importati vengono salvati per convenzione come file con estensione targets, ma sono file di progetto MSBuild standard. MSBuild non impedisce l'importazione di un progetto con un'estensione di file diversa, ma è consigliabile utilizzare l'estensione di file targets per garantire l'uniformità.
Tutti i percorsi relativi dei progetti importati vengono interpretati come tali rispetto alla directory del progetto importato. Pertanto, se un file di progetto viene importato in diversi file di progetto in percorsi differenti, i percorsi relativi del file di progetto importato verranno interpretati in modo diverso per ogni progetto importato.
A tutte le proprietà MSBuild riservate relative al file di progetto, ad esempio MSBuildProjectDirectory e MSBuildProjectFile, a cui si fa riferimento in un progetto importato vengono assegnati valori in base al file di progetto di importazione.
Se il progetto importato non dispone di un attributo DefaultTargets, i progetti verranno esaminati nell'ordine di importazione e verrà utilizzato il valore del primo attributo DefaultTargets individuato. Se ad esempio il progetto A importa, nell'ordine, il progetto B e il progetto C e se B importa il progetto D, in MSBuild verrà innanzitutto eseguita la ricerca dell'attributo DefaultTargets specificato nel progetto A, quindi nei progetti B e D e infine nel progetto C.
Lo schema di un progetto importato è identico a quello di un progetto standard. È possibile compilare un progetto importato in MSBuild, ma è probabile che la compilazione non venga completata, in quanto il progetto importato in genere non contiene le informazioni sulle proprietà da impostare o sull'ordine in cui eseguire le destinazioni. Tali informazioni vengono fornite dal progetto in cui viene importato.
Nota
Le istruzioni di importazione condizionale possono essere utilizzate con MSBuilds della riga di comando, ma non con MSBuild dell'ambiente di sviluppo integrato (IDE) Visual Studio. Le importazioni condizionali sono valutate utilizzando i valori predefiniti della piattaforma e della configurazione iniziale impostati al caricamento del progetto. Se successivamente si apportano modifiche che richiedono una rivalutazione delle istruzioni condizionali nel file del progetto, ad esempio la modifica della piattaforma, Visual Studio rivaluta le condizioni sulle proprietà e sugli elementi, ma non le importazioni. Dal momento che l'istruzione condizionale dell'importazione non è rivalutata, l'importazione viene ignorata.
Per risolvere questo problema, posizionare le importazioni condizionali nei file targets o il codice nei blocchi condizionali, ad esempio un blocco Elemento Choose (MSBuild).
Esempio
Nell'esempio di codice riportato di seguito viene illustrato un progetto in cui vengono impostati diversi elementi e proprietà e in cui viene importato un file di progetto comune.
<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>
Vedere anche
Attività
Procedura: utilizzare la stessa destinazione in più file di progetto