【发布时间】: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。
创建和发布包
- 将
.csproj文件中的RepositoryUrl和RepositoryType属性分别设置为目标存储库URL 和git,例如:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- omissis ... -->
<RepositoryUrl>https://github.com/USERNAME/PROJECTNAME</RepositoryUrl>
<RepositoryType>git</RepositoryType>
</PropertyGroup>
</Project>
- 在您的项目文件夹中打开 GitHub bash,然后像这样创建包:
dotnet pack NAME.csproj -c Release -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg
-c 选择配置。更多信息请参见creating snupkg,以及dotnet pack reference。
- 在您的项目文件夹中打开 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。
使用包
-
- 对于每个客户项目,add nuget.config to your project:在您的项目文件夹中添加一个
nuget.config文件,其内容如下:
- 对于每个客户项目,add nuget.config to your project:在您的项目文件夹中添加一个
<?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%" />
- 要使用包,请执行
dotnet add YOURPROJECT.csproj package YOURPACKAGE --version YOURPACKAGEVERSION。
然而,在最后一点我得到了上述错误。我的 NuGet 源配置哪里出错了?
【问题讨论】: