Pubblicazione di pacchettiPublishing packages

Dopo avere creato un pacchetto e con il file .nupkg a portata di mano, il processo per renderlo disponibile per altri sviluppatori, pubblicamente o privatamente, è davvero semplice:Once you have created a package and have your .nupkg file in hand, it's a simple process to make it available to other developers, either publicly or privately:

  • I pacchetti pubblici diventano disponibili per tutti gli sviluppatori a livello globale tramite nuget.org, come descritto in questo articolo (è richiesto NuGet 4.1.0+).Public packages are made available to all developers globally through nuget.org as described in this article (requires NuGet 4.1.0+).
  • I pacchetti privati, disponibili solo per un team o un'organizzazione, sono ospitati in una condivisione file, in un server NuGet privato, in Azure Artifacts o in un repository di terze parti, ad esempio myget, ProGet, Nexus Repository e Artifactory.Private packages are available to only a team or organization, by hosting them either a file share, a private NuGet server, Azure Artifacts, or a third-party repository such as myget, ProGet, Nexus Repository, and Artifactory. Per altre informazioni, vedere Panoramica dell'hosting dei pacchetti.For additional details, see Hosting Packages Overview.

Questo articolo illustra la pubblicazione in nuget.org. Per la pubblicazione in Azure Artifacts vedere Gestione pacchetti.This article covers publishing to nuget.org; for publishing to Azure Artifacts, see Package Management.

Pubblicare in nuget.orgPublish to nuget.org

Per nuget.org è necessario accedere con un account Microsoft, con il quale verrà richiesto di registrare l'account in nuget.org. È anche possibile accedere con un account di nuget.org creato con le versioni precedenti del portale.For nuget.org, you must sign in with a Microsoft account, with which you'll be asked to register the account with nuget.org. You can also sign in with a nuget.org account created using older versions of the portal.

Posizione di accesso a NuGet

Sarà quindi possibile caricare il pacchetto tramite il portale Web di nuget.org, eseguire il push in nuget.org dalla riga di comando (è richiesto nuget.exe 4.1.0+) o effettuare la pubblicazione durante un processo di integrazione continua/recapito continuo tramite Azure DevOps Services, come descritto nelle sezioni seguenti.Next, you can either upload the package through the nuget.org web portal, push to nuget.org from the command line (requires nuget.exe 4.1.0+) , or publish as part of a CI/CD process through Azure DevOps Services, as described in the following sections.

Portale Web: usare la scheda Upload Package (Carica pacchetto) in nuget.orgWeb portal: use the Upload Package tab on nuget.org

  1. Selezionare Upload (Carica) nel menu in alto di nuget.org e passare alla posizione del pacchetto.Select Upload on the top menu of nuget.org and browse to the package location.

    Caricare un pacchetto in nuget.org

  2. Nuget.org indica se il nome del pacchetto è disponibile.nuget.org tells you if the package name is available. Se non lo è, modificare l'identificatore del pacchetto nel progetto, ricompilare e riprovare a eseguire il caricamento.If it isn't, change the package identifier in your project, rebuild, and try the upload again.

  3. Se il nome del pacchetto è disponibile, nuget.org apre una sezione Verify (Verifica) in cui è possibile esaminare i metadati del manifesto del pacchetto.If the package name is available, nuget.org opens a Verify section in which you can review the metadata from the package manifest. Per modificare i metadati, modificare il progetto (file di progetto o file .nuspec), ricompilare, ricreare il pacchetto e caricarlo nuovamente.To change any of the metadata, edit your project (project file or .nuspec file), rebuild, recreate the package, and upload again.

  4. In Import Documentation (Importa documentazione) è possibile incollare Markdown, selezionare documenti con un URL oppure caricare un file di documentazione.Under Import Documentation you can paste Markdown, point to your docs with a URL, or upload a documentation file.

  5. Quando tutte le informazioni sono pronte, selezionare il pulsante Submit (Invia).When all the information is ready, select the Submit button

Riga di comandoCommand line

Per eseguire il push dei pacchetti in nuget.org, è necessario usare nuget.exe v4.1.0 o versione successiva, che implementa i protocolli NuGet necessari.To push packages to nuget.org you must use nuget.exe v4.1.0 or above, which implements the required NuGet protocols. È anche necessaria una chiave API, che viene creata in nuget.org.You also need an API key, which is created on nuget.org.

Creare chiavi APICreate API keys

  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 dotnet nuget pushPublish with dotnet nuget push

  1. Passare alla cartella contenente il file .nupkg.Change to the folder containing the .nupkg file.

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

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

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

Vedere dotnet nuget push.See dotnet nuget push.

