我正在尝试解决 NuGet 的 source control limitations 问题.
为此,我需要更多地了解 NuGet 的工作原理。让我们举一个简单的例子。假设我有一个项目,我向其中添加了 AutoMapper。当我添加它时,DLL文件应该放在哪里?
我问是因为它似乎不一致。有时引用会在“Packages”文件夹中查找 DLL 文件:
有时它会在调试构建输出文件夹中查找:
但在这两种情况下,packages.config
文件中的 AutoMapper 行是相同的:
第一个例子:
<?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 得到了如此广泛的采用。一定有某种方法可以让这项工作成功......
最佳答案
.NET Core
在 .NET Core 中,NuGet 包现在默认存储在全局位置:
Windows:%userprofile%\.nuget\packages
(又名 C:\Users\[User]\.nuget\packages
)
Linux:~/.nuget/packages
此外,packages.config
已删除,现在使用 <PackageReference>
存储引用.csproj
中的元素文件。
您可以找到更多文档here .
<小时/>如果您找不到全局位置,则可能已更改。您可以使用以下命令发现它:
dotnet nuget locals global-packages --list
如果您想将包位置更改为,例如 e:\packages
,您可以使用以下命令。
dotnet nuget config -Set globalPackagesFolder=e:\packages
我安装 NuGet 包时遇到的任何问题都可以通过清除所有缓存位置来解决(除了全局位置之外,还有其他位置保存 NuGet 包),如下所示:
dotnet nuget locals all --clear
关于.net - NuGet 将 DLL 文件放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7018913/