我正在尝试使用 GitHub 包推送并使用 NuGet 包(此处的文档)。作为一个新人,经过一番尝试后,我设法将示例 NuGet 包推送到公共 GitHub 存储库。
但是,我缺少最后一部分,即使用某些 Visual Studio 项目中的包。当我尝试添加包时,我首先收到“正在恢复包...”通知,然后收到错误“无法加载源的服务索引...:输入不是有效的 Base-64 字符串,因为它包含非基 64 字符、超过两个填充字符或填充字符中包含非法字符”。
所以,我的 NuGet 端点似乎没有按预期配置,但我找不到关于此的明确方向。为了帮助像我这样的新手从 GPR 开始,并详细说明我的程序,以便读者可以发现我的错误,这是我到目前为止学到的内容:
在使用 GPR 之前,您必须在您的 GitHub 帐户中创建一个令牌。
RepositoryUrl
文件中的 RepositoryType
和 .csproj
属性分别设置为目标存储库 URL 和 git
,例如:<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- omissis ... -->
<RepositoryUrl>https://github.com/USERNAME/PROJECTNAME</RepositoryUrl>
<RepositoryType>git</RepositoryType>
</PropertyGroup>
</Project>
dotnet pack NAME.csproj -c Release -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg
其中
-c
选择配置。有关更多信息,请参阅创建 snupkg,以及 dotnet 包参考。
dotnet nuget push "bin/Release/NAME.1.0.0.nupkg" --source "github"
。注意:您首先需要使用以下方式注册(一次)GPR feed:
nuget sources add -name "github" -Source https://nuget.pkg.github.com/YOURGITHUBUSERNAME/index.json -Username YOURGITHUBUSERNAME -Password YOURGITHUBTOKEN
如果需要安装
nuget.exe
,请从https://www.nuget.org/downloads下载。如果您将其放置在例如在 C:\Exe
中,您可以使用 /c/Exe/nuget.exe
从 Windows Git Bash 调用它。
此外,您还需要设置 nuget API 密钥:
nuget setapikey YOURGITHUBTOKEN -Source https://nuget.pkg.github.com/YOURGITHUBUSERNAME/index.json
这会加密密钥并将其保存在
%APPDATA%
文件夹下的配置文件中。例如我的最终结果是C:\Users\USERNAME\AppData\Roaming\NuGet\NuGet.Config
。
nuget.config
文件,其内容如下:<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="github" value="https://nuget.pkg.github.com/OWNER/index.json" />
</packageSources>
<packageSourceCredentials>
<github>
<add key="Username" value="YOURUSERNAME" />
<add key="ClearTextPassword" value="YOURTOKEN" />
</github>
</packageSourceCredentials>
</configuration>
这来自文档示例。然而,为了避免在此文件中存储令牌(该令牌将保存在存储库中),我宁愿使用每用户或每台机器的 NuGet 设置(reference):例如每个用户:
nuget config -set GITHUB_PACKAGES_TOKEN=YOURTOKEN
这将保存每个用户的设置(默认选项)。现在,像这样使用它(请参阅在 NuGet.Config 文件中设置环境变量):
<add key="Password" value="%GITHUB_PACKAGES_TOKEN%" />
dotnet add YOURPROJECT.csproj package YOURPACKAGE --version YOURPACKAGEVERSION
。然而,在最后一点我得到了上述错误。我的 NuGet 源配置哪里错了?
将 NuGet 包推送到 Github 的文档已过时。对我有用的步骤:
write:packages
read:packages
delete:packages
repo
权限dotnet nuget add source --username [GithubUserName] --password [YourApiKey] --name github https://nuget.pkg.github.com/[UsernameOrOrganizationName]/index.json
github
源
dotnet nuget push --source github bin\Release\MyAwesomePackage.1.0.0.nupkg
在将代码提交到源代码管理之前,请验证 Github API 密钥是否存储在解决方案内的 Nuget.config 文件中。
steps:
- uses: actions/checkout@v2
- name: Add Nuget Register
uses: actions/setup-dotnet@v3
with:
dotnet-version: 3.1.x
source-url: https://nuget.pkg.github.com/<owner|org>/index.json
env:
NUGET_AUTH_TOKEN: ${{ secrets.PAT_READ_PACKAGE_TOKEN }}
- name: Restore dependencies
env:
NUGET_AUTH_TOKEN: ${{ secrets.PAT_READ_PACKAGE_TOKEN }}
run: dotnet restore