使用 NuGet 发布和使用 GitHub 包存储库:无法加载服务索引错误

Naf*_*tis 8 github nuget

我正在尝试使用 GitHub 包(此处为文档)推送然后使用 NuGet 包。作为一个新手,经过一些试验后,我设法将示例 NuGet 包推送到公共 GitHub 存储库。

然而,我错过了最后一部分,即从一些 Visual Studio 项目中使用包。当我尝试添加包时,我首先收到“正在为...恢复包”通知,然后是错误“无法加载源的服务索引...:输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符、两个以上的填充字符或填充字符中的非法字符”。

因此,似乎我的 NuGet 端点没有按预期配置,但我找不到明确的方向。为了帮助像我这样的新手从 GPR 开始,并详细说明我的程序,以便读者可以发现我的错误,以下是我到目前为止所学到的:

设置

在使用 GPR 之前,您必须在您的 GitHub 帐户中创建一个令牌

创建和发布包

  1. 将文件中的RepositoryUrlRepositoryType属性分别设置为.csproj目标存储库 URL 和git,例如:
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <!-- omissis ... -->
    <RepositoryUrl>https://github.com/USERNAME/PROJECTNAME</RepositoryUrl>
    <RepositoryType>git</RepositoryType>
  </PropertyGroup>
</Project>

Run Code Online (Sandbox Code Playgroud)
  1. 在你的项目文件夹中打开 GitHub bash,并创建这样的包
dotnet pack NAME.csproj -c Release -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg
Run Code Online (Sandbox Code Playgroud)

其中-c选择配置。有关更多信息,请参阅创建 snupkg,以及dotnet pack 参考

  1. 打开你的项目文件夹GitHub的庆典,并发布如下:dotnet nuget push "bin/Release/NAME.1.0.0.nupkg" --source "github"

注意:您首先需要注册(一次)GPR 提要:

nuget sources add -name "github" -Source https://nuget.pkg.github.com/YOURGITHUBUSERNAME/index.json -Username YOURGITHUBUSERNAME -Password YOURGITHUBTOKEN
Run Code Online (Sandbox Code Playgroud)

如果需要安装nuget.exe,请从https://www.nuget.org/downloads下载。例如,如果将它放在 中C:\Exe,则可以从 Windows Git Bash 中使用/c/Exe/nuget.exe.

此外,您需要设置 nuget API 密钥:

nuget setapikey YOURGITHUBTOKEN -Source https://nuget.pkg.github.com/YOURGITHUBUSERNAME/index.json
Run Code Online (Sandbox Code Playgroud)

这会加密密钥并将其保存在您的%APPDATA%文件夹下的配置文件中。例如,我的最终在C:\Users\USERNAME\AppData\Roaming\NuGet\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>
Run Code Online (Sandbox Code Playgroud)

这来自文档示例。然而,为了避免在这个文件中存储令牌,这将被保存在 repo 中,我宁愿使用每个用户或每个机器的 NuGet 设置(参考):例如每个用户:

nuget config -set GITHUB_PACKAGES_TOKEN=YOURTOKEN
Run Code Online (Sandbox Code Playgroud)

这将保存每个用户的设置(默认选项)。现在,像这样使用它(请参阅在 NuGet.Config 文件中设置环境变量):

<add key="Password" value="%GITHUB_PACKAGES_TOKEN%" />
Run Code Online (Sandbox Code Playgroud)
  1. 要使用包,请执行dotnet add YOURPROJECT.csproj package YOURPACKAGE --version YOURPACKAGEVERSION.

然而,在最后一点我得到了上述错误。我的 NuGet 源配置错误在哪里?

Pie*_*jan 6

将 NuGet 包推送到 Github 的文档已过时。对我有用的步骤:

  • 前往 GitHub
    • 单击您的头像(右上角)
    • 设置
    • 开发者设置
    • 个人访问令牌
    • 产生
      • write:packages
      • read:packages
      • delete:packages
      • 这将自动检查repo您的 OAuth 令牌的权限
    • 单击生成令牌
  • 打开cmd
    • 导航到您的项目目录或包含您的 NuGet 包的目录
    • 添加一个新的 nuget 源:
      • 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 文件中。

  • 很有帮助,谢谢。您还可以使用默认的“${{secrets.GITHUB_TOKEN }}”。我的工作流程示例:https://github.com/soccerjoshj07/Wolfringo-github-packages/blob/master/.github/workflows/nuget-publish.yml (2认同)