NuGet把dll放在哪里?

时间:2011-08-10 22:54:51

标签: .net visual-studio visual-studio-2010 reference nuget

我正在努力解决NuGet的Source Control limitations

为此,我需要更多地了解NuGet的工作原理。让我们举一个简单的例子。假设我有一个项目,我将AutoMapper添加到它。当我添加它应该放在哪里的dll?

我问,因为它似乎不一致。有时引用是在寻找“Packages”文件夹的dll:

NuGet using packages path

有时会查看Debug build输出文件夹:

NuGet using Debug path

但在这两种情况下,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>

那么控制它建立引用的位置是什么?我如何才能使用包位置? (当它使用Debug输出文件夹时,如果要编译“Release”,则这些引用会失败。)

沮丧的注意事项我必须承认我发现NuGet是一个很酷的主意,但除了简单的情况之外什么都没准备好。 (我正在考虑回到我的所有dll中的lib文件夹。)

我不禁想知道我是否遗漏了一些东西,因为NuGet的广泛采用。必须有一些方法来完成这项工作......

3 个答案:

答案 0 :(得分:29)

.NET CORE

在.NET Core中,nuget包现在默认存储在全局位置:

C:\Users\[User]\.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

答案 1 :(得分:20)

简短的回答是,如果您从VS安装NuGet包(使用PowerShell或对话框),它包含的任何程序集都将从Packages文件夹中引用。

请注意,VS有一些古怪的行为,如果您尝试构建并且缺少packages文件夹,并且DLL存在于bin文件夹中,则它会将引用切换到“bin”文件夹。也许这就是你所看到的?

如果情况并非如此,并且您有一组可重现的步骤导致程序集被引用而不是来自Packages文件夹,请在http://nuget.codeplex.com/上打开一个错误。谢谢!

答案 2 :(得分:1)

这有助于我解决这个问题

  1. 删除packages.config文件中的以下行

    < package id="Microsoft.AspNet.WebApi.HelpPage" version="5.2.3" targetFramework="net45" />
    
  2. 删除文件夹&#34;区域&#34; - 其中的所有文件

  3. 安装Nuget包&#34; PM&gt;安装包 Microsoft.AspNet.WebApi.HelpPage &#34;