Warnung:Gefunden Konflikte zwischen verschiedenen Versionen derselben abhängigen assembly

StackOverflow https://stackoverflow.com/questions/17806

  •  09-06-2019
  •  | 
  •  

Frage

Ich bin derzeit an der Entwicklung einer .NET-Anwendung, die besteht aus 20 Projekten.Einige dieser Projekte sind, zusammengestellt verwenden .NET 3.5, einige andere noch .NET 2.0-Projekte (bisher kein problem).

Das problem ist, dass, wenn ich auch eine externe Komponente, bekomme ich immer folgende Warnung:

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

Was genau bedeutet diese Warnung zu bedeuten und gibt es vielleicht eine Möglichkeit ausschließen, die diese Warnung (wie die Verwendung von #pragma disable in die source - code-Dateien)?

War es hilfreich?

Lösung

Diese Warnung bedeutet, dass zwei Projekte, die auf die gleiche Montage (z.B. System.Windows.Forms), aber die beiden Projekte erfordern unterschiedliche Versionen.Sie haben ein paar Optionen:

  1. Kompilieren Sie alle Projekte verwenden die gleichen Versionen (z.B.verschieben Sie alle zu .Net 3.5).Dies ist die bevorzugte option, da der gesamte code ausgeführt wird, mit den Versionen von Abhängigkeiten waren Sie zusammengestellt.

  2. Fügen Sie ein bindungsumleitung.Dies unterdrückt die Warnung.Jedoch, Ihre .Net 2.0-Projekte wird (zur Laufzeit) gebunden werden .Net 3.5-Versionen der abhängigen Assemblys wie System.Windows.Forms.Sie können schnell eine Bindung umleiten, indem Sie doppelt auf Fehler in Visual Studio.

  3. Verwenden CopyLocal=true.Ich bin mir nicht sicher, ob dies unterdrückt die Warnung.Es wird, wie bei option 2 oben, bedeutet, dass für alle Projekte verwenden .Net 3.5-version des Systems.Windows.Formen.

Hier sind ein paar Möglichkeiten, um zu identifizieren, die problematische Referenz(en):

  • Sie können verwenden Sie ein Dienstprogramm wie die gefunden auf https://gist.github.com/1553265
  • Eine weitere einfache Methode ist, um zu Bauen output verbosity (Extras, Optionen, Projekte und Lösungen, Bauen und Führen Sie MSBuild project build output verbosity, Detailliert) und nach Gebäude, durchsuchen Sie die Ausgabe-Fenster für die Warnung, und der Blick auf die text einfach von oben. (Hut Tipp zu pauloya wer schlug vor, dass diese in der Kommentare auf diese Antwort).

Andere Tipps

Grundsätzlich geschieht dies, wenn die Assemblys Sie verweisen, müssen Sie "Copy Local" auf "True" gesetzt, was bedeutet, dass eine Kopie der DLL-Datei ist platziert in der bin-Ordner mit der exe-Datei.

Seit Visual Studio kopieren Sie die Abhängigkeiten der eine referenzierte assembly, es ist möglich, zwei verschiedene Versionen der gleichen assembly bezeichnet.Dies ist eher passieren, wenn Sie Ihre Projekte in separate Lösungen, und können daher getrennt kompiliert werden.

Die Art und Weise, die ich bekommen habe um es zu setzen Lokale Kopie auf False für Referenzen in der Montage-Projekte.Nur für ausführbare Dateien/web-Anwendungen, wo Sie brauchen die Montage der fertigen Produkt zu führen.

Hoffe das macht Sinn!

Ich wollte nach pauloya die Lösung in die Kommentare oben.Ich glaube, es ist die beste Lösung für die Suche nach der säumige Referenzen.

Der einfachste Weg, um herauszufinden, was sind die "beleidigende reference(s)" ist set Build output verbosity (Extras, Optionen, Projekte und Lösungen, Erstellen Sie und Führen Sie MSBuild project build output verbosity, Detailliert) und nach dem erstellen, suchen Sie die Ausgabe-Fenster für die Warnung.Siehe text einfach von oben zu.

Zum Beispiel, wenn Sie suchen das Bedienfeld "Ausgabe" für "Konflikt" finden Sie vielleicht so etwas wie dieses:

3>  There was a conflict between "EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" and "EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".
3>      "EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" was chosen because it was primary and "EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" was not.

Wie Sie sehen können, gibt es einen Konflikt zwischen EF-Versionen 5 und 6.

Ich hatte das gleiche problem mit einem meiner Projekte, aber keines der oben geholfen, zu lösen die Warnung.Ich habe in der detaillierten build-logfile, das ich verwendet AsmSpy, um zu überprüfen, dass ich die richtigen Versionen für jedes Projekt die betroffene Lösung, die ich doppelt überprüft die aktuellen Einträge in den einzelnen Projekt-Datei - nichts half.

Schließlich stellte sich heraus, dass das problem war eine verschachtelte Abhängigkeit von einem der Verweise ich hatte in einem Projekt.Diese Referenz (A) wiederum erforderlich, eine andere version (B) welche verwiesen wurde direkt von allen anderen Projekten in meiner Lösung.Aktualisierung der Referenz im Projekt verwiesen wird gelöst.

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, dass das obige Bild zeigt, was ich meine, nahmen meine vor ein paar Stunden, um herauszufinden, so dass hoffentlich jemand anderes profitieren.

Auf Visual Studio, wenn Sie mit der rechten klicken Sie auf den Lösung und Nuget-Pakete verwalten es gibt eine "Konsolidieren" Register setzt alle die Pakete an die gleiche version.

Ich hatte gerade diese Warnmeldung gereinigt und die Lösung und neu kompiliert werden (Build -> Clean-Lösung) und es ging Weg.

Ich hatte das gleiche Problem und ich gelöst, indem Sie Folgendes in die web.config.

Es ist mir passiert, weil ich bin, läuft die Anwendung mit Newtonsoft.Json 4.0

Aus:

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

Dies hängt tatsächlich davon ab, Ihre externe Komponente.Wenn Sie auf eine externe Komponente ein .NET-Anwendung, die es generiert eine GUID zur Identifizierung der Komponente.Dieser Fehler tritt auf, wenn die externe Komponente verwiesen wird, indem Sie einem Ihrer Projekte mit dem gleichen Namen und doch unterschiedlichen-version als eine Komponente in einer anderen Baugruppe.

Dies geschieht manchmal, wenn Sie "Durchsuchen" verwenden, um Hinweise und fügen Sie die falsche version der Baugruppe, oder haben Sie eine andere version der Komponente im code-repository wie die, die Sie installiert auf dem lokalen Computer.

Versuchen, zu finden welche Projekte haben diese Konflikte, entfernen Sie die Komponenten aus der reference-Liste, fügen Sie Sie wieder zu machen sicher, dass Sie zeigen auf die gleiche Datei.

Ich habe einen anderen Weg, dies zu tun, wenn Sie Nuget zum verwalten Ihrer Abhängigkeiten.Ich habe entdeckt, dass manchmal VS und Nuget nicht übereinstimmen und Nuget nicht in der Lage ist zu erkennen, dass Ihre Projekte nicht synchron sind.Die Pakete.config wird sagen eine Sache, aber der Pfad angezeigt, in der Referenzen - Eigenschaften deuten auf etwas anderes.

Wenn Sie bereit sind, aktualisieren Sie Ihre Abhängigkeiten, tun die folgenden:

  1. Von Projektmappen-Explorer mit der rechten Maustaste auf das Projekt und klicken Sie auf " Verwalten Nuget-Pakete'

  2. Wählen Sie "Installierte Pakete" - Reiter im linken Fensterbereich mit der Aufzeichnung Ihrer installierten Pakete können Sie kopieren möchten Ihre Pakete.config, um Ihre desktop zuerst, wenn Sie haben eine Menge, so können Sie cross-check mit Google, um zu sehen, welche Nuget-Pakete installiert sind

  3. Deinstallieren Sie Ihre Pakete.OK, gehen wir zu fügen Sie Sie gleich wieder.

  4. Sofort installieren Sie die Pakete, die Sie benötigen.Was Nuget tun wird, ist nicht nur erhalten Sie die neueste version, aber wird ändern Ihre Referenzen, und auch die Bindung Umleitungen für Sie.

  5. Tun Sie dies für alle Ihre Projekte.

  6. Bei der Lösung level, Sauber und neu erstellen.

Möchten Sie vielleicht beginnen mit der unteren Projekte und arbeiten Sie Ihren Weg auf die höhere Ebene und bauen jedem Projekt, wie Sie entlang gehen.

Wenn Sie nicht aktualisieren möchten, Ihren Abhängigkeiten, dann können Sie die Paket-manager-Konsole, und verwenden Sie die syntax Update-Package -ProjectName [yourProjectName] [packageName] -Version [versionNumber]

=> überprüfen, wird eine Instanz der Anwendung installiert ist, teilweise.

=> zunächst alle deinstallieren Sie die Instanz von Anwendung deinstallieren.

=> dann sauber neu aufbauen und versuchen zu implementieren.

dies löste mein Problem.hoffe es hilft Euch auch.Beste Grüße.

Hatte auch dieses problem - in meinem Fall war es dadurch verursacht, dass die "Version" - Eigenschaft auf eine Zahl von Referenzen auf true gesetzt.Ändern Sie diese Eigenschaft auf false auf diese Verweise, ist das Problem behoben.

So ging es mir auch.Eine dll, auf die verwiesen wurde zweimal:einmal direkt (Verweise) und einmal indirekt (verwiesen wird, die von einem anderen Projekt verwiesen wird).Ich entfernte die direkte Referenz, gereinigt und Generalüberholt Lösung.Problem behoben.

  1. Öffnen Sie "Projektmappen-Explorer".
  2. Klicken Sie auf "alle Dateien Anzeigen"
  3. Erweitern Sie "Verweise"
  4. Sie werden sehen, einem (oder mehreren) Referenz(en) mit leicht anderes Symbol als der rest.In der Regel ist es mit gelber Kasten schlage vor, Sie nehmen eine Anmerkung es.Entfernen Sie es einfach.
  5. Fügen Sie die Referenz zurück und kompilieren Sie Ihren code.
  6. Das ist alles.

In meinem Fall gab es ein problem mit der MySQL-Referenz.Irgendwie konnte ich Liste drei Versionen, die unter der Liste aller verfügbaren Referenzen;für .net 2.0, .net 4.0 und .net 4.5.Ich folgte Prozess 1 bis 6 oben, und es funktionierte für mich.

Eine andere Sache zu prüfen und zu überprüfen ist, stellen Sie sicher, dass Sie nicht alle service ausgeführt, die Verwendung, die Ordner "bin".wenn Ihr den Dienst zu beenden und neu aufzubauen Lösung

Es scheint ein problem auf dem Mac Visual Studio bei der Bearbeitung .resx-Dateien.Ich weiß wirklich nicht, was passiert ist, aber ich habe dieses problem, sobald ich Sie bearbeitet .resx-Dateien auf meinem Mac.Ich öffnete das Projekt auf Windows, öffnete die Dateien, und Sie waren, als ob Sie noch nicht bearbeitet wurden.Also bearbeitete ich Sie, gespeichert und alles wieder angefangen zu arbeiten auf einem Mac zu.

Ich hatte dieses Problem bei meinem Projekt hatte Bezug zu NETStandardLibrary und eine der referenzierten Assemblys veröffentlicht wurde, für netcore.Gerade veröffentlicht es als netstandard und problem war Weg

Wenn NuGet alles was ich tun musste, war:

  1. rechts klicken Sie auf Projekt, und klicken Sie auf " NuGet-Pakete Verwalten..

  2. klicken Sie auf das ZAHNRAD im oberen rechten

  3. klicken Sie auf Registerkarte "allgemein" im NuGet-Paket-Manager vor Paket-Quellen

  4. überprüfen Sie "Überspringen der Anwendung verbindlich leitet" in der Bindung Umleitungen

  5. Reinigen und neu erstellen, und die Warnung ist Weg

Easy peasy

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top