NuGet pack e ripristino come MSBuild destinazioni
NuGet 4.0+
Con il formato PackageReference , NuGet 4.0+ può archiviare tutti i metadati del manifesto direttamente all'interno di un file di progetto anziché usare un file separato .nuspec
.
Con MSBuild 15.1+, NuGet è anche un cittadino di prima classe MSBuild con gli pack
obiettivi e restore
come descritto di seguito. Queste destinazioni consentono di usare NuGet come si farebbe con qualsiasi altra MSBuild attività o destinazione. Per istruzioni sulla creazione di un pacchetto con MSBuild, vedere Creare un NuGet pacchetto con MSBuild.NuGet (Per NuGet 3.x e versioni precedenti, si usano invece i comandi pack e restore tramite l'interfaccia della NuGet riga di comando.
Ordine di compilazione delle destinazioni
Poiché pack
e restore
sono MSBuild destinazioni, è possibile accedervi per migliorare il flusso di lavoro. Si supponga, ad esempio, di voler copiare il pacchetto in una condivisione di rete dopo averlo creato. È possibile farlo aggiungendo quanto segue nel file di progetto:
<Target Name="CopyPackage" AfterTargets="Pack">
<Copy
SourceFiles="$(OutputPath)..\$(PackageId).$(PackageVersion).nupkg"
DestinationFolder="\\myshare\packageshare\"
/>
</Target>
Analogamente, è possibile scrivere un'attività MSBuild , scrivere la propria destinazione e utilizzare NuGet le proprietà nell'attività MSBuild .
Nota
$(OutputPath)
è relativo e prevede di eseguire il comando dalla radice del progetto.
Destinazione pack
Per i progetti .NET che usano il PackageReference
formato , utilizzando msbuild -t:pack
disegna input dal file di progetto da usare per la creazione di un NuGet pacchetto.
Nella tabella seguente vengono descritte le MSBuild proprietà che è possibile aggiungere a un file di progetto all'interno del primo <PropertyGroup>
nodo. È possibile apportare facilmente queste modifiche in Visual Studio 2017 e versioni successive facendo clic con il pulsante destro del mouse sul progetto e scegliendo Modifica {nome_progetto} dal menu di scelta rapida. Per praticità, la tabella è organizzata in base alla proprietà equivalente in un .nuspec
file.
Nota
Owners
le proprietà e Summary
da .nuspec
non sono supportate con MSBuild.
Attributo/nuspec Valore | Proprietà diMSBuild | Predefiniti | Note |
---|---|---|---|
Id |
PackageId |
$(AssemblyName) |
$(AssemblyName) da MSBuild |
Version |
PackageVersion |
Versione | Si tratta di semver compatibile, ad esempio 1.0.0 , 1.0.0-beta o 1.0.0-beta-00345 . L'impostazione predefinita è Version se non impostata. |
VersionPrefix |
VersionPrefix |
empty | Impostazione PackageVersion delle sovrascrizioni VersionPrefix |
VersionSuffix |
VersionSuffix |
empty | Impostazione PackageVersion delle sovrascrizioni VersionSuffix |
Authors |
Authors |
Nome utente dell'utente corrente | Elenco delimitato da punto e virgola di autori di pacchetti, che corrispondono ai nomi dei profili in nuget.org. Questi vengono visualizzati nella raccolta su NuGet nuget.org e vengono usati per fare riferimento incrociato ai pacchetti degli stessi autori. |
Owners |
N/D | Non presente in nuspec | |
Title |
Title |
$(PackageId) |
Un titolo descrittivo del pacchetto, in genere usato nell'interfaccia utente, viene visualizzato come in nuget.org e il Gestione pacchetti in Visual Studio. |
Description |
Description |
"Descrizione del pacchetto" | Descrizione lunga per l'assembly. Se PackageDescription non viene specificato, questa proprietà viene utilizzata anche come descrizione del pacchetto. |
Copyright |
Copyright |
empty | Informazioni sul copyright per il pacchetto. |
RequireLicenseAcceptance |
PackageRequireLicenseAcceptance |
false |
Valore booleano che specifica se il client deve richiedere al consumer di accettare la licenza del pacchetto prima di installarlo. |
license |
PackageLicenseExpression |
empty | Corrisponde a <license type="expression"> . Vedere Compressione di un'espressione di licenza o di un file di licenza. |
license |
PackageLicenseFile |
empty | Percorso di un file di licenza all'interno del pacchetto se si usa una licenza personalizzata o una licenza a cui non è stato assegnato un identificatore SPDX. È necessario comprimere in modo esplicito il file di licenza a cui si fa riferimento. Corrisponde a <license type="file"> . Vedere Compressione di un'espressione di licenza o di un file di licenza. |
LicenseUrl |
PackageLicenseUrl |
empty | PackageLicenseUrl è stato deprecato. In sostituzione utilizzare PackageLicenseExpression o PackageLicenseFile . |
ProjectUrl |
PackageProjectUrl |
empty | |
Icon |
PackageIcon |
empty | Percorso di un'immagine nel pacchetto da usare come icona del pacchetto. È necessario comprimere in modo esplicito il file di immagine dell'icona a cui si fa riferimento. Per altre informazioni, vedere Compressione di un file di immagine icona e icon metadati. |
IconUrl |
PackageIconUrl |
empty | PackageIconUrl è deprecato a favore di PackageIcon . Tuttavia, per un'esperienza di livello inferiore ottimale, è necessario specificare PackageIconUrl oltre a PackageIcon . |
Readme |
PackageReadmeFile |
empty | È necessario comprimere in modo esplicito il file leggimi a cui si fa riferimento. |
Tags |
PackageTags |
empty | Elenco di tag con valori delimitati da punto e virgola che designa il pacchetto. |
ReleaseNotes |
PackageReleaseNotes |
empty | Note sulla versione per il pacchetto. |
Repository/Url |
RepositoryUrl |
empty | URL del repository usato per clonare o recuperare il codice sorgente. Esempio: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git. |
Repository/Type |
RepositoryType |
empty | Tipo di repository. Esempi: git (impostazione predefinita), tfs . |
Repository/Branch |
RepositoryBranch |
empty | Informazioni facoltative sul ramo del repository. RepositoryUrl deve essere specificato anche per includere questa proprietà. Esempio: master (NuGet 4.7.0+). |
Repository/Commit |
RepositoryCommit |
empty | Commit o set di modifiche del repository facoltativo per indicare l'origine in cui è stato compilato il pacchetto. RepositoryUrl deve essere specificato anche per includere questa proprietà. Esempio: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+). |
PackageType |
<PackageType>CustomType1, 1.0.0.0;CustomType2</PackageType> |
Indica l'uso previsto del pacchetto. I tipi di pacchetto usano lo stesso formato degli ID pacchetto e sono delimitati da ; . I tipi di pacchetto possono essere con versione aggiungendo un , oggetto e una Version stringa. Vedere Impostare un NuGet tipo di pacchetto (NuGet 3.5.0+). |
|
Summary |
Non supportato |
Input destinazione pack
Proprietà | Descrizione |
---|---|
IsPackable |
Valore booleano che specifica se dal progetto può essere creato un pacchetto. Il valore predefinito è true . |
SuppressDependenciesWhenPacking |
Impostare su true per eliminare le dipendenze dei pacchetti dal pacchetto generato NuGet . |
PackageVersion |
Specifica la versione che avrà il pacchetto risultante. Accetta tutte le forme di stringa di NuGet versione. Il valore predefinito corrisponde al valore di $(Version) , vale a dire della proprietà Version nel progetto. |
PackageId |
Specifica il nome del pacchetto risultante. Se non specificato, l'impostazione predefinita per l'operazione pack corrisponde all'uso di AssemblyName o del nome della directory come nome del pacchetto. |
PackageDescription |
Descrizione lunga del pacchetto per la visualizzazione dell'interfaccia utente. |
Authors |
Elenco delimitato da punto e virgola di autori di pacchetti, che corrispondono ai nomi dei profili in nuget.org. Questi vengono visualizzati nella raccolta su NuGet nuget.org e vengono usati per fare riferimento incrociato ai pacchetti degli stessi autori. |
Description |
Descrizione lunga per l'assembly. Se PackageDescription non viene specificato, questa proprietà viene utilizzata anche come descrizione del pacchetto. |
Copyright |
Informazioni sul copyright per il pacchetto. |
PackageRequireLicenseAcceptance |
Valore booleano che specifica se il client deve richiedere al consumer di accettare la licenza del pacchetto prima di installarlo. Il valore predefinito è false . |
DevelopmentDependency |
Valore booleano che specifica se il pacchetto è contrassegnato come dipendenza di sola sviluppo, che impedisce l'inclusione del pacchetto come dipendenza in altri pacchetti. Con PackageReference (NuGet 4.8+), questo flag significa anche che gli asset in fase di compilazione vengono esclusi dalla compilazione. Per altre informazioni, vedere Supporto di DevelopmentDependency per PackageReference. |
PackageLicenseExpression |
Identificatore o espressione di licenza SPDX, Apache-2.0 ad esempio . Per altre informazioni, vedere Compressione di un'espressione di licenza o di un file di licenza. |
PackageLicenseFile |
Percorso di un file di licenza all'interno del pacchetto se si usa una licenza personalizzata o una licenza a cui non è stato assegnato un identificatore SPDX. |
PackageLicenseUrl |
PackageLicenseUrl è stato deprecato. In sostituzione utilizzare PackageLicenseExpression o PackageLicenseFile . |
PackageProjectUrl |
|
PackageIcon |
Specifica il percorso dell'icona del pacchetto, relativo alla radice del pacchetto. Per altre informazioni, vedere Creazione di un file di immagine icona. |
PackageReleaseNotes |
Note sulla versione per il pacchetto. |
PackageReadmeFile |
File Leggimi per il pacchetto. |
PackageTags |
Elenco di tag con valori delimitati da punto e virgola che designa il pacchetto. |
PackageOutputPath |
Determina il percorso di output in cui verrà rilasciato il pacchetto creato. Il valore predefinito è $(OutputPath) . |
IncludeSymbols |
Valore booleano che indica se al momento della creazione del pacchetto deve essere creato un pacchetto aggiuntivo di simboli. Il formato del pacchetto di simboli è controllato dalla proprietà SymbolPackageFormat . Per altre informazioni, vedere IncludeSymbols. |
IncludeSource |
Valore booleano che indica se il processo di creazione del pacchetto deve creare un pacchetto di origine. Il pacchetto di origine contiene il codice sorgente della libreria, nonché i file PDB. I file di origine vengono posizionati nella directory src/ProjectName del file del pacchetto risultante. Per altre informazioni, vedere IncludeSource. |
PackageType |
|
IsTool |
Specifica se tutti i file di output devono essere copiati nella cartella tools anziché nella cartella lib. Per altre informazioni, vedere IsTool. |
RepositoryUrl |
URL del repository usato per clonare o recuperare il codice sorgente. Esempio: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git. |
RepositoryType |
Tipo di repository. Esempi: git (impostazione predefinita), tfs . |
RepositoryBranch |
Informazioni facoltative sul ramo del repository. RepositoryUrl deve essere specificato anche per includere questa proprietà. Esempio: master (NuGet 4.7.0+). |
RepositoryCommit |
Commit o set di modifiche del repository facoltativo per indicare l'origine in cui è stato compilato il pacchetto. RepositoryUrl deve essere specificato anche per includere questa proprietà. Esempio: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+). |
SymbolPackageFormat |
Specifica il formato del pacchetto di simboli. Se "symbols.nupkg", viene creato un pacchetto di simboli legacy con estensione symbols.nupkg contenente FILE PDF, DLL e altri file di output. Se "snupkg", viene creato un pacchetto di simboli snupkg contenente i PDB portatili. Il valore predefinito è "symbols.nupkg". |
NoPackageAnalysis |
Specifica che pack non deve eseguire l'analisi dei pacchetti dopo la compilazione del pacchetto. |
MinClientVersion |
Specifica la versione minima del client in grado di NuGet installare il pacchetto, applicato da nuget.exe e da Visual Studio Gestione pacchetti. |
IncludeBuildOutput |
Questo valore booleano specifica se gli assembly di output di compilazione devono essere compressi nel file con estensione nupkg . |
IncludeContentInPack |
Questo valore booleano specifica se gli elementi con un tipo di Content vengono inclusi automaticamente nel pacchetto risultante. Il valore predefinito è true . |
BuildOutputTargetFolder |
Specifica la cartella in cui inserire gli assembly di output. Gli assembly di output (e altri file di output) vengono copiati nelle rispettive cartelle per framework. Per altre informazioni, vedere Assembly di output. |
ContentTargetFolders |
Specifica il percorso predefinito in cui devono essere specificati tutti i file di contenuto se PackagePath non vengono specificati. Il valore predefinito è "content;contentFiles". Per altre informazioni, vedere Including content in a package (Includere contenuto in un pacchetto). |
NuspecFile |
Percorso relativo o assoluto del file utilizzato per la .nuspec compressione. Se specificato, viene usato esclusivamente per i pacchetti di informazioni e le informazioni nei progetti non vengono usate. Per altre informazioni, vedere Packaging using a .nuspec. |
NuspecBasePath |
Percorso di base per il .nuspec file. Per altre informazioni, vedere Packaging using a .nuspec. |
NuspecProperties |
Elenco con valori delimitati da punto e virgola di coppie chiave=valore. Per altre informazioni, vedere Packaging using a .nuspec. |
Scenari pack
Eliminazione delle dipendenze
Per eliminare le dipendenze dei pacchetti dal pacchetto generato NuGet , impostare su SuppressDependenciesWhenPacking
true
che consentirà di ignorare tutte le dipendenze dal file nupkg generato.
PackageIconUrl
PackageIconUrl
è deprecato a favore della PackageIcon
proprietà . NuGet A partire dalla versione 5.3 e Visual Studio 2019 versione 16.3, pack
genera l'avviso NU5048 se i metadati del pacchetto specificano PackageIconUrl
solo .
PackageIcon
Suggerimento
Per mantenere la compatibilità con le versioni precedenti con client e origini che non supportano PackageIcon
ancora , specificare sia PackageIcon
che PackageIconUrl
. Visual Studio supporta PackageIcon
i pacchetti provenienti da un'origine basata su cartelle.
Compressione di un file di immagine icona
Quando si crea il pacchetto di un file di immagine icona, usare PackageIcon
la proprietà per specificare il percorso del file icona, relativo alla radice del pacchetto. Assicurarsi inoltre che il file sia incluso nel pacchetto. Le dimensioni del file di immagine sono limitate a 1 MB. I formati di file supportati includono JPEG e PNG. È consigliabile una risoluzione dell'immagine di 128x128.
Ad esempio:
<PropertyGroup>
...
<PackageIcon>icon.png</PackageIcon>
...
</PropertyGroup>
<ItemGroup>
...
<None Include="images\icon.png" Pack="true" PackagePath="\"/>
...
</ItemGroup>
Esempio di icona del pacchetto.
Per l'equivalente nuspec , vedere riferimento per nuspec l'icona.
PackageReadmeFile
Supportato con NuGet 5.10.0 preview 2.NET / SDK 5.0.300 e versioni successive
Quando si esegue la compressione di un file readme, è necessario usare la PackageReadmeFile
proprietà per specificare il percorso del pacchetto, rispetto alla radice del pacchetto. Oltre a questo, è necessario assicurarsi che il file sia incluso nel pacchetto. I formati di file supportati includono solo Markdown (.md).
Ad esempio:
<PropertyGroup>
...
<PackageReadmeFile>readme.md</PackageReadmeFile>
...
</PropertyGroup>
<ItemGroup>
...
<None Include="docs\readme.md" Pack="true" PackagePath="\"/>
...
</ItemGroup>
Per l'equivalente nuspec , vedere il nuspec riferimento per readme.
Assembly di output
nuget pack
copia i file di output con le estensioni .exe
, .dll
, .xml
, .winmd
, .json
e .pri
. I file di output copiati dipendono da ciò che MSBuild fornisce dalla BuiltOutputProjectGroup
destinazione.
Esistono due MSBuild proprietà che è possibile usare nel file di progetto o nella riga di comando per controllare dove vanno gli assembly di output:
IncludeBuildOutput
: valore booleano che determina se gli assembly di output della compilazione devono essere inclusi nel pacchetto.BuildOutputTargetFolder
: specifica la cartella in cui devono essere posizionati gli assembly di output. Gli assembly di output (e altri file di output) vengono copiati nelle rispettive cartelle per framework.
Riferimenti ai pacchetti
Vedere Riferimenti ai pacchetti nei file di progetto.
Riferimenti da progetto a progetto
I riferimenti da progetto a progetto vengono considerati per impostazione predefinita come NuGet riferimenti al pacchetto. Ad esempio:
<ProjectReference Include="..\UwpLibrary2\UwpLibrary2.csproj"/>
È anche possibile aggiungere i metadati seguenti ai riferimenti del progetto:
<IncludeAssets>
<ExcludeAssets>
<PrivateAssets>
Inclusione di contenuto in un pacchetto
Per includere il contenuto, aggiungere altri metadati all'elemento <Content>
esistente. Per impostazione predefinita tutti gli elementi di tipo"Content" vengono inclusi nel pacchetto, a meno che non si esegua l'override con voci simili al codice seguente:
<Content Include="..\win7-x64\libuv.txt">
<Pack>false</Pack>
</Content>
Per impostazione predefinita, tutti gli elementi vengono aggiunti alla radice di content
e della cartella contentFiles\any\<target_framework>
all'interno di un pacchetto e viene mantenuta la struttura di cartelle relative, a meno che non si specifichi un percorso di pacchetto:
<Content Include="..\win7-x64\libuv.txt">
<Pack>true</Pack>
<PackagePath>content\myfiles\</PackagePath>
</Content>
Se si desidera copiare tutto il contenuto in una o più cartelle radice specifiche (anziché content
e contentFiles
entrambe), è possibile usare la MSBuild proprietà ContentTargetFolders
, che per impostazione predefinita è "content; contentFiles" ma può essere impostato su qualsiasi altro nome di cartella. Si noti che se si specifica solo "contentFiles" in ContentTargetFolders
, i file vengono posizionati in contentFiles\any\<target_framework>
o contentFiles\<language>\<target_framework>
in base a buildAction
.
PackagePath
può essere un set di percorsi di destinazione delimitati da punto e virgola. Se si specifica un percorso di pacchetto vuoto, il file viene aggiunto alla radice del pacchetto. Ad esempio, il codice seguente aggiunge libuv.txt
a content\myfiles
, content\samples
e nella radice del pacchetto:
<Content Include="..\win7-x64\libuv.txt">
<Pack>true</Pack>
<PackagePath>content\myfiles;content\sample;;</PackagePath>
</Content>
Esiste anche una MSBuild proprietà $(IncludeContentInPack)
, che per impostazione predefinita è true
. Se questa proprietà è impostata su false
in qualsiasi progetto, il contenuto di tale progetto non viene incluso nel nuget pacchetto.
Altri metadati specifici del pacchetto che è possibile impostare su uno degli elementi precedenti includono e quali impostano CopyToOutput
e Flatten
i valori nella contentFiles
voce nell'output nuspec.<PackageFlatten>
<PackageCopyToOutput>
Nota
Oltre agli elementi Content, i metadati <Pack>
e <PackagePath>
possono anche essere impostati nei file con l'azione di compilazione Compile, EmbeddedResource, ApplicationDefinition, Page, Resource, SplashScreen, DesignData, DesignDataWithDesignTimeCreateableTypes, CodeAnalysisDictionary, AndroidAsset, AndroidResource, BundleResource o None.
Per fare in modo che il comando pack aggiunga il nome del file al percorso del pacchetto quando si usano modelli con caratteri jolly (glob), il percorso del pacchetto deve terminare con il carattere separatore di cartella. In caso contrario, il percorso del pacchetto viene interpretato come percorso completo, incluso il nome del file.
IncludeSymbols
Quando si usa MSBuild -t:pack -p:IncludeSymbols=true
, i file .pdb
corrispondenti vengono copiati insieme agli altri file di output (.dll
, .exe
, .winmd
, .xml
, .json
, .pri
). Si noti che l'impostazione IncludeSymbols=true
crea un pacchetto regolare e un pacchetto di simboli.
IncludeSource
Equivale a IncludeSymbols
, ma insieme ai file .pdb
vengono copiati anche i file di origine. Tutti i file di tipo Compile
vengono copiati in src\<ProjectName>\
conservando la struttura di cartelle del percorso relativo nel pacchetto risultante. Lo stesso accade anche per i file di origine di qualsiasi ProjectReference
con TreatAsPackageReference
impostato su false
.
Se un file di tipo Compile è all'esterno della cartella di progetto, viene semplicemente aggiunto a src\<ProjectName>\
.
Compressione di un'espressione di licenza o di un file di licenza
Quando si usa un'espressione di licenza, usare la PackageLicenseExpression
proprietà . Per un esempio, vedere Esempio di espressione di licenza.
<PropertyGroup>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>
Per altre informazioni sulle espressioni di licenza e sulle licenze accettate da NuGet.org, vedere metadati delle licenze.
Quando si crea il pacchetto di un file di licenza, usare PackageLicenseFile
la proprietà per specificare il percorso del pacchetto, relativo alla radice del pacchetto. Assicurarsi inoltre che il file sia incluso nel pacchetto. Ad esempio:
<PropertyGroup>
<PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
</PropertyGroup>
<ItemGroup>
<None Include="licenses\LICENSE.txt" Pack="true" PackagePath=""/>
</ItemGroup>
Per un esempio, vedere Esempio di file di licenza.
Nota
È possibile specificare solo uno di PackageLicenseExpression
, PackageLicenseFile
e PackageLicenseUrl
alla volta.
Compressione di un file senza estensione
In alcuni scenari, ad esempio durante la compressione di un file di licenza, potrebbe essere necessario includere un file senza estensione. Per motivi cronologici, NuGet e MSBuild trattare i percorsi senza estensione come directory.
<PropertyGroup>
<TargetFrameworks>netstandard2.0</TargetFrameworks>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
</PropertyGroup>
<ItemGroup>
<None Include="LICENSE" Pack="true" PackagePath=""/>
</ItemGroup>
File senza un esempio di estensione.
IsTool
Quando si usa MSBuild -t:pack -p:IsTool=true
, tutti i file, come specificato nello scenario Assembly di output, vengono copiati nella cartella tools
invece che nella cartella lib
. Si noti che questo comportamento è diverso da DotNetCliTool
, che viene specificato impostando PackageType
nel file .csproj
.
Compressione con un .nuspec
file
Sebbene sia consigliabile includere tutte le proprietà in genere presenti nel .nuspec
file di progetto, è possibile scegliere di usare un .nuspec
file per comprimere il progetto. Per un progetto non in stile SDK che usa PackageReference
, è necessario importare NuGet.Build.Tasks.Pack.targets
in modo che l'attività pack possa essere eseguita. È comunque necessario ripristinare il progetto prima di poter comprimere un nuspec file. Per impostazione predefinita, un progetto in stile SDK include le destinazioni pack.
Il framework di destinazione del file di progetto è irrilevante e non viene usato per la compressione di un oggetto nuspec. Le tre MSBuild proprietà seguenti sono rilevanti per la compressione tramite un oggetto .nuspec
:
NuspecFile
: percorso relativo o assoluto per il file.nuspec
usato per la creazione del pacchetto.NuspecProperties
: elenco con valori delimitati da punto e virgola di coppie chiave=valore. A causa del funzionamento MSBuild dell'analisi della riga di comando, è necessario specificare più proprietà nel modo seguente:-p:NuspecProperties="key1=value1;key2=value2"
.NuspecBasePath
: percorso di base per il file.nuspec
.
Se si usa dotnet.exe
per creare il pacchetto del progetto, usare un comando simile al seguente:
dotnet pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path>
Se si usa MSBuild per creare il pacchetto del progetto, usare un comando simile al seguente:
msbuild -t:pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path>
Si noti che la compressione di un nuspec oggetto utilizzando dotnet.exe o msbuild anche la compilazione del progetto per impostazione predefinita. Ciò può essere evitato passando la --no-build
proprietà a dotnet.exe, che è l'equivalente dell'impostazione <NoBuild>true</NoBuild>
nel file di progetto, insieme all'impostazione <IncludeBuildOutput>false</IncludeBuildOutput>
nel file di progetto.
Un esempio di file con estensione csproj per comprimere un nuspec file è:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<NoBuild>true</NoBuild>
<IncludeBuildOutput>false</IncludeBuildOutput>
<NuspecFile>PATH_TO_NUSPEC_FILE</NuspecFile>
<NuspecProperties>add nuspec properties here</NuspecProperties>
<NuspecBasePath>optional to provide</NuspecBasePath>
</PropertyGroup>
</Project>
Punti di estensione avanzati per creare un pacchetto personalizzato
La pack
destinazione fornisce due punti di estensione eseguiti nella build specifica del framework di destinazione interno. I punti di estensione supportano l'inclusione di contenuto e assembly specifici del framework di destinazione in un pacchetto:
TargetsForTfmSpecificBuildOutput
target: usare per i file all'interno dellalib
cartella o di una cartella specificata tramiteBuildOutputTargetFolder
.TargetsForTfmSpecificContentInPackage
target: usare per i file all'esterno diBuildOutputTargetFolder
.
TargetsForTfmSpecificBuildOutput
Scrivere una destinazione personalizzata e specificarla come valore della $(TargetsForTfmSpecificBuildOutput)
proprietà . Per tutti i file che devono essere inseriti in BuildOutputTargetFolder
(lib per impostazione predefinita), la destinazione deve scrivere tali file in ItemGroup BuildOutputInPackage
e impostare i due valori di metadati seguenti:
FinalOutputPath
: percorso assoluto del file; se non specificato, l'identità viene usata per valutare il percorso di origine.TargetPath
: (Facoltativo) Impostare quando il file deve entrare in una sottocartella all'internolib\<TargetFramework>
di , ad esempio gli assembly satellite che si trovano nelle rispettive cartelle delle impostazioni cultura. Il valore predefinito è il nome del file.
Esempio:
<PropertyGroup>
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);GetMyPackageFiles</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
<Target Name="GetMyPackageFiles">
<ItemGroup>
<BuildOutputInPackage Include="$(OutputPath)cs\$(AssemblyName).resources.dll">
<TargetPath>cs</TargetPath>
</BuildOutputInPackage>
</ItemGroup>
</Target>
TargetsForTfmSpecificContentInPackage
Scrivere una destinazione personalizzata e specificarla come valore della $(TargetsForTfmSpecificContentInPackage)
proprietà . Per includere i file nel pacchetto, la destinazione deve scrivere tali file in ItemGroup TfmSpecificPackageFile
e impostare i metadati facoltativi seguenti:
PackagePath
: percorso in cui deve essere restituito il file nel pacchetto. NuGet genera un avviso se più file vengono aggiunti allo stesso percorso del pacchetto.BuildAction
: azione di compilazione da assegnare al file, obbligatoria solo se il percorso del pacchetto si trova nellacontentFiles
cartella . Il valore predefinito è "Nessuno".
Ad esempio,
<PropertyGroup>
<TargetsForTfmSpecificContentInPackage>$(TargetsForTfmSpecificContentInPackage);CustomContentTarget</TargetsForTfmSpecificContentInPackage>
</PropertyGroup>
<Target Name="CustomContentTarget">
<ItemGroup>
<TfmSpecificPackageFile Include="abc.txt">
<PackagePath>mycontent/$(TargetFramework)</PackagePath>
</TfmSpecificPackageFile>
<TfmSpecificPackageFile Include="Extensions/ext.txt" Condition="'$(TargetFramework)' == 'net46'">
<PackagePath>net46content</PackagePath>
</TfmSpecificPackageFile>
</ItemGroup>
</Target>
Destinazione restore
MSBuild -t:restore
(usato da nuget restore
e dotnet restore
con progetti .NET Core) consente di ripristinare i pacchetti a cui si fa riferimento nel file di progetto, come segue:
- Lettura di tutti i riferimenti da progetto a progetto
- Lettura delle proprietà del progetto per trovare la cartella intermedia e i framework di destinazione
- Passare MSBuild i dati a NuGet. Build.Tasks.dll
- Esecuzione di restore
- Download dei pacchetti
- Scrittura dei file di asset, delle destinazioni e delle proprietà
La restore
destinazione funziona per i progetti usando il formato PackageReference.
MSBuild 16.5+
ha anche il supporto esplicito per il packages.config
formato.
Nota
La restore
destinazione non deve essere eseguita in combinazione con la build
destinazione.
Ripristino delle proprietà
Le impostazioni di ripristino aggiuntive possono provenire da MSBuild proprietà nel file di progetto. I valori possono essere impostati anche dalla riga di comando tramite l'opzione -p:
(vedere gli esempi riportati di seguito).
Proprietà | Descrizione |
---|---|
RestoreSources |
Elenco delimitato da punto e virgola delle origini di pacchetti. |
RestorePackagesPath |
Percorso della cartella dei pacchetti dell'utente. |
RestoreDisableParallel |
Consente di limitare i download a uno alla volta. |
RestoreConfigFile |
Percorso per un file Nuget.Config da applicare. |
RestoreNoHttpCache |
Se true, evita l'uso di pacchetti memorizzati nella cache HTTP. Vedere Gestione dei pacchetti globali e delle cartelle della cache. |
RestoreIgnoreFailedSources |
Se true, ignora le origini di pacchetti in errore o mancanti. |
RestoreFallbackFolders |
Le cartelle di fallback, usate nello stesso modo in cui viene usata la cartella dei pacchetti utente. |
RestoreAdditionalProjectSources |
Origini aggiuntive da usare durante il ripristino. |
RestoreAdditionalProjectFallbackFolders |
Cartelle di fallback aggiuntive da usare durante il ripristino. |
RestoreAdditionalProjectFallbackFoldersExcludes |
Esclude le cartelle di fallback specificate in RestoreAdditionalProjectFallbackFolders |
RestoreTaskAssemblyFile |
Percorso di NuGet.Build.Tasks.dll . |
RestoreGraphProjectInput |
Elenco delimitato da punto e virgola dei progetti da ripristinare, che deve contenere percorsi assoluti. |
RestoreUseSkipNonexistentTargets |
Quando i progetti vengono raccolti tramite MSBuild , determina se vengono raccolti usando l'ottimizzazione SkipNonexistentTargets . Se non è impostato, il valore predefinito è true . La conseguenza è un comportamento di errore rapido quando non è possibile importare le destinazioni di un progetto. |
MSBuildProjectExtensionsPath |
Cartella di output, impostazione predefinita BaseIntermediateOutputPath e obj cartella. |
RestoreForce |
Nei progetti basati su PackageReference forza la risoluzione di tutte le dipendenze anche se l'ultimo ripristino è riuscito. Specificare questo flag è simile all'eliminazione del project.assets.json file. Ciò non ignora la cache http. |
RestorePackagesWithLockFile |
Acconsente esplicitamente all'utilizzo di un file di blocco. |
RestoreLockedMode |
Eseguire il ripristino in modalità bloccata. Ciò significa che il ripristino non rivaluta le dipendenze. |
NuGetLockFilePath |
Percorso personalizzato per il file di blocco. Il percorso predefinito è accanto al progetto ed è denominato packages.lock.json . |
RestoreForceEvaluate |
Forza il ripristino per ricompilare le dipendenze e aggiornare il file di blocco senza alcun avviso. |
RestorePackagesConfig |
Opzione di consenso esplicito che ripristina i progetti con packages.config. Supporto solo con MSBuild -t:restore . |
RestoreRepositoryPath |
solo packages.config. Specifica la directory dei pacchetti in cui devono essere ripristinati i pacchetti. SolutionDirectory verrà utilizzato se non specificato. |
RestoreUseStaticGraphEvaluation |
Opzione di consenso esplicito per usare la valutazione statica del grafo MSBuild anziché la valutazione standard. La valutazione statica del grafico è una funzionalità sperimentale notevolmente più veloce per repository e soluzioni di grandi dimensioni. |
RestoreUseLegacyDependencyResolver |
Rifiuto esplicito per l'uso del sistema di risoluzione delle dipendenze legacy. NuGetL'implementazione del sistema di risoluzione delle dipendenze è stata riscritta nella versione 6.12. Questa opzione forza l'uso dell'algoritmo precedente. |
La ExcludeRestorePackageImports
proprietà è una proprietà interna utilizzata da NuGet.
Non deve essere modificato o impostato in alcun MSBuild file.
Esempi
Riga di comando:
msbuild -t:restore -p:RestoreConfigFile=<path>
File di progetto:
<PropertyGroup>
<RestoreIgnoreFailedSources>true</RestoreIgnoreFailedSources>
</PropertyGroup>
Output del ripristino
Il ripristino crea i file seguenti nella cartella obj
di compilazione:
File | Descrizione |
---|---|
project.assets.json |
Contiene il grafico delle dipendenze di tutti i riferimenti al pacchetto. |
{projectName}.projectFileExtension.nuget.g.props |
Riferimenti alle MSBuild proprietà contenute nei pacchetti |
{projectName}.projectFileExtension.nuget.g.targets |
Riferimenti alle MSBuild destinazioni contenute nei pacchetti |
Ripristino e compilazione con un MSBuild unico comando
A causa del fatto che NuGet è possibile ripristinare i pacchetti che causano MSBuild destinazioni e proprietà, le valutazioni di ripristino e compilazione vengono eseguite con proprietà globali diverse. Ciò significa che quanto segue avrà un comportamento imprevedibile e spesso errato.
msbuild -t:restore,build
L'approccio consigliato è invece:
msbuild -t:build -restore
La stessa logica si applica ad altre destinazioni simili a build
.
Ripristino di progetti PackageReference e packages.config con MSBuild
Con MSBuild la versione 16.5+, packages.config è supportato anche per msbuild -t:restore
.
msbuild -t:restore -p:RestorePackagesConfig=true
Nota
packages.config
il ripristino è disponibile solo con MSBuild 16.5+
e non con dotnet.exe
Ripristino con MSBuild valutazione del grafo statico
Nota
Con MSBuild la versione 16.6+, NuGet è stata aggiunta una funzionalità sperimentale per usare la valutazione statica del grafo dalla riga di comando che migliora significativamente il tempo di ripristino per i repository di grandi dimensioni.
msbuild -t:restore -p:RestoreUseStaticGraphEvaluation=true
In alternativa, è possibile abilitarla impostando la proprietà in un oggetto Directory.Build.Props.
<Project>
<PropertyGroup>
<RestoreUseStaticGraphEvaluation>true</RestoreUseStaticGraphEvaluation>
</PropertyGroup>
</Project>
Nota
A partire da Visual Studio 2019.x e NuGet 5.x, questa funzionalità viene considerata sperimentale e accettata esplicitamente. Per informazioni dettagliate su quando questa funzionalità verrà abilitata per impostazione predefinita, seguire NuGet/Home#9803 .
Il ripristino statico del grafo modifica la msbuild parte del ripristino, la lettura e la valutazione del progetto, ma non l'algoritmo di ripristino. L'algoritmo di ripristino è lo stesso in tutti gli NuGet strumenti (NuGet.exe, MSBuild.exe, dotnet.exe e Visual Studio).
In pochissimi scenari, il ripristino statico del grafico può comportarsi in modo diverso rispetto al ripristino corrente e alcuni packageReference dichiarati o ProjectReference potrebbero non essere presenti.
Per semplificare la mente, come controllo una sola volta, quando si esegue la migrazione al ripristino statico del grafo, prendere in considerazione l'esecuzione:
msbuild.exe -t:restore -p:RestoreUseStaticGraphEvaluation=true
msbuild.exe -t:restore
NuGetnon deve segnalare alcuna modifica. Se viene visualizzata una discrepanza, inviare un problema in NuGet/Home.
Sostituzione di una libreria da un grafico di ripristino
Se un ripristino restituisce l'assembly errato, è possibile escludere la scelta predefinita di tali pacchetti e sostituirla con la propria scelta. Prima di tutto, con un PackageReference
di livello superiore, escludere tutti gli asset:
<PackageReference Include="Newtonsoft.Json" Version="9.0.1">
<ExcludeAssets>All</ExcludeAssets>
</PackageReference>
Aggiungere quindi il riferimento personalizzato alla copia locale appropriata della DLL:
<Reference Include="Newtonsoft.Json.dll" />