【问题标题】:Publishing and Consuming GitHub Package Repository with NuGet: Unable to load the service index error使用 NuGet 发布和使用 GitHub 包存储库:无法加载服务索引错误
【发布时间】:2019-12-22 16:24:11
【问题描述】:

我正在尝试使用 GitHub 包 (documentation here) 推送并使用 NuGet 包。作为一个新手,经过一番尝试后,我设法将一个示例 NuGet 包推送到了一个公共 GitHub 存储库。

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

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

设置

在使用 GPR 之前,您必须create a token in your GitHub account

创建和发布包

  1. .csproj 文件中的RepositoryUrlRepositoryType 属性分别设置为目标存储库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 选择配置。更多信息请参见creating snupkg,以及dotnet pack reference

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

如果您需要安装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

这会保存每个用户的设置(默认选项)。现在,像这样消费它(见Setting an environment variable in a NuGet.Config file):

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

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

【问题讨论】:

    标签: github nuget


    【解决方案1】:

    将 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 文件中。

    【讨论】:

    • 谢谢,成功了!唯一的问题:如何添加 .snupkg 符号?尝试使用 dotnet nuget push --source github .\bin\Release\...snupkg,它没有给出错误,但是包使用者没有可用的符号,所以我无法使用调试器进入代码,即使禁用“只是我的代码”。
    • 我自己还在研究这些事情。我还没有找到任何发布符号包的文档/指南。如果您尝试使用您的 snupkg 运行相同的命令,则不会获得控制台输出,也不会将符号包推送到 GPR。当您查看来自 Microsoft 的包(例如,github.com/microsoft/TeamCloud/packages/115501)时,您会发现也没有任何符号包。另一件还不可能的事情是安装包而不进行身份验证 (github.community/t/…)
    • 非常有帮助,谢谢。您也可以使用默认的${{ secrets.GITHUB_TOKEN }}。我的工作流程示例:github.com/soccerjoshj07/Wolfringo-github-packages/blob/master/…
    • 嗨。如果你必须使用 GPR,我建议你尝试在你的库中安装 Microsoft.SourceLink.Github nuget 包。这个包在生成的 nuspec 文件中添加了一个 xml 标记,其中包含 1)对您的 github git 存储库的引用 2)特定的 git commit SHA 校验和。然后,Visual Studio 将能够从 github 中提取用于构建包的源代码文件,并让您进入它们。如果你想试验,尝试解压 nuget 包,打开 nuspec 文件并注意 &lt;repository&gt; 标签。
    猜你喜欢
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 2016-07-03
    • 2012-04-25
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    相关资源
    最近更新 更多