Mam bibliotekę klasy ASP.NET Core 1.0, którą niedawno zaktualizowałem pomyślnie do .NET Core 1.0 RTM. Używam go do implementacji niestandardowych formaterów wejściowych i wyjściowych Json w celu włączenia do potoku ASP.NET Core i dlatego odwołuję się do pakietu Newtonsoft.Json 9.0.1 do pracy z obiektami takimi jak JsonSerializerSettings. Projekt kompiluje się bez błędów.Nie można skompilować projektu po zastąpieniu odwołania do Json.NET kodem źródłowym
Mam jednak pewne problemy w czasie wykonywania, które chcę dokładniej zbadać, przechodząc przez kod źródłowy Newtonsoft. W .NET Core przyzwyczaiłem się do elastyczności zastąpienia odniesienia do pakietu Nuget swoim kodem źródłowym, dodając po prostu odnośnik do wypisanego źródła w pliku global.json (jak to dobrze wyjaśniono w poście na blogu this). Działa to doskonale w przypadku plików źródłowych Microsoft AspNetCore z github i regularnie go używam.
Z jakiegoś powodu nie uda mi się tego osiągnąć za pomocą kodu źródłowego Newtonsoft. Sklonowałem kod źródłowy Newtonsoft z github i sprawdziłem dokładnie ten 9,0.1 znacznik, który mój projekt odwołuje. Następnie dodałem lokalizację źródłową do mojego pliku global.json w moim rozwiązaniu. Następnie program Visual Studio 2015 od razu rozpoznaje projekt Newtonsoft i pomyślnie rozpoznaje go jako lokalny odnośnik. Mogę nawet zobaczyć w moich odniesieniach do projektu, że ikona odniesienia Newtonsoft zmieniła się tak, jak ma to miejsce, gdy używa projektu z tego samego rozwiązania, a nie z biblioteki dll z serwera nuget. Ponadto, nie widzę ostrzeżeń ani błędów, które czasami można znaleźć, jeśli odniesienia nie zostaną rozwiązane poprawnie.
Jednak gdy próbuję skompilować projekt, teraz pojawia się następujący błąd kompilacji:
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'.
Błąd nie ma sensu mnie jako odesłania projektu rozwiązane dobrze bez błędów, a jeśli ja usunąć źródło referencji i niech przyjmie skompilowaną wersję z nuget, projekt kompiluje się dobrze. To jest project.json mojego projektu:
{
"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"
}
}
Jakieś pomysły?
Mimo że pakiet jest wersjonowanymi w wersji 9.0.1, z project.json mówi '*' 1.0.0- (https://github.com/JamesNK/Newtonsoft.Json/blob/9.0.1/Src/Newtonsoft.Json/project.json#L2)...nie wiesz, czy to nie myli kompilacji ... spróbuj usunąć informacje o wersji w projekcie. plik json i spróbuj ponownie. –
Czy próbowałeś użyć '' Newtonsoft.Json ": {" target ":" project "}'? – svick
@KiranChalla Tak, zauważyłem to również i już zmieniłem wersję w projekcie json.net na 9.0.1, było to wymagane, aby odwołanie mogło zostać rozwiązane. Ale nawet z rozwiązanym odniesieniem pozostaje błąd konstrukcyjny. – Chris