Pubblicare con nuget pushPublish with nuget push

  1. Al prompt dei comandi, eseguire il comando seguente, sostituendo <your_API_key> con la chiave ottenuta da nuget.org:At a command prompt, run the following command, replacing <your_API_key> with the key obtained from nuget.org:

    nuget setApiKey <your_API_key>
    

    Questo comando archivia la chiave API nella configurazione NuGet in modo che non sia necessario ripetere questo passaggio nuovamente nello stesso computer.This command stores your API key in your NuGet configuration so that you need repeat this step again on the same computer.

  2. Eseguire il push del pacchetto nella raccolta NuGet usando il comando seguente:Push your package to NuGet Gallery using the following command:

    nuget push YourPackage.nupkg -Source https://api.nuget.org/v3/index.json
    

Pubblicare i pacchetti firmatiPublish signed packages

Per inviare pacchetti firmati, è prima di tutto necessario registrare il certificato usato per firmare i pacchetti.To submit signed packages, you must first register the certificate used for signing the packages.

Avviso

nuget.org rifiuta i pacchetti che non soddisfano i requisiti per i pacchetti firmati.nuget.org rejects packages that don't satisfy the signed package requirements.

Convalida e indicizzazione dei pacchettiPackage validation and indexing

I pacchetti di cui viene eseguito il push in nuget.org vengono sottoposti a diverse convalide, ad esempio il controllo antivirus.Packages pushed to nuget.org undergo several validations, such as virus checks. (Tutti i pacchetti in nuget.org vengono analizzati periodicamente.)(All packages on nuget.org are periodically scanned.)

Quando il pacchetto ha superato tutti i controlli di convalida, l'indicizzazione e la visualizzazione del pacchetto nei risultati della ricerca potrebbero richiedere qualche minuto.When the package has passed all validation checks, it might take a while for it to be indexed and appear in search results. Al termine dell'indicizzazione, viene visualizzato un messaggio di posta elettronica che conferma che il pacchetto è stato pubblicato.Once indexing is complete, you receive an email confirming that the package was successfully published. Se il pacchetto non supera un controllo di convalida, la pagina dei dettagli del pacchetto verrà aggiornata con l'errore associato e si riceverà anche una notifica tramite posta elettronica.If the package fails a validation check, the package details page will update to display the associated error and you also receive an email notifying you about it.

La convalida e l'indicizzazione del pacchetto richiedono in genere meno di 15 minuti.Package validation and indexing usually takes under 15 minutes. Se la pubblicazione del pacchetto richiede più tempo del previsto, visitare status.nuget.org per controllare se si stanno verificando interruzioni in nuget.org.If the package publishing is taking longer than expected, visit status.nuget.org to check if nuget.org is experiencing any interruptions. Se tutti i sistemi sono operativi e il pacchetto non viene pubblicato entro un'ora, accedere a nuget.org e usare il collegamento per contattare il supporto tecnico nella pagina del pacchetto.If all systems are operational and the package hasn't been successfully published within an hour, please login to nuget.org and contact us using the Contact Support link on the package page.

Per visualizzare lo stato di un pacchetto, selezionare Manage packages (Gestisci pacchetti) sotto il nome di account in nuget.org. Al termine della convalida si riceverà un messaggio di posta elettronica di conferma.To see the status of a package, select Manage packages under your account name on nuget.org. You receive a confirmation email when validation is complete.

Si noti che l'indicizzazione e la visualizzazione del pacchetto nei risultati della ricerca, dove altri possono trovarlo, potrebbero richiedere tempo. Nella pagina del pacchetto viene nel frattempo visualizzato il messaggio seguente:Note that it might take a while for your package to be indexed and appear in search results where others can find it, during which time you see the following message on your package page:

Messaggio indicante che un pacchetto non è ancora stato pubblicato

Azure DevOps Services (CI/CD)Azure DevOps Services (CI/CD)

Se si esegue il push dei pacchetti in nuget.org usando Azure DevOps Services durante il processo di integrazione continua/recapito continuo, è necessario usare nuget.exe 4.1 o versione successiva nelle attività NuGet.If you push packages to nuget.org using Azure DevOps Services as part of your Continuous Integration/Deployment process, you must use nuget.exe 4.1 or above in the NuGet tasks. Per informazioni, vedere Using the latest NuGet in your build (Uso della versione più recente di NuGet nella compilazione) nel blog di Microsoft DevOps.Details can be found on Using the latest NuGet in your build (Microsoft DevOps blog).

Gestione dei proprietari dei pacchetti in nuget.orgManaging package owners on nuget.org

