教程:使用 NuGet 源设置 vcpkg 二进制缓存
注意
本教程使用 Azure Artifacts 中托管的 NuGet 源,但只需一些更改,即可将相同的指令用于其他 NuGet 源提供程序,例如:GitHub 包。
vcpkg 支持使用 NuGet 包源以方便的方式上传和还原二进制包。
NuGet 包源具有访问控制功能,这使得它们非常适合限制对整个组织或工作组资源的访问。 NuGet 源受多个云存储提供程序(例如 Azure Artifacts 和 GitHub 包注册表)支持。
本教程介绍以下操作:
先决条件
- 终端
- vcpkg
- NuGet 包源,或者如果没有,则为要遵循的 Azure DevOps 帐户
- 终端
- vcpkg
- NuGet 包源,或者如果没有,则为要遵循的 Azure DevOps 帐户
- 系统中安装的
mono
包
1 - 设置 NuGet 源
如果已有现有的 NuGet 包源,则请跳过此步骤。
按照说明设置 Azure Artifacts NuGet 源。
还可以使用你选择的任何其他 NuGet 包源提供程序。
2 - 添加 NuGet 源
注意
在 Linux 上,你需要 mono
来执行 nuget.exe
。 可以使用分发的系统包管理器安装 mono
。
vcpkg 获取其在二进制缓存操作期间使用的其自己的 nuget.exe
可执行文件副本。 本教程使用 vcpkg 获取的 nuget.exe
。 vcpkg fetch nuget
命令输出 vcpkg 获取的 nuget.exe
的位置,在必要时下载可执行文件。
运行以下命令,将 NuGet 源添加为源,将 <feed name>
替换为所选的任何名称,并将 <feed url>
替换为至 NuGet 源的 URL。
.$(vcpkg fetch nuget) sources add -Name <feed name> -Source <feed url>
执行以下命令,以提取至 NuGet 可执行文件的路径:
vcpkg fetch nuget
这将提供类似于 C:\path\to\nuget.exe
的输出。 请记下此路径。
使用从上一步中获取的路径,运行以下命令:
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>
提供 API 密钥
某些提供程序要求你使用 API 密钥将 NuGet 包推送到源。 例如,GitHub 包需要 GitHub PAT(个人访问令牌)作为 API 密钥;如果使用的是 Azure Artifacts,API 密钥则改为 AzureDevOps
。
使用以下命令为推送到 NuGet 源的所有包设置 API 密钥,并将 <apiKey>
替换为源的 API 密钥。
.$(vcpkg fetch nuget) setapikey <apikey> -Source <feed url>
执行以下命令,以提取至 NuGet 可执行文件的路径:
vcpkg fetch nuget
这将提供类似于 C:\path\to\nuget.exe
的输出。 请记下此路径。
使用从上一步中获取的路径,运行以下命令:
C:\path\to\nuget.exe setapikey <apikey> -Source <feed url>
mono `vcpkg fetch nuget | tail -n 1` setapikey <apiKey> -Source <feed url>
提供身份验证凭据
NuGet 源可能需要身份验证才能让你下载和上传包。 如果是这样,你可以通过将凭证作为参数添加到 nuget sources add
命令来提供凭证。
例如:
nuget sources add -Name my-packages -Source https://my.nuget.feed/vcpkg-cache/index.json -UserName myusername -Password mypassword -StorePasswordInClearText
某些提供程序(如 Azure Artifacts)可能需要不同的身份验证方法,请阅读对专用 NuGet 源进行身份验证一文以了解详细信息。
使用 nuget.config
文件
或者,你可以使用 nuget.config
文件遵照以下模板来配置 NuGet 源:
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>
示例 nuget.config
文件:
<?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 要求你在 nuget.config
文件中设置一个 defaultPushSource
,使用 NuGet 源的 URL 作为默认源来推送二进制包。
如果要将包上传到 Azure Artifacts NuGet 源,请通过运行 nuget setApiKey AzureDevOps -Source <feed url> -ConfigFile <path to nuget.config>
将 AzureDevOps
作为源的 API 密钥。
否则,请将该值替换为源的正确 API 密钥(如果有)。
添加 <clear />
源以忽略以前配置的其他值。 如果需要,可以在此文件中定义多个源,针对每个源使用一个 <add key="<feed name>" value="<feed url>" />
条目。
运行以下命令,以使用 nuget.config
文件添加 NuGet 源,将 <path to nuget.config>
替换为至 nuget.config
文件的路径:
.$(vcpkg fetch nuget) sources add -ConfigFile <path to nuget.config>
执行以下命令,以提取至 NuGet 可执行文件的路径:
vcpkg fetch nuget
这将提供类似于 C:\path\to\nuget.exe
的输出。 请记下此路径。
使用从上一步中获取的路径,运行以下命令:
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 - 将 vcpkg 配置为使用 NuGet 源
将 VCPKG_BINARY_SOURCES
环境变量设置如下:
$env:VCPKG_BINARY_SOURCES="clear;nuget,<feed url>,readwrite"
如果使用 nuget.config
文件,则请改为执行以下操作:
$env:VCPKG_BINARY_SOURCES="clear;nugetconfig,<path to nuget.config>"
set "VCPKG_BINARY_SOURCES=clear;nuget,<feed url>,readwrite"
如果使用 nuget.config
文件,则请改为执行以下操作:
set "VCPKG_BINARY_SOURCES=clear;nugetconfig,<path to nuget.config>"
注意
使用 export
命令设置 VCPKG_BINARY_SOURCES
只会影响当前 shell 会话。 要使此更改在整个会话中永久存在,需要将 export
命令添加到 shell 的配置文件脚本(例如,~/.bashrc
或 ~/.zshrc
)。
export VCPKG_BINARY_SOURCES="clear;nuget,<feed url>,readwrite"
如果使用 nuget.config
文件,则请改为执行以下操作:
export VCPKG_BINARY_SOURCES="clear;nugetconfig,<path to nuget.config>"
大功告成! vcpkg 现在将从 NuGet 源上传或还原包。
后续步骤
下面是接下来要尝试的其他任务: