NuGet把dll放在哪里?

Vac*_*ano 33 .net reference visual-studio-2010 visual-studio nuget

我正在尝试解决NuGet的Source Control限制.

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

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

NuGet使用包路径

有时它正在查看Debug构建输出文件夹:

NuGet使用调试路径

但在这两种情况下,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>
Run Code Online (Sandbox Code Playgroud)

第二个例子:

<?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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

Haz*_*zza 46

.NET核心

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

C:\Users\[User]\.nuget\packages.

此外,packages.config删除了现在使用文件中的<PackageReference>元素存储的引用.csproj


Dav*_*bbo 21

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

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

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