Bei der Installation von Nuget wird ein Verweis auf das bin-Verzeichnis hinzugefügt

9

Ich installiere das Paket AvsAn (2.1.0) mit dem Nuget-Paket-Manager. Ich erwarte, dass der Referenzpfad zum Paketverzeichnis lautet, etwa wie folgt:

  

C: \ app \ packages \ AvsAn.dll

Aber ein Verweis auf das Verzeichnis bin hinzugefügt:

  

C: \ app \ NameSpace \ bin \ AvsAn.dll

Verwirrenderweise passiert dies bei einigen Paketen, aber nicht bei anderen (d. h. der Bezugspfad ist wie erwartet zum Paketordner)

Was ich versucht habe

  • Deinstallation und Neuinstallation des Pakets
  • Suche nach etwas ähnlichem (ich konnte nichts finden)
Vinyl Warmth 09.05.2016, 09:13
quelle

1 Antwort

4

Wir haben festgestellt, dass verschiedene Projekte innerhalb derselben Lösung unterschiedliche Versionen voneinander verwendeten. Außerdem kann für ein einzelnes Projekt eine Version im Element <Reference> aus der in HintPath aufgeführten Version aufgeführt sein.

Wir haben einfach jede .csproj-Datei durchlaufen und sie manuell bearbeitet, um alles synchron zu bekommen.

  • Suchen Sie die Zeile, die mit <Reference beginnt und die Informationen für die betreffende DLL enthält.
  • Diese Zeile sollte eine Version anzeigen. Zum Beispiel: <Reference Include="SomeAssembly, Version=4.0.54"> . Daran kann es noch zusätzlichen Text geben, zB Culture und / oder PublicKey , usw. Wir interessieren uns nur für das Attribut Version.
  • Notieren Sie sich diese Version.
  • Überprüfen Sie nun das Element <HintPath> in <Reference , es enthält den Pfad zu dieser DLL, die VS erwartet (wobei VS zuerst aussieht).
  • Dieser Pfad enthält auch eine Version ..\packages\SomePackage.4.0.56\lib\net45\SomeAssembly.dll (zum Beispiel - in unserem Fall waren es Service Stack-Pakete). Obwohl dies technisch gesehen keine Version ist (es ist nur ein Pfad zu einer Datei auf Ihrem System), entspricht es normalerweise der Version der DLL.
  • Sie müssen sicherstellen, dass diese beiden Dinge synchron sind - dass der angegebene Pfad tatsächlich existiert und dass er zur erwarteten DLL führt.

In unserem Fall wurden wir von ServiceStack 4.0.54 auf 4.0.56 umgestellt. Einige der Include Referenzen waren auf 4.0.56, während der Pfad immer noch auf die Version 4.0.54 zeigte. Da der Hinweispfad nicht auf die erwartete DLL zeigte, suchte VS nach einer anderen Stelle und fand eine akzeptable Übereinstimmung im Verzeichnis \bin\debug des Projekts. Dies war nicht die richtige Version.

Es hängt von Ihrer speziellen Situation ab, was Sie ändern und was.

Dies wurde wahrscheinlich durch schlechte Zusammenführungen verursacht.

Außerdem haben wir die Verzeichnisse \bin und \packages unterhalb des Projektordners entfernt. Reloaded Lösung und lassen Nuget wiederherstellen. Dies dient nur dazu, die Dinge zu klären, damit Nuget nur die Pakete und ihre Versionen herunterziehen kann, die es benötigt. Und es verhindert, dass VS falsche Versionen verwendet, die sich möglicherweise im Verzeichnis \bin des Projekts befinden. Beide sind sicher zu löschen. Der Ordner \packages wird neu erstellt und über Nuget restor gefüllt, und das Verzeichnis \bin wird beim nächsten Build der Lösung neu erstellt und gefüllt.

    
David Martin 12.05.2016 17:25
quelle