2013-05-02 164 views
1

我想了解NuGet如何知道它需要恢復哪些軟件包(以及它如何知道在哪裏可以找到它們),以防它們在本地不存在的情況下(即軟件包尚未提交到源代碼管理)。Nuget包恢復

我可以在解決方案中看到我有一個.nuget目錄,但基本上只包含NuGet.exe。在每個項目中都有一個packages.config,看上去很有希望,其中包含以下內容(爲了清晰起見縮短);

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
<package id="AutoMapper" version="2.2.1" targetFramework="net40" /> 
</packages> 

我期待看到指向包的源的URL。因此,如果Nuget只使用軟件包ID字符串,那麼如果我有多個軟件包源都列出了相同的軟件包ID,它將如何知道該怎麼做。它只是通過包源中的優先級?

我問,因爲我有一個來自本地源的包,我刪除了包並禁用了包源,清除了解決方案並重建。當我預計它會失敗時,它會奏效。

非常感謝。

回答

2

有在您的文章2個問題,所以我會盡力解決一個一個:

的NuGet如何知道它需要恢復一下包?

如你所猜,Nuget使用.Nuget文件夾自動安裝缺失的軟件包。裏面的.Nuget文件夾中,有一個名爲「Nuget.targets」文件,該文件基本上就是一個包含此行

<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" -nocache $(RequireConsentSwitch) -solutionDir "$(SolutionDir) "</RestoreCommand> 

這需要充電,以安裝在packages.config文件中列出的包一VS項目文件(.csproj)在每個項目中。

因此,如果Nuget只使用軟件包ID字符串,它會知道如果我有多個軟件包源都列出可用的相同軟件包ID,該怎麼辦?

在%APPDATA%\ nuget.config,你可以看到「包源」的NuGet一個列表:對於給定的包標識,將的NuGet以相同的順序搜索它在這些包的來源作爲的NuGet。 config