Wenn ich meine Lösung mit mehreren Projekten bereinige und dann erstelle, meldet das Ausgabefenster, dass der Build erfolgreich war. Wenn ich jedoch das Fehlerlistenfenster ansehe , wird folgende Warnung angezeigt:
Es wurden Konflikte zwischen verschiedenen Versionen derselben abhängigen Assembly gefunden, die nicht gelöst werden konnten. Diese Referenzkonflikte werden im Erstellungsprotokoll aufgelistet, wenn die Protokollausführlichkeit auf detailliert eingestellt ist. C: \ Programme (x86) \ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets
Wenn ich auf diese Nachricht doppelklicke, wird die Datei C: \ Programme (x86) \ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets geöffnet, aber ich verstehe nichts darin.
Ich verwende Visual Studio Express 2013 für das Web.
Wie finde ich heraus, was falsch ist und mit welcher DLL und wie kann ich dann die Warnung aufheben?
quelle
Antworten:
eta: Es gibt einen Killerartikel über dieses Zeug von SOs eigenem @Nick Craver , den du lesen solltest
Während die anderen Antworten dies sagen, machen sie es nicht explizit, also werde ich ...
In VS2013.2 müssen Sie die Nachricht nicht lesen, um die Ausgabe der zitierten Informationen tatsächlich auszulösen. Diese lautet:
Dies ist falsch (oder zumindest für einige Versionen von Visual Studio - es scheint bei einem aktuellen VS2015-Update 3 oder höher in Ordnung zu sein). Schalten Sie es stattdessen auf Diagnose (unter Extras-> Optionen-> Projekt und Lösungen-> Erstellen und Ausführen , stellen Sie die Ausführlichkeit der Ausgabe des MSBuild-Projektbuilds ein ), woraufhin Meldungen angezeigt werden wie:
Dann
Ctrl-Alt-O
um zum Ausgabefenster zu wechseln... Und ja, für diejenigen, die sich die Details der [diagnostischen] Nachricht ansehen, war es eine
6.x
6.0.0.0
Neuigkeit für diesen Ignoranten, dass es in der Stadt eine Konvention gibt, nach der alle Versionen intern Assembly-Version sind , dh nur die SemVer Major-Komponente geht in die Assembly Version :)quelle
Führen Sie
msbuild Foo.sln /t:Rebuild /v:diag
(vonC:\Program Files (x86)\MSBuild\12.0\bin
) aus, um Ihre Lösung über die Befehlszeile zu erstellen und weitere Details abzurufen. Suchen Sie dann die Lösung, die.csproj.
die Warnung protokolliert, und überprüfen Sie die Referenzen und Referenzen anderer Projekte, die dieselbe allgemeine Assembly verwenden, die sich in der Version unterscheidet.Bearbeiten: Sie können die Build-Ausführlichkeit auch direkt in VS2013 festlegen. Gehen Sie zum Menü
Tools
>Options
und gehen Sie zuProjects and Solutions
und setzen Sie die Ausführlichkeit von MSBuild aufDiagnostic
.Edit: Wenige Klarstellungen, da ich selbst gerade eine bekommen habe. In meinem Fall war die Warnung darauf zurückzuführen, dass ich mithilfe der Resharper-Eingabeaufforderung eine Referenz hinzugefügt habe, im Gegensatz zum Dialogfeld "Referenz hinzufügen", das versionlos war, obwohl sowohl Version 4 als auch Version 12 zur Auswahl stehen.
vs.
Im MSBuild-Protokoll mit
/v:diag
Ausführlichkeit sah es wie folgt aus. Angabe von Details, bei denen zwei Referenzen in Konflikt standen:quelle
msbuild "Foo.sln" /t:Rebuild /v:d > build.log
/l:FileLogger,Microsoft.Build.Engine;logfile=build.log
- beachten Sie die Schalter für Logger Erklärung hierIch kann die weitere Antwort von Ruben nur mit einem Vergleich zwischen den beiden angezeigten Nachrichten unterstützen:
und die Nachricht:
Also, Ruben hat recht - das ist einfach nicht wahr. Es gibt keinerlei Konflikte, nur eine fehlende Baugruppe. Dies ist besonders langweilig, wenn es sich bei dem Projekt um eine ASP.NET-Anwendung handelt, da die Ansichten bei Bedarf kompiliert werden, dh kurz vor der ersten Anzeige. In diesem Fall muss die Baugruppe verfügbar sein. (Es gibt eine Option zum Vorkompilieren der Ansichten zusammen mit dem Rest des Codes, aber dies ist eine andere Geschichte .) Wenn Sie andererseits die Ausführlichkeit auf Diagnose setzen, erhalten Sie die folgende Ausgabe:
Als Ergebnis müssen Sie entweder:
Mehr zur NuGet Galerie hier . Weitere Informationen zum Vorkompilieren von ASP.NET-Ansichten finden Sie hier .
quelle
Das Ändern der Build-Ausführlichkeit in Visual Studio hilft dabei, in die richtige Richtung zu weisen. Führen Sie die folgenden Schritte aus, um die Ausführlichkeit in VS zu ändern
Quiet
,Minimal
,Normal
,Detailed
undDiagnostic
Überprüfen Sie das Ausgabefenster ( Ctrl+ Alt+ O) in VS, um die Änderungen im Erstellungsprotokoll anzuzeigen.
quelle
Sie müssen wahrscheinlich Ihre NuGet-Pakete neu installieren oder aktualisieren, um dies zu beheben.
quelle
Manage NuGet packages for solution
-> Unter könnenConsolidate
Sie sehen, ob verschiedene Versionen desselben Pakets installiert wurdenWiederholen eines der Kommentare von @elshev Klicken Sie mit der rechten Maustaste auf die Lösung -> NuGet-Pakete für Lösung verwalten -> Unter Konsolidieren können Sie sehen, ob verschiedene Versionen desselben Pakets installiert wurden. Aktualisieren Sie die Pakete dort. Der Konfliktfehler ist behoben.
quelle
Ich verwende Visual Studio 2017 und bin darauf gestoßen, als ich einige Nuget-Pakete aktualisiert habe. Was für mich funktionierte, war, meine
web.config
Datei zu öffnen , den<runtime><assemblyBinding>
Knoten zu finden und ihn zu löschen. Speichern Sieweb.config
das Projekt und erstellen Sie es neu.Schau dir das
Error List
Fenster an. Sie werden sehen, wie eine massiv lange Warnung vor verbindlichen Konflikten aussieht. Doppelklicken Sie darauf und der<runtime><assemblyBinding>
Block wird automatisch mit den richtigen Zuordnungen neu erstellt.quelle
Wie in Dotnet CLI-Problem 6583 angegeben , sollte das Problem mit einem
dotnet nuget locals --clear all
Befehl behoben werden .quelle
Ich könnte diese Installation von Newtonsoft Json im Webprojekt mit Nugget-Paketen lösen
quelle
Offensichtlich gibt es viele verschiedene Ursachen und damit viele Lösungen für dieses Problem. Um meine in den Mix zu integrieren, haben wir eine Assembly (System.Net.Http), auf die zuvor in unserem Webprojekt direkt verwiesen wurde, auf eine von NuGet verwaltete Version aktualisiert. Dadurch wurde die direkte Referenz innerhalb dieses Projekts entfernt, aber unser Testprojekt enthielt immer noch die direkte Referenz. Durch das Aktualisieren beider Projekte zur Verwendung der von NuGet verwalteten Assembly wurde das Problem behoben.
quelle
Wenn Sie Änderungen an Paketen vorgenommen haben, öffnen Sie die SLN erneut. Das hat bei mir funktioniert!
quelle
Ich habe festgestellt, dass manchmal Nuget-Pakete installiert werden (was ich vermute). Erforderliche .NET Core-Komponenten oder andere Elemente, die mit dem bereits installierten Framework in Konflikt stehen. Meine Lösung bestand darin, die Projektdatei (.csproj) zu öffnen und diese Referenzen zu entfernen. Beispielsweise werden System.IO, System.Threading und dergleichen normalerweise hinzugefügt, wenn Microsoft.Bcl über ein kürzlich installiertes NuGet-Paket enthalten ist. Es gibt keinen Grund für bestimmte Versionen in meinen Projekten, daher entferne ich die Referenzen und die Projekterstellung. Ich hoffe, das hilft.
Sie können Ihre Projektdatei nach "Referenz" durchsuchen und die Konflikte beseitigen. Wenn sie in System enthalten sind, entfernen Sie sie, und der Build sollte funktionieren. Dies beantwortet möglicherweise nicht alle Fälle dieses Problems - ich stelle sicher, dass Sie wissen, was bei mir funktioniert hat :)
Beispiel für das, was ich auskommentiert habe:
quelle
Ich folgte dem Rat einiger der Antworten hier, um herauszufinden, was falsch war, aber keine der Antworten schien zu erklären, wie man das Problem behebt. Mein Problem war, dass für eine Referenz eine andere Version einer zweiten Referenz erforderlich war. Newtonsoft war also in Version 6, aber eine andere DLL wollte 4.5. Dann habe ich Newtonsoft aktualisiert, wie eine der anderen Antworten vorschlug, und das machte die Sache noch schlimmer.
Also habe ich meine Newtonsoft-Installation tatsächlich herabgestuft und die Warnung ging weg (VS 2017):
Klicken Sie im Lösungs-Explorer mit der rechten Maustaste auf Referenzen, und wählen Sie NuGet-Pakete verwalten aus. Suchen Sie auf der Registerkarte "Installiert" nach Newtonsoft (oder was auch immer Ihr Konflikt ist). Auf der rechten Seite wird neben "Version" ein Dropdown-Menü angezeigt, das Sie auf "Älter" ändern können Versionen. Mir war nicht klar, dass dieses Dropdown zum Downgrade verwendet werden kann.
quelle
Sie können die Dotnet-CLI mit vollständiger diagnostischer Ausführlichkeit ausführen, um das Problem zu finden.
dotnet run --verbosity diagnostic >> full_build.log
Sobald der Build abgeschlossen ist, können Sie die Protokolldatei (full_build.log) nach dem Fehler durchsuchen. Wenn Sie beispielsweise nach "einem Konflikt" suchen, sollten Sie direkt zum Problem gelangen.
quelle
Ich habe Microsoft ASP.NET MVC nuget.org von NuGet Packagaes verwaltet und erneut installiert. Während der Neuinstallation wurden alle Konflikte im Zusammenhang mit der Rasiermesserversion behoben. Versuch es .
quelle
Ich habe die Ausführlichkeit von MSBuild in Diagnostic geändert, konnte aber nicht finden, wo das Problem lag. Entsprechend den obigen Antworten hatte ich diesen Code in app.config:
Also habe ich gerade das erste System, Version von 4.0.0.0 auf 12.0.0.0 geändert und mein Projekt hat funktioniert.
quelle
Stellen Sie gemäß den anderen Antworten die Ausgabeprotokollierungsstufe auf detailliert ein und suchen Sie dort nach Konflikten, die Ihnen sagen, wo Sie als Nächstes suchen müssen.
In meinem Fall schickte es mich in ein paar Richtungen auf die Suche nach der Quelle der Referenzen, aber am Ende stellte sich heraus, dass das Problem eines meiner tragbaren Klassenbibliotheksprojekte war, es zielte auf die falsche Version ab und zog seine eigene Version der Referenzen in, daher die Konflikte. Ein schnelles Re-Targeting und das Problem wurde gelöst.
quelle
Ich bin gerade auf dieses und das Problem gestoßen, nachdem ich ein Paket von Nuget auf lokal referenzierte DLLs umgestellt hatte. Das Problem war altes Laufzeitbindungsmaterial in
app.config
.quelle
Ich hatte diese Warnung nach der Migration zur Paketreferenz. In der Diagnoseausgabe gab es Informationen, dass die Bibliothek von derselben Bibliothek selbst referenziert wurde. Möglicherweise liegt ein Fehler in der neuen Paketreferenz vor. Die Lösung bestand darin, AutoGenerateBindingRedirects zu aktivieren und die benutzerdefinierte Bindungsumleitung zu löschen.
quelle
VS 2017, MVC-Projekt
Ich weiß nicht warum, aber für mich bestand die Lösung für dieses Problem darin, einen
out
Parameter aus einer Modellmethoden-Signatur zu entfernen , die von der Controller-Aktionsmethode aufgerufen wurde. Das ist ein sehr seltsames Verhalten, aber das war die Lösung für mein Problem.quelle
Lauf
Update-Package
Befehl über die Package Manager-Konsole ausDadurch wird MSB3277 behoben. Dadurch werden alle Pakete und alle zugehörigen Assemblys, mit denen sie geliefert werden, auf die höchstmögliche Version neu installiert . Es ist auch möglich, nur ein bestimmtes Paket zu aktualisieren. Oder Downgrade nach dem Update, falls gewünscht, dieses Problem wurde für mich einige Male behoben. Je nachdem, wie viele Nuget-Pakete Sie haben, kann dieser Vorgang einige Minuten dauern.
Weitere Informationen zu offiziellen Dokumenten finden Sie unter https://docs.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages
quelle