Avvio rapido: Creare e pubblicare un pacchetto con Visual Studio (.NET Framework, Windows)Quickstart: Create and publish a package using Visual Studio (.NET Framework, Windows)

La creazione di un pacchetto NuGet da una libreria di classi .NET Framework prevede la creazione della DLL in Visual Studio in Windows, quindi l'uso dello strumento da riga di comando nuget.exe per creare e pubblicare il pacchetto.Creating a NuGet package from a .NET Framework Class Library involves creating the DLL in Visual Studio on Windows, then using the nuget.exe command line tool to create and publish the package.

Nota

Questa Guida introduttiva si applica solo a Visual Studio 2017 e versioni successive per Windows.This Quickstart applies to Visual Studio 2017 and higher versions for Windows only. Visual Studio per Mac non include le funzionalità descritte di seguito.Visual Studio for Mac does not include the capabilities described here. Usare invece gli strumenti dell'interfaccia della riga di comando dotnet.Use the dotnet CLI tools instead.

PrerequisitiPrerequisites

  1. Installare qualsiasi edizione di Visual Studio 2017 o versione successiva da visualstudio.com con qualsiasi carico di lavoro correlato a .NET.Install any edition of Visual Studio 2017 or higher from visualstudio.com with any .NET-related workload. Visual Studio 2017 include automaticamente le funzionalità di NuGet quando viene installato un carico di lavoro .NET.Visual Studio 2017 automatically includes NuGet capabilities when a .NET workload is installed.

  2. Installare l'interfaccia della riga di comando nuget.exe scaricandola da nuget.org, salvare il file .exe in una cartella appropriata e aggiungere tale cartella alla variabile di ambiente PATH.Install the nuget.exe CLI by downloading it from nuget.org, saving that .exe file to a suitable folder, and adding that folder to your PATH environment variable.

  3. Registrarsi per ottenere un account gratuito in nuget.org se non è già disponibile.Register for a free account on nuget.org if you don't have one already. Quando si crea un nuovo account, viene inviato un messaggio di posta elettronica di conferma.Creating a new account sends a confirmation email. È necessario confermare l'account prima di poter caricare un pacchetto.You must confirm the account before you can upload a package.

Creare un progetto di libreria di classiCreate a class library project

È possibile usare un progetto libreria di classi .NET Framework esistente per il codice che si vuole includere in un pacchetto oppure creare un progetto semplice come segue:You can use an existing .NET Framework Class Library project for the code you want to package, or create a simple one as follows:

  1. In Visual Studio scegliere File > Nuovo > Progetto, selezionare il nodo Visual C# , selezionare il modello "Libreria di classi (.NET Framework)", assegnare al progetto il nome AppLogger e fare clic su OK.In Visual Studio, choose File > New > Project, select the Visual C# node, select the "Class Library (.NET Framework)" template, name the project AppLogger, and click OK.

  2. Fare clic con il pulsante destro del mouse sul file di progetto risultante e scegliere Compila per verificare che il progetto sia stato creato correttamente.Right-click on the resulting project file and select Build to make sure the project was created properly. La DLL è presente nella cartella Debug (o Release se si crea invece tale configurazione).The DLL is found within the Debug folder (or Release if you build that configuration instead).

In un vero pacchetto NuGet si implementano ovviamente molte funzionalità utili, che altri possono sfruttare per compilare nuove applicazioni.Within a real NuGet package, of course, you implement many useful features with which others can build applications. È anche possibile impostare i framework di destinazione desiderati.You can also set the target frameworks however you like. Ad esempio, vedere le guide per UWP e Xamarin.For example, see the guides for UWP and Xamarin.

In questa procedura dettagliata tuttavia non si scriverà codice aggiuntivo perché una libreria di classi dal modello è sufficiente per creare un pacchetto.For this walkthrough, however, you won't write any additional code because a class library from the template is sufficient to create a package. Tuttavia, se si desidera del codice funzionale per il pacchetto, usare le opzioni riportate di seguito:Still, if you'd like some functional code for the package, use the following:

using System;

