Dot-Net

NuGet 將 DLL 文件放在哪裡?

  • August 10, 2011

我正在嘗試解決 NuGet 的原始碼控制限制

為此,我需要更多地了解 NuGet 的工作原理。讓我們舉一個簡單的例子。假設我有一個項目,我將 AutoMapper 添加到它。當我添加它時,DLL文件應該放在哪裡?

我問是因為它似乎不一致。有時參考是在“Packages”文件夾中查找 DLL 文件:

NuGet 使用包路徑

有時它會在 Debug 建構輸出文件夾中查找:

NuGet 使用“調試”路徑

但在這兩種情況下,文件中的 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已刪除,現在使用文件&lt;PackageReference&gt;中的元素儲存引用.csproj

您可以在此處找到更多文件。


如果您找不到全球位置,則可能已更改。您可以使用以下命令發現它:

dotnet nuget locals global-packages --list

如果您想將包位置更改為,例如,e:\packages您可以使用以下命令。

dotnet nuget config -Set globalPackagesFolder=e:\packages

我一直通過清除所有記憶體位置(除了全域位置之外還有其他保存 NuGet 包的位置)來解決安裝 NuGet 包的任何問題,如下所示:

dotnet nuget locals all --clear

引用自:https://stackoverflow.com/questions/7018913