6

我在我的解决方案中启用了 NuGet 包还原。我正在使用 nuget.exe 版本 2.0.30828.5。对于普通公共源中的包,NuGet 包还原工作正常。也就是说,如果“Packages”目录中没有任何内容并且我的本地 NuGet 缓存 (C:\Users\{username}\AppData\Local\NuGet\Cache) 是清晰的,则 NPR 可以完美运行。

但是,当我们尝试将 NPR 用于自定义提要中的包时(自定义提要具有基本身份验证),我们会得到以下信息:

EXEC : warning : Unable to prompt for credentials. Consult NuGet's help documentation for ways to specify credentials.
c:\<localpath>\.nuget\nuget.targets(80,9): error : Unable to find version '2.0.1.0' of package '<packageName>'.
c:\<localpath>\.nuget\nuget.targets(80,9): error MSB3073: The command ""c:\<localpath>\.nuget\nuget.exe" install "c:\<localpath>\packages.config" -source ""  -RequireConsent -o "c:\<localpath>\packages"" exited with code 1.

当我查看 NuGet 代码以及反编译 nuget.exe 以找到字符串“无法提示输入凭据。请参阅 NuGet 的帮助文档以了解指定凭据的方法”时,我在那里看到它,但坦率地说,我无法确定谁是利用该错误消息。

当我们添加包时(从 NuGet UI 或包管理器控制台),它会提示输入凭据并且工作正常。这只是包还原的问题。

我尝试运行此命令:

NuGet.exe source Update -Name {feedname} -UserName {myusername} -Password {mypassword}

但得到相同的结果。

有谁知道如何使用基本身份验证为自定义 NuGet 提要指定凭据以进行 NuGet 包还原?

2012 年 9 月 18 日更新

我有关于这个问题的更新。我观察到,当我运行nuget.exe source Update...命令时,它会将部分添加到 NuGet.config 文件中,该文件位于我的解决方案本地的 .nuget 文件夹中。然后我在运行构建时运行了 procmon.exe,发现该文件没有被查看!相反,它在“C:\Users{username}\AppData\Roaming\NuGet”目录中寻找 NuGet.config 文件。然后,我将本地 NuGet.config 文件中的部分复制/粘贴到 \AppData\Roaming\NuGet 目录中的 NuGet.config 文件中,并且成功了!

所以......问题是,这个过程的正确最佳实践是什么?

4

1 回答 1

6

我现在有这个工作。这就是我为了让它工作而做的。首先,它出现了命令:

NuGet.exe source Update -Name {feedname} -UserName {myusername} -Password {mypassword}

是正确的方法。需要注意的是,当您运行“nuget.exe 源更新”命令时,nuget.exe 将在与正在执行的 nuget.exe 相同的目录中查找 NuGet.config 文件(如果存在)。如果存在,它将在那里存储更改。如果它不存在,它会将更改存储在位于 %AppData%\NuGet 目录中的 NuGet.config 文件中。

另外需要注意的是,当包还原作为构建的一部分执行时,它只查看 %AppData%\NuGet 目录中的 NuGet.config 文件,而忽略与 nuget 相同目录中的 NuGet.config 文件.exe 正在执行(我不确定这是错误还是故意)。

因此,您应该使用 nuget.exe 运行此命令,该目录中没有NuGet.config 文件,以确保更改存储在 %AppData%\NuGet 目录中正确的 NuGet.config 文件中。

于 2012-09-18T17:55:38.373 回答