2016-07-20 14 views
7

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?

+1

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

+0

Czy próbowałeś użyć '' Newtonsoft.Json ": {" target ":" project "}'? – svick

+0

@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

Odpowiedz

0

Powodem tego jest to, że nazwa "Newtonsoft.Json" jest silna.

Potrzebujesz do tego celu <dependentAssembly>. Jest to w dawnych sposobów .config zrobione tak: (w <runtime>)

<dependentAssembly> 
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" /> 
    <bindingRedirect oldVersion="0.0.0.0-9.0.1.0." newVersion="9.0.1.0" /> 
    </dependentAssembly> 
+0

Dzięki za sugestię, możesz mieć rację, ale nie mogę się dowiedzieć, jak to skonfigurować w ASP.NET Core. I wygląda na to, że nie jestem jedyny: http://stackoverflow.com/questions/39466304/asp-core-wrong-assembly-redirect-on-publish – Chris

Powiązane problemy