Eine .NET 3.5-Lösung hat diese Warnung beim Kompilieren mit msbuild erhalten.
Manchmal könnte NDepend helfen, aber in diesem Fall gab es keine weiteren Details. Wie Bob musste ich schließlich jede Assembly in ILDASM öffnen, bis ich die fand, die auf eine ältere Version der abhängigen Assembly verweist.
Ich habe versucht, MSBUILD aus VS 2010 Beta 2 zu verwenden (wie im Connect-Artikel angegeben, wurde dies in der nächsten Version der CLR behoben), aber das lieferte auch keine weiteren Details (möglicherweise nach Beta 2 behoben).
Gibt es einen besseren (automatisierteren) Ansatz?
Antworten:
Ändern Sie die Ausführlichkeit der Ausgabe des MSBuild-Projektbuilds in "Detailliert" oder höher. Gehen Sie dazu folgendermaßen vor:
Stellen Sie auf der angezeigten Seite Tools / Optionen die Ausführlichkeitsstufe für die Ausgabe der MSBuild-Projekterstellung abhängig von Ihrer Version auf die entsprechende Einstellung ein:
Überprüfen Sie die MSBuild-Nachrichten. Die
ResolveAssemblyReferences
Aufgabe, von der MSB3247 stammt, soll Ihnen beim Debuggen dieses speziellen Problems helfen.Mein spezieller Fall war ein falscher Verweis auf SqlServerCe. Siehe unten. Ich hatte zwei Projekte, die auf zwei verschiedene Versionen von SqlServerCe verweisen. Ich ging mit der älteren Version zum Projekt, entfernte die Referenz und fügte dann die richtige Referenz hinzu.
Sie müssen nicht jede Assembly öffnen, um die Versionen der Assemblys zu ermitteln, auf die verwiesen wird.
quelle
Mike Hadlow hat eine kleine Konsolen-App namens AsmSpy veröffentlicht , in der die Referenzen der einzelnen Assemblys ziemlich gut aufgelistet sind:
Dies ist ein viel schnellerer Weg, um der Warnung MSB3247 auf den Grund zu gehen, als von der MSBuild-Ausgabe abhängig zu sein.
quelle
Manchmal reicht die Antwort von @AMissico nicht aus. In meinem Fall konnte ich den Fehler in den Ausgabefenstern nicht finden. Daher habe ich beschlossen, eine Protokolldatei zu erstellen und diese zu analysieren, indem ich die folgenden Schritte ausführte:
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
Suchen Sie den Text:
warning MS...
oder die spezifischen Warninformationen: (z. B. Zeile 9293)Found conflicts between different versions...
und das vollständige Detail des Konfliktfehlers befindet sich über dieser Nachricht (z. B. Zeile 9277).There was a conflicts between...
Visual Studio 2013
quelle
Ich habe festgestellt, dass Sie (zumindest in Visual Studio 2010) die Ausführlichkeit der Ausgabe auf mindestens Detailliert setzen müssen, um das Problem erkennen zu können.
Möglicherweise war mein Problem eine Referenz, die zuvor eine GAC-Referenz war, aber nach der Neuinstallation meines Computers war dies nicht mehr der Fall.
quelle
Ich hatte den gleichen Fehler und konnte ihn mit den anderen Antworten nicht herausfinden. Ich habe festgestellt, dass wir NuGet-Pakete "konsolidieren" können.
quelle
Diese Warnung, die für die Standard-Betaversion von ASP.NET MVC 4 generiert wurde, finden Sie hier
quelle
Verwenden Sie einen Abhängigkeitsleser
Mit dep.exe können Sie alle verschachtelten Abhängigkeiten eines gesamten Ordners auflisten . In Kombination mit Unix-Tools wie grep oder awk können Sie Ihr Problem lösen
Suchen von Assemblys, auf die in mehr als einer Version verwiesen wird
Diese obskure Befehlszeile führt dep.exe aus und leitet die Ausgabe dann zweimal an awk weiter
Verstehen, wie diese Baugruppe in Ihren Papierkorb gezogen wurde
In diesem Beispiel zeigt Ihnen das Tool, dass System.Web.Http 5.2.3 von Ihrer Abhängigkeit zu FooLib stammt, während die Version 4.0.0 von BarLib stammt.
Dann haben Sie die Wahl zwischen
Wie man diese Sache in Windows ausführt
Wenn Sie nicht über einen Unix - Shell - Typen haben müssen eine herunterladen , bevor die Lage zu laufen
awk
undgrep
. Versuchen Sie eine der folgenden Möglichkeitenquelle
Ich hatte auch dieses Problem und benutzte AMissicos Rat, um das Problem zu entdecken (obwohl ich die Ausführlichkeitsstufe auf Detailliert setzen musste.
Das Problem war jedoch ziemlich einfach, nachdem der Täter gefunden worden war.
Hintergrund: Ich habe mein Projekt von VS2008 auf VS2010 aktualisiert. In VS2008 war das Ziel-Framework 3.5 und als ich es in VS2010 brachte, habe ich es auf 4 (Voll) umgestellt. Ich habe auch einige Komponenten von Drittanbietern aktualisiert, einschließlich Crystal Reports.
Es stellte sich heraus, dass die meisten Systemreferenzen auf Version 4.0.0.0 verweisen, einige jedoch nicht automatisch geändert wurden (System und System.Web.Services) und sich weiterhin mit 2.0.0.0 befassten. Crystal Reports verweist auf 4.0.0.0, und hier traten die Konflikte auf. Setzen Sie einfach den Cursor auf die erste Systembibliothek im Lösungs-Explorer, bewegen Sie den Cursor in der Liste nach unten und suchen Sie nach Verweisen auf 2.0.0.0. Entfernen Sie die neuere Version 4.0.0.0 und fügen Sie sie erneut hinzu.
Das Seltsame war, dass die meisten Referenzen korrekt aktualisiert wurden und ohne Crystal-Berichte hätte ich es wahrscheinlich nie bemerkt ...
quelle
Ich habe eine Anwendung basierend auf der Anwendung von Mike Hadlow gemacht: AsmSpy .
Meine App ist eine WPF-App mit GUI und kann von meinem Heim-Webserver heruntergeladen werden: AsmSpyPlus.exe .
Code ist verfügbar unter: GitHub
quelle
Wie hier erwähnt , müssen Sie die nicht verwendeten Referenzen entfernen, und die Warnungen werden gelöscht.
quelle
ASP.NET Build Manager erstellt die Website, indem die Ordner alphabetisch durchsucht werden. Für jeden Ordner werden die Abhängigkeiten ermittelt und zuerst die Abhängigkeiten und dann der ausgewählte Ordner erstellt.
In diesem Fall wird der problematische Ordner ~ / Controls ausgewählt, um zu Beginn erstellt zu werden. Aus einem noch unbekannten Grund werden einige der Steuerelemente dort als separate Assembly erstellt, anstatt in derselben Assembly wie andere Steuerelemente (scheint dies zu tun) mit der Tatsache verbunden sein, dass einige Steuerelemente von anderen Steuerelementen im selben Ordner abhängig sind).
Dann ist der nächste Ordner, der erstellt wird (~ / File-Center / Control), abhängig vom Stammordner ~ /, der von ~ / Controls abhängig ist, sodass der Ordner ~ / Controls nur dieses Mal neu erstellt wird, wenn die Steuerelemente getrennt wurden zu ihrer eigenen Assembly werden jetzt mit derselben Assembly wie andere Steuerelemente verbunden, wobei auf die getrennte Assembly noch verwiesen wird.
Zu diesem Zeitpunkt haben 2 Assemblys (zumindest) dieselben Steuerelemente und der Build schlägt fehl.
Obwohl wir immer noch nicht wissen, warum dies passiert ist, konnten wir es umgehen, indem wir den Namen des Controls-Ordners in ZControls änderten. Auf diese Weise wird er nicht vor ~ / File-Center / Control erstellt, sondern erst nach und auf diese Weise so wie es sollte.
quelle
Schnelle Lösung:
Klicken Sie mit der rechten Maustaste auf Lösung -> NuGet-Pakete für Lösung verwalten -> Unter Konsolidieren können Sie sehen, ob verschiedene Versionen desselben Pakets installiert wurden. Deinstallieren Sie verschiedene Versionen und installieren Sie die neueste.
quelle
Manchmal reicht
AutoGenerateBindingRedirects
es nicht (auch nicht mitGenerateBindingRedirectsOutputType
). Das Suchen nach allenThere was a conflict
Einträgen und das manuelle Korrigieren nacheinander kann mühsam sein. Deshalb habe ich einen kleinen Code geschrieben, der die Protokollausgabe analysiert und für Sie generiert (Dumps tostdout
):Tipp: Verwenden Sie MSBuild Binary und Structured Log Viewer und generieren Sie nur verbindliche Weiterleitungen für die Konflikte in dem Projekt, das die Warnung ausgibt (dh nur nach diesen
there was a conflict
Zeilen in die Eingabetextdatei für den obigen Code [AssemblyConflicts.txt
]).quelle
Ein einfachster Weg ohne Berücksichtigung (interner) Abhängigkeiten:
In meinem Fall gab es ein Problem mit der MySQL-Referenz. Irgendwie könnte ich drei Versionen davon unter der Liste aller verfügbaren Referenzen auflisten. Ich habe die obigen Prozesse 1 bis 6 befolgt und es hat bei mir funktioniert.
quelle
Visual Studio für Mac Community-Ergänzung:
Da für die Antwort von AMissico die Protokollstufe geändert werden muss und weder ASMSpy noch ASMSpyPlus als plattformübergreifende Lösung verfügbar sind, finden Sie hier eine kurze Ergänzung für Visual Studio für Mac:
Es befindet sich in der Visual Studio-Community → Einstellungen ... → Projekte → Protokoll erstellen → Ausführlichkeit
quelle
Wenn Sie einen Resharper haben, entfernen Sie alle nicht verwendeten Verweise auf Ihrer Lösung.
quelle