NuGet包还原无法提示使用自定义订阅源的凭据

时间:2012-09-17 21:12:43

标签: nuget

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

但是,当我们尝试在自定义Feed中使用NPR作为包时(自定义Feed具有基本身份验证),我们得到了这个:

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}

但获得相同的结果。

有没有人知道如何使用Basic auth for NuGet Package Restore为自定义NuGet提要指定凭据?

更新9/18/2012

我对此问题有最新消息。我观察到当我运行 nuget.exe源更新... 命令时,它将该部分添加到NuGet.config文件中,该文件位于我的解决方案本地的.nuget文件夹中。我在运行构建时运行了procmon.exe注意到这个文件没有被查看!相反,它正在“C:\ Users {username} \ AppData \ Roaming \ NuGet”目录中查找NuGet.config文件。然后我将本地NuGet.config文件中的部分复制/粘贴到\ AppData \ Roaming \ NuGet目录中的NuGet.config文件中,它有效!

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

1 个答案:

答案 0 :(得分:6)

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

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

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

另外需要注意的是,当Package Restore作为构建的一部分执行时,会查看%AppData%\ NuGet目录中的NuGet.config文件并忽略NuGet.config正在执行的nuget.exe的同一目录中的文件(我不确定这是一个bug还是故意的。)

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