Esercitazione: Configurare una cache binaria vcpkg usando un feed NuGet

Nota

Questa esercitazione usa un feed NuGet ospitato in Azure Artifacts, ma le stesse istruzioni possono essere usate per altri provider di feed NuGet, ad esempio GitHub Packages, con alcune modifiche.

vcpkg supporta l'uso di feed di pacchetti NuGet per caricare e ripristinare i pacchetti binari in modo pratico.

I feed di pacchetti NuGet hanno funzionalità di controllo di accesso che li rendono ideali per limitare l'accesso alle risorse nell'organizzazione o nel gruppo di lavoro. I feed NuGet sono supportati da diversi provider di archiviazione cloud, ad esempio Azure Artifacts e registro pacchetti GitHub.

Questa esercitazione illustra come:

Prerequisiti

  • Un terminale
  • vcpkg
  • Feed di pacchetti NuGet o, in caso contrario, un account Azure DevOps da seguire
  • Un terminale
  • vcpkg
  • Feed di pacchetti NuGet o, in caso contrario, un account Azure DevOps da seguire
  • Pacchetto mono installato nel sistema

1 - Configurare un feed NuGet

Ignorare questo passaggio se si dispone già di un feed di pacchetti NuGet esistente.

Seguire le istruzioni per configurare un feed NuGet di Azure Artifacts.

È anche possibile usare qualsiasi altro provider di feed di pacchetti NuGet di propria scelta.

2 - Aggiungere un'origine NuGet

Nota

In Linux è necessario mono eseguire nuget.exe. È possibile eseguire l'installazione mono usando la gestione pacchetti di sistema della distribuzione.

vcpkg acquisisce la propria copia del nuget.exe file eseguibile usato durante le operazioni di memorizzazione nella cache binaria. Questa esercitazione usa l'oggetto acquisito nuget.exeda vcpkg. Il vcpkg fetch nuget comando restituisce il percorso del vcpkg-acquired nuget.exe, scaricando il file eseguibile, se necessario.

Eseguire il comando seguente per aggiungere il feed NuGet come origine, sostituire <feed name> con qualsiasi nome scelto e <feed url> con l'URL del feed NuGet.

.$(vcpkg fetch nuget) sources add -Name <feed name> -Source <feed url>

Eseguire il comando seguente per recuperare il percorso dell'eseguibile NuGet:

vcpkg fetch nuget

Verrà fornito un output simile a C:\path\to\nuget.exe. Prendere nota di questo percorso. Usando il percorso ottenuto dal passaggio precedente, eseguire il comando seguente:

C:\path\to\nuget.exe sources add -Name <feed name> -Source <feed url>
mono `vcpkg fetch nuget | tail -n 1` sources add -Name <feed name> -Source <feed url>

Specificare una chiave API

Alcuni provider richiedono il push dei pacchetti NuGet nel feed usando una chiave API. Ad esempio, GitHub Packages richiede un token di accesso personale di GitHub come chiave API; se si usa Azure Artifacts, la chiave API è AzureDevOps invece.

Usare il comando seguente per impostare la chiave API per tutti i pacchetti di cui è stato eseguito il push nel feed NuGet, sostituire <apiKey> con la chiave API del feed.

.$(vcpkg fetch nuget) setapikey <apikey> -Source <feed url>

Eseguire il comando seguente per recuperare il percorso dell'eseguibile NuGet:

vcpkg fetch nuget

Verrà fornito un output simile a C:\path\to\nuget.exe. Prendere nota di questo percorso. Usando il percorso ottenuto dal passaggio precedente, eseguire il comando seguente:

C:\path\to\nuget.exe setapikey <apikey> -Source <feed url>
mono `vcpkg fetch nuget | tail -n 1` sources setapikey <apiKey> -Source <feed url>

Specificare le credenziali di autenticazione

Il feed NuGet potrebbe richiedere l'autenticazione per consentire di scaricare e caricare pacchetti. In questo caso è possibile fornire le credenziali aggiungendole come parametri al nuget sources add comando.

Ad esempio:

nuget sources add -Name my-packages -Source https://my.nuget.feed/vcpkg-cache/index.json -UserName myusername -Password mypassword -StorePasswordInClearText

