wake-up-neo.net

Wo legt NuGet die DLL ab?

Ich versuche, NuGets Source Control-Einschränkungen zu umgehen.

Zu diesem Zweck muss ich etwas mehr über die Funktionsweise von NuGet erfahren. Nehmen wir ein einfaches Beispiel. Angenommen, ich habe ein Projekt und füge AutoMapper hinzu. Wenn ich es hinzufüge, wo soll die DLL abgelegt werden?

Ich frage, weil es nicht konsequent zu sein scheint. Manchmal sucht die Referenz nach der DLL im Ordner "Packages":

NuGet using packages path

und manchmal wird im Debug Build-Ausgabeordner gesucht:

NuGet using Debug path

In beiden Fällen ist die AutoMapper-Zeile in der Datei packages.config jedoch gleich:

Erstes Beispiel:

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

Zweites Beispiel:

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

Was ist also das Steuern, wo es die Referenz aufstellt? Und wie mache ich es einfach, den Paketstandort zu verwenden? (Wenn der Debug-Ausgabeordner verwendet wird, schlagen diese Verweise fehl, wenn Sie für "Release" kompilieren.)

Frustriert Anmerkung: Ich muss zugeben, dass ich NuGet für eine coole Idee halte, aber nicht für alles andere als einfache Situationen bereit bin. (Ich denke darüber nach, einfach einen lib-Ordner mit all meinen DLLs darin zu haben.)

Ich frage mich, ob ich etwas vermisse, weil NuGet so weit verbreitet ist. Es muss einen Weg geben, um diese Arbeit zu machen ...

26
Vaccano

Die kurze Antwort lautet: Wenn Sie ein NuGet-Paket von VS installieren (entweder mithilfe von PowerShell oder des Dialogfelds), werden alle darin enthaltenen Assemblys aus dem Ordner Packages referenziert.

Beachten Sie, dass VS etwas schrulliges Verhalten aufweist, wenn Sie versuchen zu erstellen und der Paketordner fehlt UND die DLL im Ordner bin vorhanden ist. Dann wechselt der Verweis in den Ordner 'bin'. Vielleicht sehen Sie das?

Wenn dies nicht der Fall ist und Sie über reproduzierbare Schritte verfügen, die dazu führen, dass Assemblys NICHT aus dem Ordner Packages referenziert werden, öffnen Sie einen Fehler unter http://nuget.codeplex.com/ . Vielen Dank!

20
David Ebbo

.NET CORE

In .NET Core werden Nuget-Pakete jetzt an einem globalen Ort gespeichert:

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

Außerdem wurde der packages.config entfernt, und die Referenzen wurden jetzt mit dem <PackageReference>-Element in der .csproj-Datei gespeichert

22
Hazza

Das hilft mir bei diesem Problem

  1. Löschen Sie unter der Zeile in der Datei packages.config

    < package id="Microsoft.AspNet.WebApi.HelpPage" version="5.2.3" targetFramework="net45" />
    
  2. Löschen Sie den Ordner "Area" - alle darin enthaltenen Dateien

  3. Installieren Sie das Nuget-Paket "PM> Install-Package Microsoft.AspNet.WebApi.HelpPage "