.NET Core NuGet恢复过程中出现私有NuGet源失败(VSTS CI构建)

3
这个问题涉及到Visual Studio Team Services中的持续集成功能,特别是自动化构建方面。
我已经设置了一个构建定义来构建我的.NET Core MVC应用程序。
它使用.NET Core v1,并编译针对.NET Framework 4.5.2。
我按照这里的说明进行操作:

https://www.visualstudio.com/en-us/docs/build/apps/aspnet/ci/build-aspnet-core

我在VSTS中设置了一个私有NuGet feed

这是添加包源的命令:

Sources Add -Name "CiiDLFeed" -UserName "<username>" -Password "<password>" -ConfigFile $(Build.SourcesDirectory)/Nuget.config -Source https://mycompany.pkgs.visualstudio.com/_packaging/DLFeed/nuget/v3/index.json

我收到的错误信息如下:

错误: 无法加载服务索引,源为https://mycompany.pkgs.visualstudio.com/_packaging/DLFeed/nuget/v3/index.json。错误: 此平台上不支持密码解密 .NET Core。以下源使用了加密密码: 'CiiDLFeed'。您可以使用明文密码作为解决方法。

为此,我将“-StorePasswordInClearText”参数添加到NuGet源添加命令中。
Sources Add -Name "CiiDLFeed" -UserName "<username>" -Password "<password>" -ConfigFile $(Build.SourcesDirectory)/Nuget.config -Source https://mycompany.pkgs.visualstudio.com/_packaging/DLFeed/nuget/v3/index.json -StorePasswordInClearText

现在,我遇到了401错误:
错误:无法加载服务索引以获取源https://mycompany.pkgs.visualstudio.com/_packaging/DLFeed/nuget/v3/index.json。 错误:响应状态代码未指示成功:401(未经授权)。
我正在使用与另一个构建定义相同的凭据,访问相同的NuGet源(.NET Web Forms应用程序),因此不应该给我401错误。
我还尝试过仅引用库dll而不是私有源中的NuGet包,但在.NET Core中似乎不可能实现:
.NET Core项目在此版本中仅支持引用.NET Framework程序集。要引用其他程序集,它们需要包含在NuGet包中并引用该包。

尝试使用v2的反馈地址。我发现v3并不总是可靠的。 - trailmax
@trailmax,我使用v2仍然遇到401错误。感谢您的建议。 - James Wierzba
你是在使用你的实际密码还是个人访问令牌作为密码? - trailmax
@trailmax 我的实际用户名和密码。由于某种原因,输出会显示成这样。 - James Wierzba
尝试使用个人访问令牌(https://www.visualstudio.com/en-us/docs/setup-admin/team-services/use-personal-access-tokens-to-authenticate),但请确保为包管理授予相应的权限。如果这样可以运行 - 还有更好的方法。 - trailmax
你可以在这里看到nuget.config文件的示例:http://docs.myget.org/docs/how-to/nuget-configuration-inheritance - Paul Cavacas
2个回答

2
我们使用的解决方法是在项目中设置一个本地NuGet源目录,将.nupkg文件添加到其中,并在项目中引用它们。这样,VSTS CI构建可以访问您的NuGet包,而无需设置远程NuGet源。
例如:
project_directory/
    ... project files ...
    my_nuget_repo/
        mypackage.nupkg

在此添加本地源:
nuget sources add -Name "my_nuget_repo" -Source "<path_to_project>/my_nuget_repo"

-1

你需要使用自己的Nuget.Config文件(可以使用PAT作为密码):

  1. 将Nuget.Config文件(包括相应的packageSource)添加到源代码控制中
  2. 编辑您的构建定义
  3. 删除/禁用用于添加软件包源的命令行步骤
  4. 选择 .Net Core (Preview) 恢复步骤。

参数如下:

--configfile $(build.sourcesdirectory)/ConsoleAppCore/Nuget.Config

注意:您可以在解决方案根目录下创建或编辑NuGet.config文件,与project.json文件并列,并将其纳入源代码控制。这样做的好处是,在进行 .Net Core 恢复步骤时,您无需指定configfile参数。

你能否在NuGet.config文件中包含指定NuGet源的语法? - James Wierzba
@JamesWierzba 语法就像你说的那样,nuget sources add ...,在本地机器上执行,并将相应的 Nuget.config(默认情况下为 %APPDATA%\NuGet)添加到源代码控制中。 - starian chen-MSFT
@JamesWierzba 使用PAT是更好的方法,而且我用这个方法很顺利。尝试使用PAT作为密码并检查结果。 - starian chen-MSFT
我们强烈建议不要将您的PAT提交到源代码控制中;任何拥有您的PAT的人都可以像您一样与Azure DevOps服务交互。--来自Microsoft:https://learn.microsoft.com/zh-cn/azure/devops/artifacts/nuget/nuget-exe?view=vsts&tabs=new-nav - emp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接