Per altre informazioni, alcuni provider come Azure Artifacts possono richiedere metodi di autenticazione diversi, vedere l'articolo Eseguire l'autenticazione nei feed NuGet privati.

Usare un nuget.config file

In alternativa, è possibile usare un nuget.config file per configurare le origini NuGet, seguendo il modello seguente:

nuget.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="defaultPushSource" value="<feed url>" />
  </config>
  <apiKeys>
    <add key="<feed url>" value="<apikey>" />
  </apiKeys>
  <packageSources>
    <clear />
    <add  key="<feed name>" value="<feed url>" />
  </packageSources>
  <packageSourcesCredentials>
    <<feed name>>
      <add key="Username" value="<username>" />
      <add key="Password" value="<password>" />
    </<feed name>>
  </packageSourcesCredentials>
</configuration>

File nuget.config di esempio:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="defaultPushSource" value="https://contoso.org/packages/" />
  </config>
  <apikeys>
    <add key="https://contoso.org/packages/" value="encrypted_api_key" />
  </apikeys>
  <packageSources>
    <clear />
    <add key="Contoso" value="https://contoso.org/packages/" />
  </packageSources>
  <packageSourcesCredentials>
    <Contoso>
      <add key="Username" value="user" />
      <add key="Password" value="..." />
    </Contoso>
  </packageSourcesCredentials>
</configuration>

vcpkg richiede di impostare un nel defaultPushSource nuget.config file, usare l'URL del feed NuGet come origine predefinita per eseguire il push dei pacchetti binari.

Se si caricano i pacchetti in un feed NuGet di Azure Artifacts, usare AzureDevOps come chiave API dell'origine eseguendo nuget setApiKey AzureDevOps -Source <feed url> -ConfigFile <path to nuget.config>. In caso contrario, sostituire il valore con la chiave API appropriata del feed, se disponibile.

Aggiungere l'origine <clear /> per ignorare altri valori configurati in precedenza. Se si vuole, è possibile definire più origini in questo file, usare una <add key="<feed name>" value="<feed url>" /> voce per ogni origine.

Eseguire il comando seguente per aggiungere un'origine NuGet usando un nuget.config file, sostituire <path to nuget.config> con il percorso del nuget.config file:

.$(vcpkg fetch nuget) sources add -ConfigFile <path to nuget.config>

Eseguire il comando seguente per recuperare il percorso dell'eseguibile NuGet:

vcpkg fetch nuget

Verrà fornito un output simile a C:\path\to\nuget.exe. Prendere nota di questo percorso. Usando il percorso ottenuto dal passaggio precedente, eseguire il comando seguente:

C:\path\to\nuget.exe sources add -ConfigFile <path to nuget.config>
mono `vcpkg fetch nuget | tail -n 1` sources add -ConfigFile <path to nuget.config>

3 - Configurare vcpkg per l'uso del feed NuGet

Impostare la VCPKG_BINARY_SOURCES variabile di ambiente come segue:

$env:VCPKG_BINARY_SOURCES="clear;nuget,<feed url>,readwrite"

Se si usa un nuget.config file, eseguire invece le operazioni seguenti:

$env:VCPKG_BINARY_SOURCES="clear;nugetconfig,<path to nuget.config>"
set "VCPKG_BINARY_SOURCES=clear;nuget,<feed url>,readwrite"

Se si usa un nuget.config file, eseguire invece le operazioni seguenti:

set "VCPKG_BINARY_SOURCES=clear;nugetconfig,<path to nuget.config>"

Nota

L'impostazione VCPKG_BINARY_SOURCES tramite il export comando influirà solo sulla sessione della shell corrente. Per rendere permanente questa modifica tra le sessioni, è necessario aggiungere il export comando allo script del profilo della shell (ad esempio, ~/.bashrc o ~/.zshrc).

export VCPKG_BINARY_SOURCES="clear;nuget,<feed url>,readwrite"

Se si usa un nuget.config file, eseguire invece le operazioni seguenti:

export VCPKG_BINARY_SOURCES="clear;nugetconfig,<path to nuget.config>"

L'attività è terminata. vcpkg caricherà o ripristinerà i pacchetti dal feed NuGet.

Passaggi successivi

Ecco altre attività da provare: