MSBuild .props e .targets in un pacchetto
In aggiunta agli assembly più tradizionali, i pacchetti NuGet possono talvolta aggiungere destinazioni o proprietà di compilazione personalizzate ai progetti che utilizzano tale pacchetto.
A tale scopo, è possibile aggiungere un file MSBuild valido, nel formato <package_id>.targets
o <package_id>.props
( ad esempio Contoso.Utility.UsefulStuff.targets
) all'interno delle cartelle di compilazione del progetto.
Compilare cartelle
Man mano che NuGet si è evoluto, sono state aggiunte diverse cartelle per la compilazione .props
e .targets
.
Folder | Versione di NuGet | Utilizzo |
---|---|---|
build | 2.5+ | Compilare la logica per ogni framework di un progetto. |
buildMultiTargeting | 4.0+ | Compilare la logica per i outer build progetti destinati a più framework. Solo PackageReference. |
buildTransitive | 5.0+ | Compilare la logica per gli asset che passano transitivamente a qualsiasi progetto che utilizza. Vedere la pagina delle funzionalità. Solo PackageReference. |
Cartella di compilazione specifica del framework
Tutte e 3 le cartelle di compilazione seguono lo stesso modello per decidere il file più adatto in base al framework di destinazione del progetto.
I file nella cartella build/<package_id>.targets
di compilazione radice e build/<package_id>.props
sono considerati adatti per tutti i framework di destinazione.
Per indicare file specifici del framework, inserirli prima nelle sottocartelle appropriate, come di seguito:
\build
\netstandard1.4
\Contoso.Utility.UsefulStuff.props
\Contoso.Utility.UsefulStuff.targets
\net462
\Contoso.Utility.UsefulStuff.props
\Contoso.Utility.UsefulStuff.targets
Preferire l'uso di cartelle di compilazione specifiche del framework quando appropriato per evitare installazioni false positive nei progetti che potrebbero non essere supportati dal pacchetto.
Si noti che se un pacchetto non contiene file nelle lib
cartelle o ref
e solo i file in una cartella di compilazione specifica del framework, tale pacchetto verrà considerato compatibile con tutti i progetti. Le versioni aggiornate degli strumenti pack generano l'avviso NU5127 quando tali pacchetti vengono creati.
Progetti che usano pacchetti con file di compilazione
Progetti PackageReference
.props
e .targets
non vengono aggiunti al file di progetto, ma vengono resi disponibili tramite {projectName}.nuget.g.targets
e {projectName}.nuget.g.props
. Questi file vengono generati automaticamente quando viene eseguito il ripristino.
Quando un progetto è destinato a più framework, le importazioni in questi file vengono condizionali nel nome del framework di destinazione.
I file e .targets
MSBuild .props
per la destinazione multi framework possono essere inseriti nella \buildMultiTargeting
cartella .
Quando vengono generate le importazioni, viene impostata una condizione che la proprietà $(TargetFramework)
MSBuild sia vuota.
Progetti packages.config
Quando installa un pacchetto con i file \build
, NuGet aggiunge elementi <Import>
di MSBuild nel file di progetto che puntano ai file .targets
e .props
. (.props
viene aggiunto nella parte superiore del file di progetto; .targets
viene aggiunto nella parte inferiore. Viene aggiunto un elemento MSBuild <Import>
condizionale separato per ogni framework di destinazione.
Creazione di pacchetti con proprietà e destinazioni MSBuild
È possibile usare uno degli strumenti seguenti per includere MSBuild .props
e .targets
nel pacchetto.
Linee guida per il contenuto delle proprietà e delle destinazioni di MSBuild
NuGet non limita il modo in cui si crea .props
e .targets
in quanto variano in base alla necessità dell'autore del pacchetto e dei progetti di destinazione stessi.
Esistono alcuni aspetti che non devono essere eseguiti nei pacchetti' .props
e .targets
, ad esempio non specificando proprietà ed elementi che influiscono sul ripristino, in quanto verranno esclusi automaticamente.
Alcuni esempi di proprietà che non devono essere aggiunte o aggiornate: TargetFramework, TargetFrameworkMoniker, TargetPlatformMoniker, AssetTargetFallback e così via.
Alcuni esempi di elementi che non devono essere aggiunti o aggiornati: PackageReference, PackageVersion, PackageDownload e così via.