2012-09-17 34 views
6

我已在我的解決方案中啓用NuGet軟件包還原。我正在使用nuget.exe版本2.0.30828.5。對於普通公共Feed中的軟件包,NuGet Package Restore工作正常。也就是說,如果「Packages」目錄中沒有任何內容,並且我的本地NuGet緩存(C:\ Users \ {用戶名} \ AppData \ Local \ NuGet \ Cache)已清除,則NPR可以很好地工作。NuGet軟件包還原無法提示使用自定義Feed的憑據

然而,當我們試圖在我們自定義的飼料使用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 Feed?

UPDATE 2012年9月18日

我對問題的更新。我觀察到,當我運行nuget.exe源更新...命令時,它將該部分添加到位於本地解決方案的.nuget文件夾中的NuGet.config文件中。然後,我運行procmon.exe運行編譯時注意到這個文件沒有被查看!相反,它正在尋找「C:\ Users {用戶名} \ AppData \ Roaming \ NuGet」目錄中的NuGet.config文件。然後我將本地NuGet.config文件中的部分複製/粘貼到\ AppData \ Roaming \ NuGet目錄下的NuGet.config文件中,並且它工作正常!

所以...問題是,什麼是正確這個過程的最佳實踐?

回答

6

我現在有這個工作。這是我做了什麼才能讓它起作用。首先,它看起來是這樣的命令:

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

是正確的方式去了解它。需要注意的是,當您運行「nuget.exe源更新」命令時,nuget.exe將在與正在執行的nuget.exe相同的目錄中查找NuGet.config文件(如果存在)。 IF它存在,它會在那裏存儲更改。如果存在不存在,它會將更改存儲在位於%AppData%\ NuGet目錄中的NuGet.config文件中。

額外需要注意的是,當包還原作爲構建的一部分被執行,它只是看起來在%APPDATA%\目錄下的NuGet的NuGet.config文件並忽略NuGet.config文件,它是在正在執行nuget.exe的相同目錄(我不確定這是一個錯誤還是故意)。

所以,你應該使用nuget運行這個命令。exe是在而不是的目錄中有一個NuGet.config文件,以確保更改存儲在%AppData%\ NuGet目錄中正確的NuGet.config文件中。

+0

我的理解是還有一個選項可以向Nuget.exe提供一個配置文件,所以當你調用它來嘗試並使用該文件時,你可以嘗試更加明確,但也許它會被某些命令忽略。 – dragon788