Anche se ogni file .nuspec del pacchetto NuGet definisce gli autori del pacchetto, la raccolta nuget.org non usa tali metadati per definire la proprietà.Although each NuGet package's .nuspec file defines the package's authors, the nuget.org gallery does not use that metadata to define ownership. Nuget.org assegna invece la proprietà iniziale alla persona che pubblica il pacchetto,Instead, nuget.org assigns initial ownership to the person who publishes the package. ovvero l'utente connesso che ha caricato il pacchetto tramite l'interfaccia utente di nuget.org o gli utenti la cui chiave API è stata usata con nuget SetApiKey o nuget push.This is either the logged-in user who uploaded the package through the nuget.org UI, or the users whose API key was used with nuget SetApiKey or nuget push.

Tutti i proprietari del pacchetto hanno autorizzazioni complete per il pacchetto, incluse l'aggiunta e la rimozione di altri proprietari e la pubblicazione di aggiornamenti.All package owners have full permissions for the package, including adding and removing other owners, and publishing updates.

Per modificare il proprietario di un pacchetto, seguire questa procedura:To change ownership of a package, do the following:

  1. Accedere a nuget.org con l'account che è il proprietario corrente del pacchetto.Sign in to nuget.org with the account that is the current owner of the package.
  2. Selezionare il nome dell'account, selezionare Manage packages (Gestisci pacchetti) ed espandere Published Packages (Pacchetti pubblicati).Select your account name, select Manage packages, and expand Published Packages.
  3. Selezionare il pacchetto che si vuole gestire e quindi sul lato destro selezionare Manage owners (Gestisci proprietari).Select on the package you want to manage, then on the right side select Manage owners.

A questo punto sono disponibili diverse alternative:From here you have several options:

  1. Rimuovere qualsiasi proprietario elencato in Current Owners (Proprietari correnti).Remove any owner listed under Current Owners.
  2. Aggiungere un proprietario in Add Owner (Aggiungi proprietario) immettendo il nome utente, un messaggio e selezionando Add (Aggiungi).Add an owner under Add Owner by entering their user name, a message, and selecting Add. Questa azione invia a tale nuovo comproprietario un messaggio di posta elettronica con un collegamento di conferma.This action sends an email to that new co-owner with a confirmation link. Dopo la conferma, tale persona ha le autorizzazioni complete per aggiungere e rimuovere i proprietari.Once confirmed, that person has full permissions to add and remove owners. Fino all'avvenuta conferma, la sezione Current Owners (Proprietari correnti) indica l'approvazione in sospeso per tale persona.(Until confirmed, the Current Owners section indicates pending approval for that person.)
  3. Per trasferire la proprietà (ad esempio quando la proprietà cambia o un pacchetto è stato pubblicato con l'account errato), aggiungere il nuovo proprietario che, dopo avere confermato la proprietà, potrà rimuovere l'utente dall'elenco.To transfer ownership (as when ownership changes or a package was published under the wrong account), add the new owner, and once they've confirmed ownership they can remove you from the list.

Per assegnare la proprietà a una società o a un gruppo, creare un account nuget.org usando un alias di posta elettronica che viene inoltrato ai membri del team appropriati.To assign ownership to a company or group, create a nuget.org account using an email alias that is forwarded to the appropriate team members. Diversi pacchetti Microsoft ASP.NET, ad esempio, sono in comproprietà con gli account microsoft e aspnet e tali alias risultano semplificati.For example, various Microsoft ASP.NET packages are co-owned by the microsoft and aspnet accounts, which simply such aliases.

Ripristino della proprietà di un pacchettoRecovering package ownership

Può capitare che un pacchetto non abbia un proprietario attivo.Occasionally, a package may not have an active owner. È ad esempio possibile che il proprietario originale abbia lasciato la società che produce il pacchetto, che le credenziali nuget.org vadano perse o che bug precedenti nella raccolta abbiano lasciato un pacchetto senza proprietario.For example, the original owner may have left the company that produces the package, nuget.org credentials are lost, or earlier bugs in the gallery left a package ownerless.

Se il proprietario legittimo di un pacchetto ha la necessità di ripristinare la proprietà, deve usare il modulo contatto su nuget.org per illustrare la situazione al team di NuGet.If you are the rightful owner of a package and need to regain ownership, use the contact form on nuget.org to explain your situation to the NuGet team. Viene quindi messo in atto un processo per verificare la proprietà del pacchetto, che include il tentativo di rintracciare il proprietario esistente tramite l'URL del progetto del pacchetto, Twitter, posta elettronica o altri mezzi.We then follow a process to verify your ownership of the package, including trying to locate the existing owner through the package's Project URL, Twitter, email, or other means. Se ogni tentativo ha esito negativo, è possibile inviare all'utente un nuovo invito a diventare proprietario.But if all else fails, we can send you a new invite to become an owner.