Ich habe eine ASP.NET Core 1.0-Klassenbibliothek, die ich kürzlich erfolgreich auf .NET Core 1.0 RTM aktualisiert habe. Ich verwende es, um einige benutzerdefinierte Json-Eingabe- und Ausgabeformatierer zu implementieren, die in die ASP.NET Core-Pipeline eingeschlossen werden, und referenziere daher das Newtonsoft.Json 9.0.1-Paket, um mit Dingen wie dem JsonSerializerSettings-Objekt zu arbeiten. Das Projekt wird ohne Fehler kompiliert.Projekt kann nicht kompiliert werden, wenn ein Verweis auf Json.NET mit seinem Quellcode ersetzt wird
Ich habe jedoch einige Laufzeitprobleme, die ich weiter untersuchen möchte, indem ich den Newtonsoft-Quellcode durchtrete. In .NET Core habe ich mich an die Flexibilität gewöhnt, eine Nuget-Paketreferenz durch ihren Quellcode zu ersetzen, indem einfach ein Verweis auf die ausgecheckte Quelle in der global.json-Datei hinzugefügt wird (wie in this blog post erklärt). Das funktioniert gut mit Dingen wie den Microsoft AspNetCore-Quelldateien von GitHub, und ich benutze es regelmäßig.
Aus irgendeinem Grund kann ich dies nicht mit dem Newtonsoft-Quellcode erreichen. Ich habe den Newtonsoft-Quellcode von Github geklont und das genaue 9.0.1-Tag ausgecheckt, auf das mein Projekt verweist. Ich habe dann den Quellpfad zu meiner global.json-Datei in meiner Lösung hinzugefügt. Danach findet Visual Studio 2015 das Newtonsoft-Projekt sofort und löst es erfolgreich als lokale Referenz auf. Ich kann sogar in meinen Projektreferenzen sehen, dass sich das Symbol für die Newtonsoft-Referenz geändert hat, wie es geschieht, wenn es ein Projekt von derselben Lösung statt der DLL von dem Nuget-Server verwendet. Außerdem sehe ich keine Warnungen oder Fehler, die Sie manchmal finden, wenn Referenzen nicht richtig gelöst werden.
aber wenn ich versuche, das Projekt zu kompilieren, bekomme ich jetzt den folgenden Compiler-Fehler:
Error CS0012 The type 'JsonSerializer' is defined in an assembly that is not referenced. You must add a reference to assembly 'Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'.
Der Fehler macht für mich keinen Sinn, da die Projektreferenzen ohne Fehler fein aufgelöst, und wenn ich das entfernen Quellenreferenz und lassen Sie es die kompilierte Version von nuget nehmen, kompiliert das Projekt gut. Dies ist die project.json meines Projekts:
{
"version": "0.2.0",
"description": "...",
"authors": [ "..." ],
"buildOptions": {
"xmlDoc": true
},
"frameworks": {
"net451": { },
"netstandard1.6": {}
},
"dependencies": {
"Microsoft.AspNetCore.Mvc": "1.0.0",
"Microsoft.AspNetCore.Mvc.Formatters.Json": "1.0.0",
"Microsoft.Extensions.Logging.Abstractions": "1.0.0",
"Newtonsoft.Json": "9.0.1"
}
}
Irgendwelche Ideen?
Auch wenn das Paket als 9.0.1 versioniert ist, von project.json sagt, es '1.0.0- *' (https://github.com/JamesNK/Newtonsoft.Json/blob/9.0.1/Src/Newtonsoft.Json/project.json#L2)...ich nicht sicher, ob das Build ... verwirrt ... versuche, die Versionsinformationen in deinem Projekt zu entfernen. JSON-Datei und versuchen Sie es erneut .. –
Haben Sie versucht, '" Newtonsoft.Json ": {" Ziel ":" Projekt "}'? – svick
@KiranChalla Ja, das hatte ich auch bemerkt und hatte die Version im json.net-Projekt bereits auf 9.0.1 geändert, dies war erforderlich, damit die Referenz aufgelöst werden konnte. Aber selbst bei der aufgelösten Referenz bleibt der Build-Fehler bestehen. – Chris