“dotnet restore --interactive”不适用于 Azure Artifacts

Jim*_*Aho 5 nuget azure-devops

我有一台新安装的带有 .NET Core SDK 3.0.100 的 Windows 10 机器。我有一个项目,它的 nuget.config 文件包含(以及其他参考)对 Azure Artifacts nuget 提要的引用,我想以交互方式访问此提要的凭据。值得指出的是,我想使用命令行来实现这一点。我选择的 IDE 是 Jetbrains Rider 而不是 Visual Studio(对于这个特定问题,我不确定这很重要)。

我已经通过运行 powershell 命令(Invoke-WebRequest...)下载了Azure Artifacts Credential Provider并安装了它 - 看起来 - 成功。现在我的计算机上有一个 nuget 插件,可以帮助我检索 azure 工件提要的凭据。

我所期望的工作是运行dotnet restore --interactive应该提示我输入凭据,但它没有。它根本不提示,只是抱怨它找不到包。

我也曾在 MacOS 和 Windows 上与我的同事尝试过这个,但似乎总是与此相关的一些问题。任何想法我做错了什么?

谢谢你的帮助!

小智 17

您可能需要安装https://github.com/microsoft/artifacts-credprovider#setup然后您就可以使用dotnet restore --interactive


Rob*_*cha 11

dotnet restore --interactive如果您将文件添加nuget.config到项目中时无法立即使用,还有另一种选择。

您可以清除所有nuget本地缓存​​。

最简单的方法是使用以下命令:

dotnet nuget locals all --clear
Run Code Online (Sandbox Code Playgroud)

一段时间后,当所有缓存都被清除后,您可以dotnet restore --interactive再次运行,希望 Azure Artifacts 凭据提供程序应该向您显示通过设备代码进行身份验证的说明。


Jim*_*Aho 6

我会回答我自己的问题,因为它可能会帮助别人。

当我尝试时,dotnet restore --configfile .\.nuget\NuGet.Config --interactive确实提示了我。我可以登录,一切正常!

我不知道为什么,但似乎只是运行dotnet restore --interactive并没有选择正确的 nuget 源 - 或者至少不是我.\.nuget\NuGet.Config在本地项目中定义的那些。因此凭证提供者(显然)不会提示我做任何事情。我还没有找到任何关于这是预期行为还是错误的详细信息。

  • [此文档页面](https://docs.microsoft.com/en-us/nuget/consume-packages/configuring-nuget-behavior) 说:NuGet 3.3 及更早版本使用 .nuget 文件夹进行解决方案范围的设置。NuGet 3.4+ 中不使用此文件夹。 (2认同)

Jor*_*ero 6

通过@Robson Rocha发布的关于清除所有 nuget 本地缓存的选项,我可以获得凭据说明,但在身份验证后我仍然收到错误:

\n
warn : The plugin credential provider could not acquire credentials. ...\nerror: Response status code does not indicate success: 401 (Unauthorized).\n
Run Code Online (Sandbox Code Playgroud)\n

我在 Windows 开发环境中解决了这个问题,创建了一个具有权限 \xe2\x80\x9c范围的 Azure 个人访问令牌:自定义定义,打包:Read\xe2\x80\x9d 并将其设置在%AppData% Nuget 文件夹中:

\n
C:\\Users\\{UserName}\\AppData\\Roaming\\NuGet\\NuGet.Config\n
Run Code Online (Sandbox Code Playgroud)\n

nuget.config 参考 - packageSourceCredentials

\n
<packageSourceCredentials>\n  <MyPackageSourceKey>\n    <add key="Username" value="myUserName" />\n    <add key="ClearTextPassword" value="TheAzurePersonalAccessToken" />\n  </MyPackageSourceKey>\n</packageSourceCredentials>\n
Run Code Online (Sandbox Code Playgroud)\n

由于 %AppData% Nuget 文件夹是每个用户的,并且位于存储库文件夹之外,因此每个用户的凭据都是安全的,我们避免将它们提交到存储库中。

\n


Ale*_*kov 6

截至 2023 年 1 月,“dotnet Restore --interactive”在许多情况下实际上不会显示提示,而是默默等待 90 秒,然后无法恢复。推测显示提示是在错误的日志记录级别完成的,因此不会显示在控制台上。

解决方法:添加--verbosity minimal

dotnet restore --interactive --verbosity minimal
Run Code Online (Sandbox Code Playgroud)

从 2021 年报告的相应问题中获得的解决方案 - https://github.com/dotnet/sdk/issues/22987