13

我尝试学习 Github 操作和软件包。因此,我创建了一个示例 nuget 包并成功创建。但是我无法使用它。

我按照这个步骤;

  1. 选项 > Nuget 包管理器 > 包源
  2. 单击添加按钮写入组织名称并添加包源地址,如下所示: 在此处输入图像描述

  3. 之后,Visual Studio 不会向我询问此地址的任何凭据。

  4. 如果没有凭证,我预计会出错。我明白了。

    [github] 无法从源“ https://nuget.pkg.github.com/[OrganizationName]/query?q=&skip=0&take=26&prerelease=false&semVerLevel=2.0.0 ”检索元数据。响应状态码不表示成功:401(未授权)。

  5. 然后,我决定使用github 文档中解释的一些凭证。

  6. 我的 nuget.config 文件: 在此处输入图像描述

  7. 但是我仍然收到未经授权的错误。而且,当我单击错误链接时,会收到这样的消息:

{"errors":[{"code":"您的令牌没有被授予执行此查询所需的范围。'id' 字段需要以下范围之一","message":" ['read:packages' ],但您的令牌仅被授予:[''] 范围。请在以下位置修改令牌的范围:https ://github.com/settings/tokens 。"}]}

但我已经有一个带有读/写包凭证的令牌。 在此处输入图像描述

  1. 所有这些都失败了,我尝试了另一种方式。我将凭据信息添加到 Windows 凭据管理器。一切还是一样。

那么,我如何添加和使用我的私有 nuget 包?

4

2 回答 2

6

如何在 Visual Studio 2019 上使用 github nuget 包

首先,确保您的凭证信息在nuget.config文件中正确无误。

我发现您的文档建议您应该nuget.config在解决方案中添加一个新文件。该nuget.config文件是一个本地动作文件,它将作用于当前子目录和当前级别以下的任何项目。你可以参考这个文件

这样,您应该重新启动 VS 实例以启用此新nuget.config文件。

--------全局nuget.config--------

但是,根据您的描述和第一张图片,您使用了全局nuget.config文件。并且 UI 的信息存储在全局nuget.config文件下。

如果你想为你 PC 上的所有项目配置这个 gihub 包源,你应该在全局nuget.config文件中配置它。

您提供的第一张图片表明您在全局文件中使用了(C:\Users\xxx(current user)\AppData\Roaming\NuGet\NuGet.Config)。

此功能还需要重启 VS 才能启用新nuget.config文件。

建议

  1. 请将您的文件内容添加到C:\Users\xxx(current user)\AppData\Roaming\NuGet\NuGet.Config.

  2. 重新启动 VS 实例或重新启动 PC 以启用此新nuget.config文件。它就是这样设计的。

于 2020-06-03T07:34:13.533 回答
1

这不是一件容易的事,但这是解决方案(经过 2 天的挣扎)

  1. 首先在 Github 中生成 PAT (Personal Access Token)
    按照以下步骤生成 PAT
    选择 read:packages 选项非常重要 Github 将只显示一次 PAT,因此请务必将其复制到保存位置,否则,您必须再次生成它在此处输入图像描述

  2. 现在有了PAT,将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="USERNAME" />
                <add key="ClearTextPassword" value="TOKEN" />
            </github>
        </packageSourceCredentials>
    </configuration>
    
  3. 您必须更换:

    • USERNAME 与您在 GitHub 上的用户帐户的名称。
    • TOKEN 与您的个人访问令牌(您在步骤 1 中生成的令牌)
    • 拥有包含您的项目的存储库的用户或组织帐户名称的 OWNER。
  4. 您必须重新启动 Visual Studio 甚至重新启动 PC这很重要

之后打开终端并复制并粘贴(可能有一些修改)Github 给你安装包的语句

在此处输入图像描述

现在您已准备好获取 Package


更新

如何为团队配置 github nuget 包?

配置nuget.config使用环境变量

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="NuGet official package source" value="https://api.nuget.org/v3/index.json" />
    <add key="Github" value="https://nuget.pkg.github.com/OWNER/index.json" />
  </packageSources>
  <packageSourceCredentials>
    <Github>
      <add key="Username" value="%GITHUB_PACKAGE_USER_NAME%" />
      <add key="ClearTextPassword" value="%GITHUB_PACKAGE_TOKEN%" />
    </Github>
  </packageSourceCredentials>
</configuration>

GITHUB_PACKAGE_USER_NAMEGITHUB_PACKAGE_TOKEN可以是你想要的任何东西。

现在,每个团队成员都应该配置他们的用户环境变量:

  • GITHUB_PACKAGE_USER_NAME: 团队成员 github 用户名
  • GITHUB_PACKAGE_TOKEN: 团队成员个人访问令牌 (PAT)

通过这些配置,假设团队成员有权访问 OWNER 包存储库,Visual Studio 将能够查询和下载包。

如何在github 操作工作流中恢复 github nuget 包?

使用前面的NuGet.config配置,您需要更改传递所需环境变量的工作流程,如下所示:

- name: Restore dependencies
  env:
    GITHUB_PACKAGE_USER_NAME: ${{ github.actor }}
    GITHUB_PACKAGE_TOKEN: ${{ secrets.RESTORE_ORGANIZATION_PACKAGES }}
  run: dotnet restore ./src

由于您无法通过 PAT,因此您需要配置一个 github 机密(用于存储库组织)。在上面的示例中,我在存储库级别创建了一个以权限RESTORE_ORGANIZATION_PACKAGES命名的机密。read:packages

于 2022-02-10T10:10:17.550 回答