NuGet 將 DLL 文件放在哪裡?
我正在嘗試解決 NuGet 的原始碼控制限制。
為此,我需要更多地了解 NuGet 的工作原理。讓我們舉一個簡單的例子。假設我有一個項目,我將 AutoMapper 添加到它。當我添加它時,DLL文件應該放在哪裡?
我問是因為它似乎不一致。有時參考是在“Packages”文件夾中查找 DLL 文件:
有時它會在 Debug 建構輸出文件夾中查找:
但在這兩種情況下,文件中的 AutoMapper 行
packages.config是相同的:第一個例子:
<?xml version="1.0" encoding="utf-8"?> <packages> <package id="AutoMapper" version="1.1.0.118" /> <package id="CommonServiceLocator" version="1.0" /> <package id="Unity" version="2.1.505.0" /> </packages>第二個例子:
<?xml version="1.0" encoding="utf-8"?> <packages> <package id="NSubstitute" version="1.1.0.0" /> <package id="AutoMapper" version="1.1.0.118" /> <package id="CommonServiceLocator" version="1.0" /> <package id="Unity" version="2.1.505.0" /> </packages>那麼是什麼控制了它設置引用的位置呢?以及如何使它只使用包位置?
(當它使用調試輸出文件夾時,如果您為“發布”進行編譯,這些引用將失敗。)
**沮喪的註釋:**我不得不承認我發現 NuGet 是一個很酷的想法,但它除了簡單的情況外還沒有準備好。(我正在考慮回到一個包含我所有 DLL 文件的庫文件夾。)
我不禁想知道我是否遺漏了什麼,因為 NuGet 的採用如此廣泛。必須有某種方法可以使這項工作…
簡短的回答是,如果您從 Visual Studio 安裝 NuGet 包(使用 PowerShell 或對話框),它包含的任何程序集都將從 Packages 文件夾中引用。
請注意,Visual Studio 有一些古怪的行為,例如,如果您嘗試建構並且缺少 packages 文件夾,並且DLL 文件存在於“bin”文件夾中,那麼它會將引用切換到“bin”文件夾。也許這就是你所看到的?
如果不是這種情況,並且您有一組可重現的步驟導致程序集不是從 Packages 文件夾中引用,請在<http://nuget.codeplex.com/>上打開一個錯誤。
.NET 核心
在 .NET Core 中,NuGet 包現在預設儲存在全域位置:
窗戶:(
%userprofile%\.nuget\packages又名C:\Users\[User]\.nuget\packages)Linux:
~/.nuget/packages此外,
packages.config已刪除,現在使用文件<PackageReference>中的元素儲存引用.csproj。您可以在此處找到更多文件。
如果您找不到全球位置,則可能已更改。您可以使用以下命令發現它:
dotnet nuget locals global-packages --list如果您想將包位置更改為,例如,
e:\packages您可以使用以下命令。dotnet nuget config -Set globalPackagesFolder=e:\packages我一直通過清除所有記憶體位置(除了全域位置之外還有其他保存 NuGet 包的位置)來解決安裝 NuGet 包的任何問題,如下所示:
dotnet nuget locals all --clear

