[.net] Warnung: Konflikte zwischen verschiedenen Versionen derselben abhängigen Assembly gefunden


Answers

Grundsätzlich passiert dies, wenn die Assemblys, auf die Sie verweisen, "Copy Local" auf "True" gesetzt haben, was bedeutet, dass eine Kopie der DLL zusammen mit Ihrer exe in den bin-Ordner platziert wird.

Da Visual Studio auch alle Abhängigkeiten einer referenzierten Assembly kopiert, ist es möglich, dass zwei verschiedene Builds der gleichen Assembly ausgegeben werden, auf die verwiesen wird. Dies ist wahrscheinlicher, wenn Ihre Projekte in separaten Lösungen sind und daher separat kompiliert werden können.

Ich habe mich damit beschäftigt, Copy Local auf False für Referenzen in Assembler-Projekten zu setzen. Tun Sie dies nur für ausführbare Dateien / Webanwendungen, bei denen Sie die Assembly für das fertige Produkt benötigen.

Hoffe das macht Sinn!

Question

Ich entwickle gerade eine .NET-Anwendung, die aus 20 Projekten besteht. Einige dieser Projekte werden mit .NET 3.5 kompiliert, andere sind noch .NET 2.0-Projekte (bisher kein Problem).

Das Problem ist, dass, wenn ich eine externe Komponente einbeziehe, ich immer die folgende Warnung bekomme:

"Found conflicts between different versions of the same dependent assembly".

Was genau bedeutet diese Warnung und gibt es möglicherweise eine Möglichkeit, diese Warnung auszuschließen (wie die Verwendung von #pragma disable in den Quellcodedateien)?




Ich hatte das gleiche Problem mit einem meiner Projekte, aber keines der oben genannten half, die Warnung zu lösen. Ich überprüfte die ausführliche Build-Logdatei, ich benutzte AsmSpy, um zu überprüfen, ob ich die richtigen Versionen für jedes Projekt in der betroffenen Lösung verwendet habe. Ich habe die tatsächlichen Einträge in jeder Projektdatei doppelt geprüft - nichts half.

Schließlich stellte sich heraus, dass das Problem eine verschachtelte Abhängigkeit von einer der Referenzen war, die ich in einem Projekt hatte. Diese Referenz (A) benötigte wiederum eine andere Version von (B), die direkt von allen anderen Projekten in meiner Lösung referenziert wurde. Das Aktualisieren der Referenz im referenzierten Projekt löste es.

Solution A
+--Project A
   +--Reference A (version 1.1.0.0)
   +--Reference B
+--Project B
   +--Reference A (version 1.1.0.0)
   +--Reference B
   +--Reference C
+--Project C
   +--Reference X (this indirectly references Reference A, but with e.g. version 1.1.1.0)

Solution B
+--Project A
   +--Reference A (version 1.1.1.0)

Ich hoffe, das obige zeigt was ich meine, brauchte ein paar Stunden, um es herauszufinden, also hoffentlich wird auch jemand anderes davon profitieren.




Ich hatte das gleiche Problem und habe das Problem in der Datei web.config behoben.

Es passiert mir, weil ich die Anwendung mit Newtonsoft.Json 4.0 laufen lasse

Von:

<dependentAssembly>
  <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

Zu:

<dependentAssembly>
  <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>



Das hängt tatsächlich von Ihrer externen Komponente ab. Wenn Sie auf eine externe Komponente in einer .NET-Anwendung verweisen, wird eine GUID zum Identifizieren dieser Komponente generiert. Dieser Fehler tritt auf, wenn die externe Komponente, auf die von einem Ihrer Projekte verwiesen wird, denselben Namen und dieselbe Version wie eine andere Komponente in einer anderen Assembly hat.

Dies passiert manchmal, wenn Sie "Durchsuchen" verwenden, um Referenzen zu finden und die falsche Version der Assembly hinzuzufügen, oder wenn Sie eine andere Version der Komponente in Ihrem Code-Repository haben als die, die Sie auf dem lokalen Computer installiert haben.

Versuchen Sie herauszufinden, welche Projekte diese Konflikte haben, entfernen Sie die Komponenten aus der Referenzliste und fügen Sie sie erneut hinzu. Stellen Sie dabei sicher, dass Sie auf die gleiche Datei verweisen.




Hatte auch dieses Problem - in meinem Fall wurde es dadurch verursacht, dass die Eigenschaft "Spezifische Version" für eine Anzahl von Referenzen auf true gesetzt wurde. Wenn Sie diese Referenzen auf "false" setzen, wurde das Problem behoben.




Das ist mir auch passiert. Eine DLL wurde zweimal referenziert: einmal direkt (in Referenzen) und einmal indirekt (referenziert von einem anderen referenzierten Projekt). Ich entfernte direkte Referenz, säuberte u. Umgebaute Lösung. Problem gelöst.




Eine andere Sache zu prüfen und zu prüfen ist, stellen Sie sicher, dass Sie keinen Dienst ausgeführt haben, der diesen bin Ordner verwendet. wenn sie ist, stoppen Sie die Service- und Rebuild-Lösung