asp.net-mvc für - Wie kann ich nach der Aktualisierung von NuGet-Paketverweisen in einem neuen ASP.NET MVC 5-Projekt Konflikte in der Assemblyversion mit JSON.NET beheben?




länge meta (8)

Ich habe ein neues ASP.NET MVC 5-Webprojekt in VS 2013 (Update 1) erstellt und anschließend alle NuGet-Pakete aktualisiert. Wenn ich das Projekt erstelle, erhalte ich folgende Warnung:

warning MSB3243: Es konnte keine Konfliktlösung zwischen "Newtonsoft.Json, Version = 6.0.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed" und "Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed" gefunden werden.

Wenn ich jedoch die web.config überprüfe, sehe ich, dass eine verbindliche Umleitung vorhanden ist:

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

Welches ist genau das, was die Warnung rät.

Wie kann ich diese Warnung beheben?


Answers

Ich hatte dieses Problem, weil ich Pakete aktualisiert habe, die Microsoft.AspNet.WebApi enthielten, das einen Verweis auf Newtonsoft.Json 4.5.6 hat, und ich hatte bereits Version 6 installiert. Es war nicht klug genug, die Version 6 zu verwenden.

Um es zu lösen, habe ich nach dem WebApi-Update den Befehl Extras> NuGet-Paket-Manager> Pacakge Manager-Konsole geöffnet und ausgeführt:

 Update-Package Newtonsoft.Json

Das Protokoll zeigte, dass die Versionen 6.0.x und 4.5.6 alle auf den neuesten Stand gebracht wurden und alles in Ordnung war.

Ich habe das Gefühl, das wird wieder aufkommen.


Denken Sie daran, dass mit der verbindlichen Umleitung

alteVersion = "0.0.0.0-6.0.0.0"

Sie sagen, dass die alten Versionen der DLL zwischen Version 0.0.0.0 und Version 6.0.0.0 sind.


Ich hatte ähnliches Problem und wollte nur eine Antwort für andere in meiner Situation veröffentlichen.

Ich habe eine Lösung, die eine ASP.NET-Webanwendung mit mehreren anderen C # -Klasse-Lib-Projekten ausführt.

Meine ASP.NET-Webanwendung verwendete json nicht, aber andere Projekte, in denen.

So habe ich es behoben:

  1. Ich habe sichergestellt, dass alle Projekte, die die neueste Version (6) verwenden, NuGet Update für alle Projekte verwenden, die derzeit eine beliebige Version von json verwenden - dies behebt das Problem nicht
  2. Ich habe Json mit NuGet zur Webanwendung hinzugefügt - das Problem wurde behoben (lass mich in den Grund gehen):

In Schritt 2 wurde zuerst eine Konfigurationsinformation für json hinzugefügt, die darauf hinweist, dass alle Projekte die neueste Version (6) verwenden, egal welche Version sie haben. Das Hinzufügen der Baugruppenbindung zu Web.Config ist höchstwahrscheinlich das Update.

Schritt 2 räumte jedoch auch älteren Code auf. Es stellte sich heraus, dass wir zuvor eine alte Version (5) von json in unserer Webanwendung verwendet hatten und die NuGet-Ordner nicht gelöscht wurden, als die Referenz (ich vermute: manuell) entfernt wurde. Durch das Hinzufügen des neuesten json (6) wurden die alten Ordner (json v5) entfernt. Dies könnte auch Teil des Fixes sein.


Die endgültige Lösung für Ihre Baugruppenumleitungsfehler

Okay, hoffentlich hilft das, alle (vernünftigen) Assemblierungsreferenzdiskrepanzen aufzulösen ...

  1. Überprüfen Sie den Fehler.

  1. Überprüfen Sie web.config nach der Assembly-Umleitung. Erstellen Sie eine, wenn sie nicht existiert.

  1. Klicken Sie mit der rechten Maustaste auf den Verweis für die Baugruppe, und wählen Sie Eigenschaften.

  1. Überprüfen Sie die Version (nicht Runtime-Version) in der Tabelle Eigenschaften. Kopiere das.

  1. Fügen Sie das newVersion-Attribut ein.

  1. Ändere den letzten Teil der alten Version aus Gründen der Zweckmäßigkeit in etwas Hohes, Rundes und Imaginäres.

Jubeln.


Hier die Schritte, die ich verwendet habe, um die Warnung zu beheben:

  • Projekt in VS entladen
  • Bearbeiten Sie die .csproj-Datei
  • Suchen Sie nach allen Verweisen auf Newtonsoft.Json Assembly
    • Gefunden zwei, eins bis v6 und eins bis v5
    • Ersetzen Sie den Verweis auf v5 durch v6
  • Projekt neu laden
  • Erstellen und beachten Sie den Fehler bei der Baugruppenreferenz
  • Zeigen Sie Verweise an und sehen Sie, dass es jetzt zwei zu Newtonsoft.Json gibt. Entfernen Sie das Problem, das nicht aufgelöst werden kann.
  • Rebuild - keine Warnungen

Ich habe mein Paket aktualisiert und es sogar neu installiert - aber ich bekam immer noch genau den gleichen Fehler wie das erwähnte OP. Ich habe die referenzierte DLL manuell bearbeitet, indem ich Folgendes getan habe.

Ich entfernte die Newtonsoft.json.dll aus meiner Referenz und löschte dann manuell die .dll aus dem Bin-Verzeichnis. Dann habe ich manuell die newtonsoft.json.dll aus dem nugget-Paketordner in die Projektablage kopiert und dann die Referenz hinzugefügt, indem ich zur .dll-Datei navigierte.

Jetzt baut mein Projekt wieder auf.


Wenn keiner der oben genannten Schritte funktioniert, versuchen Sie, dies in web.config oder app.config zu verwenden:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <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>
    </assemblyBinding>
</runtime>

jeder. Ich weiß, ich bin etwas spät dran, aber ich denke, das ist immer noch gültig, um meine Erfahrungen mit diesem Problem zu teilen.

Ich war in zwei Projekten mit dieser Nachricht konfrontiert und in beiden Fällen lag das Problem bei der Verbindungszeichenfolge.

Im ersten Fall war es "InitialCatalog" anstelle von "Initial Catalog" (getrennt).

Im zweiten Fall war der Servername (Data Source param) falsch.

Ich hoffe, es hilft.

Freundliche Grüße.







asp.net-mvc json.net nuget visual-studio-2013 asp.net-mvc-5.1