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

How to use github nuget packages on Visual Studio 2019

我尝试学习 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(Unauthorized).

  5. 然后,我决定像 github documentation.

  6. 中解释的那样获取一些证书
  7. 我的 nuget.config 文件:

  8. 但是我仍然收到未经授权的错误。而且当我单击错误 link 时收到这样的消息:

{"errors":[{"code":"Your token has not been granted the required scopes to execute this query. The 'id' field requires one of the following scopes","message":" ['read:packages'], but your token has only been granted the: [''] scopes. Please modify your token's scopes at: https://github.com/settings/tokens."}]}

但我已经有了一个带有 read/write 包凭据的令牌。

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

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

How to use github nuget packages on Visual Studio 2019

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

我发现您的文档建议您应该将新的 nuget.config 文件添加到您的解决方案中。这个nuget.config文件是一个本地动作文件,它会作用于当前子目录下的所有项目。可以参考this document

在这种情况下,您应该重新启动 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 文件。就是这么设计的。

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

  1. 首先在Github中生成PAT(Personal Access Token)
    Follow these steps to generate a PAT
    对 select 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 给你安装包的语句

现在您已准备好获取包裹


更新

How to configure github nuget packages for teams?

使用环境变量配置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)

使用这些配置,Visual Studio 将能够查询和下载包,假设 团队成员 可以访问OWNER 软件包存储库。

How to restore github nuget packages in github actions workflows?

配置之前的 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 秘密(或者 repository or the organization)。在上面的示例中,我在存储库级别创建了一个名为 RESTORE_ORGANIZATION_PACKAGES 且具有 read:packages 权限的秘密。

我今天刚用 VS 19 遇到这个问题。

如下所示为 Nuget 包添加新源时,第一次提示我输入用户名和密码

Add nuget package source

我输入 github 密码作为密码时犯了错误。相反,您应该在 github 设置下创建一个令牌,如下所示,并输入令牌本身而不是您帐户的密码。

Generate token

就我而言,我在创建令牌时选择了以下选项

Token options

不幸的是,VS 19 没有再次提示输入凭据并一直显示错误消息:

[github]无法从源检索元数据...。响应状态代码不表示成功:401(未授权)。

要在 Windows 上更改此参数,请打开控制 Panel\User Accounts\Credential 管理器,如下所示:

Web credentials

单击“编辑”,然后粘贴您刚刚在 github 上创建的 访问令牌 作为密码。向下滚动凭据列表。就我而言,我还需要更改密码。

Second web credentials