Where does NuGet put the dll?

懵懂的女人 提交于 2019-12-21 06:46:40

问题


I am trying to work around NuGet's Source Control limitations.

To that end I need to know a bit more about how NuGet works. Lets take a simple example. Say I have a project and I add AutoMapper to it. When I add it where is the dll supposed to be put?

I ask because it does not seem to be consistent. Sometimes the reference is looking for the dll the "Packages" folder:

and sometimes it is looking in the Debug build output folder:

But in both cases the AutoMapper line in the packages.config file is the same:

First example:

<?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>

Second Example:

<?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>

So what is controlling where it sets up up the reference to? And how to I make it just use the Packages Location? (When it uses the Debug output folder those references fail if you to compile for "Release".)

Frustrated Note: I have to admit that I am finding NuGet to be a cool idea, but not ready for anything but simple situations. (I am thinking about just going back to having a lib folder with all my dlls in it.)

I can't help but wonder if I am missing something because NuGet has such wide spread adoption. There must be some way to make this work...


回答1:


The short answer is that if you install a NuGet package from VS (either using PowerShell or the dialog), any assemblies that it contains will be referenced from the Packages folder.

Note that VS has some quirky behavior such that if you try to build and the packages folder is missing, AND the DLL exists in the bin folder, then it switches the reference to go to the 'bin' folder. Maybe that's what you are seeing?

If that's not the case, and you have a reproducible set of steps that lead to assemblies being referenced NOT from the Packages folder, please open a bug on http://nuget.codeplex.com/. Thanks!




回答2:


.NET CORE

In .NET Core nuget packages are now stored in a global location, by default:

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

Additionally, the packages.config was removed with references now being stored using the <PackageReference> element in the .csproj file


If you cant find the global location, it may have been changed. You can discover it using this command:

dotnet nuget locals global-packages --list

If you would like to change the package location to, for example, e:\packages, you can using the following command

dotnet nuget config -Set globalPackagesFolder=e:\packages

Any problems installing nuget packages that I've had have always been fixed by clearing all the cache locations (there are additional places where nuget packages are saved aside from the global location) like so:

dotnet nuget locals all --clear



回答3:


This helps me with this issue

  1. Delete below line in packages.config file

    < package id="Microsoft.AspNet.WebApi.HelpPage" version="5.2.3" targetFramework="net45" />
    
  2. Delete folder "Area" - all the files in it

  3. Install Nuget package "PM > Install-Package Microsoft.AspNet.WebApi.HelpPage"



来源:https://stackoverflow.com/questions/7018913/where-does-nuget-put-the-dll

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!