namespace AppLogger
{
    public class Logger
    {
        public void Log(string text)
        {
            Console.WriteLine(text);
        }
    }
}

Suggerimento

A meno che non esista un motivo valido per decidere diversamente, .NET Standard è la destinazione preferita per i pacchetti NuGet, perché garantisce la compatibilità con la gamma più ampia di progetti consumer.Unless you have a reason to choose otherwise, .NET Standard is the preferred target for NuGet packages, as it provides compatibility with the widest range of consuming projects. Vedere Creare e pubblicare un pacchetto con Visual Studio (.NET Standard).See Create and publish a package using Visual Studio (.NET Standard).

Configurare le proprietà del progetto per il pacchettoConfigure project properties for the package

Un pacchetto NuGet contiene un manifesto (file .nuspec), che contiene i metadati pertinenti, ad esempio l'identificatore del pacchetto, il numero di versione, la descrizione e altro ancora.A NuGet package contains a manifest (a .nuspec file), that contains relevant metadata such as the package identifier, version number, description, and more. Alcuni di questi metadati possono essere recuperati direttamente dalle proprietà del progetto, evitando così di doverli aggiornare separatamente sia nel progetto che nel manifesto.Some of these can be drawn from the project properties directly, which avoids having to separately update them in both the project and the manifest. Questa sezione descrive come impostare le proprietà pertinenti.This section describes where to set the applicable properties.

  1. Selezionare il comando di menu Progetto > Proprietà e quindi selezionare la scheda Applicazione.Select the Project > Properties menu command, then select the Application tab.

  2. Nel campo Nome assembly assegnare un identificatore univoco al pacchetto.In the Assembly name field, give your package a unique identifier.

    Importante

    È necessario assegnare al pacchetto un identificatore univoco in nuget.org o per qualsiasi host in uso.You must give the package an identifier that's unique across nuget.org or whatever host you're using. Per questa procedura dettagliata, si consiglia di includere "Sample" o "Test" nel nome, perché il passaggio di pubblicazione descritto più avanti rende il pacchetto visibile pubblicamente (nonostante sia improbabile che chiunque lo usi effettivamente).For this walkthrough we recommend including "Sample" or "Test" in the name as the later publishing step does make the package publicly visible (though it's unlikely anyone will actually use it).

    Se si tenta di pubblicare un pacchetto con un nome già esistente, viene visualizzato un errore.If you attempt to publish a package with a name that already exists, you see an error.

  3. Selezionare il pulsante Informazioni assembly che visualizza una finestra di dialogo in cui è possibile immettere altre proprietà che provengono dal manifesto (vedere Informazioni di riferimento sul file .nuspec - Token di sostituzione).Select the Assembly Information... button, which brings up a dialog box in which you can enter other properties that carry into the manifest (see .nuspec file reference - replacement tokens). I campi più comunemente usati sono Titolo, Descrizione, Azienda, Copyright e Versione assembly.The most commonly used fields are Title, Description, Company, Copyright, and Assembly version. Queste proprietà vengono infine visualizzate con il pacchetto in un host come nuget.org, pertanto assicurarsi che siano sufficientemente descrittive.These properties ultimately appear with your package on a host like nuget.org, so make sure they're fully descriptive.

    Informazioni sull'assembly in un progetto .NET Framework in Visual Studio

  4. Facoltativo: per visualizzare e modificare direttamente le proprietà, aprire il file Properties/AssemblyInfo.cs nel progetto.Optional: to see and edit the properties directly, open the Properties/AssemblyInfo.cs file in the project.

  5. Quando vengono impostate le proprietà, impostare la configurazione del progetto su Versione e ricompilare il progetto per generare le DLL aggiornate.When the properties are set, set the project configuration to Release and rebuild the project to generate the updated DLL.

Generare il manifesto inizialeGenerate the initial manifest

Ora che è disponibile una DLL e le proprietà del progetto sono impostate, è possibile usare il comando nuget spec per generare un file iniziale .nuspec dal progetto.With a DLL in hand and project properties set, you now use the nuget spec command to generate an initial .nuspec file from the project. Questo passaggio include i token di sostituzione rilevanti per recuperare le informazioni dal file di progetto.This step includes the relevant replacement tokens to draw information from the project file.

Eseguire nuget spec una sola volta per generare il manifesto iniziale.You run nuget spec only once to generate the initial manifest. Quando si aggiorna il pacchetto, è possibile cambiare i valori nel progetto o modificare direttamente il manifesto.When updating the package, you either change values in your project or edit the manifest directly.

  1. Aprire un prompt dei comandi e passare alla cartella del progetto contenente il file AppLogger.csproj.Open a command prompt and navigate to the project folder containing AppLogger.csproj file.

  2. Eseguire il comando seguente: nuget spec AppLogger.csproj.Run the following command: nuget spec AppLogger.csproj. Specificando un progetto, NuGet crea un manifesto che corrisponde al nome del progetto, in questo caso AppLogger.nuspec.By specifying a project, NuGet creates a manifest that matches the name of the project, in this case AppLogger.nuspec. Vengono anche inclusi i token di sostituzione nel manifesto.It also include replacement tokens in the manifest.

  3. Aprire AppLogger.nuspec in un editor di testo per esaminarne il contenuto, che dovrebbe essere simile al seguente:Open AppLogger.nuspec in a text editor to examine its contents, which should appear as follows:

    <?xml version="1.0"?>
    <package >
      <metadata>
        <id>$id$</id>
        <version>$version$</version>
        <title>$title$</title>
        <authors>$author$</authors>
        <owners>$author$</owners>
        <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl>
        <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
        <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>$description$</description>
        <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
        <copyright>Copyright 2018</copyright>
        <tags>Tag1 Tag2</tags>
      </metadata>
    </package>
    

Modificare il manifestoEdit the manifest

  1. NuGet genera un errore se si prova a creare un pacchetto con i valori predefiniti nel file .nuspec, quindi è necessario modificare i campi seguenti prima di procedere.NuGet produces an error if you try to create a package with default values in your .nuspec file, so you must edit the following fields before proceeding. Per la descrizione dell'uso di questi campi, vedere Informazioni di riferimento sul file .nuspec - Elementi dei metadati facoltativi.See .nuspec file reference - optional metadata elements for a description of how these are used.

    • licenseUrllicenseUrl
    • projectUrlprojectUrl
    • iconUrliconUrl
    • releaseNotesreleaseNotes
    • tagstags
  2. Per i pacchetti compilati per uso pubblico, prestare particolare attenzione alla proprietà Tags, perché i tag consentono ad altri utenti di trovare il pacchetto in origini come nuget.org e di comprenderne le funzioni.For packages built for public consumption, pay special attention to the Tags property, as tags help others find your package on sources like nuget.org and understand what it does.

  3. È anche possibile aggiungere altri elementi al manifesto in questo momento, come descritto in Informazioni di riferimento sul file .nuspec.You can also add any other elements to the manifest at this time, as described on .nuspec file reference.

  4. Salvare il file prima di procedere.Save the file before proceeding.

Eseguire il comando packRun the pack command

  1. Da un prompt dei comandi nella cartella contenente il file .nuspec, eseguire il comando nuget pack.From a command prompt in the folder containing your .nuspec file, run the command nuget pack.

  2. NuGet genera un file .nupkg nel formato identificatore-versione.nupkg nella cartella corrente.NuGet generates a .nupkg file in the form of identifier-version.nupkg, which you'll find in the current folder.

Pubblicare il pacchettoPublish the package

Dopo aver creato un file .nupkg, pubblicarlo in nuget.org usando nuget.exe insieme a una chiave API acquisita da nuget.org. Per nuget.org è necessario usare nuget.exe 4.1.0 o versione successiva.Once you have a .nupkg file, you publish it to nuget.org using nuget.exe with an API key acquired from nuget.org. For nuget.org you must use nuget.exe 4.1.0 or higher.

Nota

Ricerca dei virus: tutti i pacchetti caricati in nuget.org vengono analizzati alla ricerca di virus e rifiutati se vengono trovati virus.Virus scanning: All packages uploaded to nuget.org are scanned for viruses and rejected if any viruses are found. Tutti i pacchetti elencati in nuget.org vengono anche analizzati periodicamente.All packages listed on nuget.org are also scanned periodically.

I pacchetti pubblicati in nuget.org sono anche pubblicamente visibili per gli altri sviluppatori, a meno che non vengano rimossi.Packages published to nuget.org are also publicly visible to other developers unless you unlist them. Per ospitare i pacchetti privatamente, vedere Hosting dei pacchetti.To host packages privately, see Hosting packages.

Acquisire la chiave APIAcquire your API key

  1. Accedere all'account personale di nuget.org o creare un account, se non è già disponibile.Sign into your nuget.org account or create an account if you don't have one already.

    Per altre informazioni sulla creazione dell'account, vedere Account singoli.For more information on creating your account, see Individual accounts.

  2. Selezionare il nome utente (in alto a destra) e quindi selezionare API Keys (Chiavi API).Select your user name (on the upper right), then select API Keys.

  3. Selezionare Create (Crea), specificare un nome per la chiave, selezionare Select Scopes > Push (Seleziona ambiti > Push).Select Create, provide a name for your key, select Select Scopes > Push. Immettere * per Glob pattern (Criterio GLOB) e quindi selezionare Create (Crea).Enter * for Glob pattern, then select Create. (Vedere di seguito per altre informazioni sugli ambiti.)(See below for more about scopes.)

  4. Dopo avere creato la chiave, selezionare Copia per recuperare la chiave di accesso necessaria nell'interfaccia della riga di comando:Once the key is created, select Copy to retrieve the access key you need in the CLI:

    Copia della chiave API negli Appunti

  5. Importante: salvare la chiave in un luogo sicuro, perché non è possibile copiarla nuovamente in seguito.Important: Save your key in a secure location because you cannot copy the key again later on. Se si torna alla pagina della chiave API, è necessario rigenerarla per copiarla.If you return to the API key page, you need to regenerate the key to copy it. È anche possibile rimuovere la chiave API se non si vuole più eseguire il push tramite l'interfaccia della riga di comando.You can also remove the API key if you no longer want to push packages via the CLI.

L'assegnazione degli ambiti consente di creare chiavi API separate per scopi diversi.Scoping allows you to create separate API keys for different purposes. Per ogni chiave esiste un intervallo di tempo di scadenza ed è possibile specificare un ambito limitato a pacchetti (o criteri GLOB) specifici.Each key has its expiration timeframe and can be scoped to specific packages (or glob patterns). L'ambito per ogni chiave può essere anche limitato a operazioni specifiche: push di nuovi pacchetti e aggiornamenti, push solo degli aggiornamenti o rimozione dall'elenco.Each key is also scoped to specific operations: push of new packages and updates, push of updates only, or delisting. Tramite l'assegnazione di un ambito, è possibile creare chiavi API per i diversi utenti che gestiscono i pacchetti per l'organizzazione in modo che abbiamo solo le autorizzazioni necessarie.Through scoping, you can create API keys for different people who manage packages for your organization such that they have only the permissions they need. Per altre informazioni, vedere Chiavi API con ambito.For more information, see scoped API keys.

Pubblicare con nuget pushPublish with nuget push

  1. Aprire una riga di comando e passare alla cartella che contiene il file .nupkg.Open a command line and change to the folder containing the .nupkg file.

  2. Eseguire il comando seguente, specificando il nome del pacchetto e sostituendo il valore di chiave con la chiave API:Run the following command, specifying your package name and replacing the key value with your API key:

    nuget push AppLogger.1.0.0.nupkg qz2jga8pl3dvn2akksyquwcs9ygggg4exypy3bhxy6w6x6 -Source https://api.nuget.org/v3/index.json
    
  3. nuget.exe visualizza i risultati del processo di pubblicazione:nuget.exe displays the results of the publishing process:

    Pushing AppLogger.1.0.0.nupkg to 'https://www.nuget.org/api/v2/package'...
        PUT https://www.nuget.org/api/v2/package/
        Created https://www.nuget.org/api/v2/package/ 6829ms
    Your package was pushed.
    

Vedere nuget push.See nuget push.

Errori di pubblicazionePublish errors

Gli errori dal comando push indicano in genere il problema.Errors from the push command typically indicate the problem. Ad esempio, è possibile avere dimenticato di aggiornare il numero di versione nel progetto e quindi tentare di pubblicare un pacchetto già esistente.For example, you may have forgotten to update the version number in your project and are therefore trying to publish a package that already exists.

È anche possibile che vengano visualizzati errori quando si tenta di pubblicare un pacchetto usando un identificatore già esistente nell'host.You also see errors when trying to publish a package using an identifier that already exists on the host. Il nome "AppLogger", ad esempio, esiste già.The name "AppLogger", for example, already exists. In tal caso, il comando push genera l'errore seguente:In such a case, the push command gives the following error:

Response status code does not indicate success: 403 (The specified API key is invalid,
has expired, or does not have permission to access the specified package.).

Se si usa una chiave API valida appena creata, questo messaggio indica un conflitto di denominazione, condizione non completamente chiara nella parte dell'errore relativa alle autorizzazioni.If you're using a valid API key that you just created, then this message indicates a naming conflict, which isn't entirely clear from the "permission" part of the error. Modificare l'identificatore del pacchetto, ricompilare il progetto, ricreare il file .nupkg e quindi ripetere il comando push.Change the package identifier, rebuild the project, recreate the .nupkg file, and retry the push command.

Gestire il pacchetto pubblicatoManage the published package

Dal profilo personale in nuget.org selezionare Manage Packages (Gestisci pacchetti) per visualizzare quello appena pubblicato.From your profile on nuget.org, select Manage Packages to see the one you just published. Viene anche inviato un messaggio di posta elettronica di conferma.You also receive a confirmation email. Si noti che l'indicizzazione e la visualizzazione del pacchetto nei risultati della ricerca, dove gli altri utenti possono trovarlo, potrebbero richiedere qualche minuto.Note that it might take a while for your package to be indexed and appear in search results where others can find it. In questo intervallo di tempo la pagina del pacchetto visualizza un messaggio simile al seguente:During that time your package page shows the message below:

Il pacchetto non è stato ancora indicizzato.

L'operazione è ora completata.And that's it! È stato pubblicato in nuget.org il primo pacchetto NuGet, che gli altri sviluppatori possono usare nei propri progetti.You've just published your first NuGet package to nuget.org that other developers can use in their own projects.

Se in questa procedura dettagliata è stato creato un pacchetto che non è effettivamente utile (ad esempio un pacchetto creato con una libreria di classi vuota), è necessario rimuovere il pacchetto per nasconderlo dai risultati della ricerca:If in this walkthrough you created a package that isn't actually useful (such as a package created with an empty class library), you should unlist the package to hide it from search results:

  1. In nuget.org selezionare il nome utente (in alto a destra della pagina) e quindi selezionare Manage Packages (Gestisci pacchetti).On nuget.org, select your user name (upper right of the page), then select Manage Packages.

  2. Individuare il pacchetto che si vuole rimuovere in Published (Pubblicato) e selezionare l'icona del Cestino a destra:Locate the package you want to unlist under Published and select the trash can icon on the right:

    Icona del Cestino visualizzata per un pacchetto pubblicato in nuget.org

  3. Nella pagina successiva deselezionare la casella di controllo List (package-name) in search results (Includi nome-pacchetto nei risultati della ricerca) e selezionare Save (Salva):On the subsequent page, clear the box labeled List (package-name) in search results and select Save:

    Deselezione della casella di controllo per la pubblicazione di un pacchetto in nuget.org

Passaggi successiviNext steps

È stato creato il primo pacchetto NuGet.Congratulations on creating your first NuGet package!

Per esplorare in modo più approfondito ciò che NuGet può offrire, selezionare i collegamenti seguenti.To explore more that NuGet has to offer, select the links below.