439 Stimmen

Behebung von MSB3247 - Gefundene Konflikte zwischen verschiedenen Versionen der gleichen abhängigen Assembly

Eine .NET 3.5 Lösung endete mit dieser Warnung beim Kompilieren mit msbuild.

Manchmal kann NDepend helfen, aber in diesem Fall gab es keine weiteren Details. Wie Bob Am Ende musste ich jede Baugruppe in ILDASM öffnen, bis ich diejenige fand, die eine ältere Version der abhängigen Baugruppe referenzierte.

Ich habe versucht, mit MSBUILD von VS 2010 Beta 2 (wie der Connect-Artikel darauf hinweist, dass dies in der nächsten Version der CLR behoben wurde), aber das hat nicht mehr Details entweder (vielleicht nach Beta 2 behoben) bieten

Gibt es einen besseren (automatisierten) Ansatz?

588voto

AMissico Punkte 21179

Ändern Sie die "MSBuild project build output verbosity" auf "Detailed" oder höher. Führen Sie dazu die folgenden Schritte aus:

  1. Rufen Sie den Dialog Optionen auf ( Werkzeuge -> Optionen... ).
  2. Wählen Sie in der linken Baumstruktur die Option Projekte und Lösungen Knoten und wählen Sie dann Bauen und Ausführen .
    • Hinweis: Wenn dieser Knoten nicht angezeigt wird, vergewissern Sie sich, dass das Kontrollkästchen am unteren Rand des Dialogs Alle Einstellungen anzeigen geprüft wird.
  3. Legen Sie auf der daraufhin angezeigten Seite Werkzeuge/Optionen die MSBuild-Projekt Build-Ausgabe Ausführlichkeit je nach Ihrer Version auf die entsprechende Einstellung:

  4. Erstellen Sie das Projekt und sehen Sie sich das Ausgabefenster an.

Überprüfen Sie die MSBuild-Meldungen. Die ResolveAssemblyReferences die Aufgabe, von der MSB3247 ausgeht, sollte Ihnen bei der Fehlersuche in diesem speziellen Fall helfen.

Mein spezieller Fall war ein falscher Verweis auf SqlServerCe. Siehe unten. Ich hatte zwei Projekte, die auf zwei verschiedene Versionen von SqlServerCe verwiesen. Ich ging zu dem Projekt mit der älteren Version, entfernte den Verweis und fügte dann den richtigen Verweis hinzu.

Target ResolveAssemblyReferences:
    Consider app.config remapping of assembly "System.Data.SqlServerCe, ..." 
        from Version "3.5.1.0" [H:\...\Debug\System.Data.SqlServerCe.dll] 
        to Version "9.0.242.0" [C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PublicAssemblies\System.Data.SqlServerCe.dll]
        to solve conflict and get rid of warning.
    C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets : 
        warning MSB3247: Found conflicts between different versions of the same dependent assembly.

Sie müssen nicht jede Baugruppe öffnen, um die Versionen der referenzierten Baugruppen zu ermitteln.

  • Sie können die Eigenschaften der einzelnen Verweise überprüfen.
  • Öffnen Sie die Projekteigenschaften und überprüfen Sie die Versionen im Abschnitt Referenzen.
  • Öffnen Sie die Projekte mit einem Texteditor.
  • Verwenden Sie .Net Reflector.

142voto

Noel Abrahams Punkte 7413

Mike Hadlow hat eine kleine Konsolenanwendung namens AsmSpy veröffentlicht in dem die Referenzen der einzelnen Baugruppen sehr schön aufgelistet sind:

Reference: System.Net.Http.Formatting
        4.0.0.0 by Shared.MessageStack
        4.0.0.0 by System.Web.Http

Reference: System.Net.Http
        2.0.0.0 by Shared.MessageStack
        2.0.0.0 by System.Net.Http.Formatting
        4.0.0.0 by System.Net.Http.WebRequest
        2.0.0.0 by System.Web.Http.Common
        2.0.0.0 by System.Web.Http
        2.0.0.0 by System.Web.Http.WebHost

Dies ist ein viel schnellerer Weg, der Warnung MSB3247 auf den Grund zu gehen, als sich auf die MSBuild-Ausgabe zu verlassen.

24voto

Jaider Punkte 13198

Manchmal ist die Antwort von @AMissico nicht genug. In meinem Fall konnte ich den Fehler im Ausgabefenster nicht finden, also beschloss ich, eine Protokolldatei zu erstellen und sie zu analysieren, indem ich die folgenden Schritte durchführte:

  1. Speichern des Build-Protokolls in einer Datei... https://msdn.microsoft.com/en-us/library/ms171470.aspx

    msbuild MyProject.proj /fl /flp:logfile=MyProjectOutput.log;verbosity=detailed

  2. Finden Sie den Text: warning MS... oder die spezifischen Warnhinweise: (z.B. Zeile 9293) Found conflicts between different versions... und die vollständige Angabe des Konfliktfehlers steht über dieser Meldung (z. B. Zeile 9277) There was a conflicts between... Find the error message

Visual Studio 2013

21voto

ErikHeemskerk Punkte 1546

Ich habe festgestellt, dass Sie (zumindest in Visual Studio 2010) die Ausführlichkeit der Ausgabe mindestens auf Detailliert einstellen müssen, um das Problem zu erkennen.

Es könnte sein, dass mein Problem ein Verweis war, der vorher ein GAC-Verweis war, aber das war nach der Neuinstallation meines Computers nicht mehr der Fall.

9voto

Carol Punkte 1716

Ich hatte den gleichen Fehler und konnte ihn mit den anderen Antworten nicht herausfinden. Ich fand, dass wir NuGet-Pakete "konsolidieren" können.

  1. Rechtsklick auf die Lösung
  2. Klicken Sie auf Nuget-Pakete verwalten
  3. Registerkarte konsolidieren und auf dieselbe Version aktualisieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X