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

问题描述 投票:0回答:2

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

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

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

设置

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

创建和发布包

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

  1. 在项目文件夹中打开 GitHub bash,然后创建包,如下所示:
dotnet pack NAME.csproj -c Release -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg

其中

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

  1. 在项目文件夹中打开 GitHub bash,然后像这样发布
    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

使用包

<?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%" />
  1. 要使用包,请执行
    dotnet add YOURPROJECT.csproj package YOURPACKAGE --version YOURPACKAGEVERSION

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

github nuget
2个回答
13
投票

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

  • 前往 GitHub
    • 点击您的头像(右上角)
    • 设置
    • 开发者设置
    • 个人访问令牌
    • 生成
      • write:packages
      • read:packages
      • delete:packages
      • 这将自动检查您的 OAuth 令牌的
        repo
        权限
    • 点击生成令牌
  • 打开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 文件中。


0
投票

首先使用packages:read创建个人访问令牌。

第二次使用token拉包。

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
© www.soinside.com 2019 - 2024. All rights reserved.