簡體   English   中英

Json.NET初始化引發System.TypeLoadException

[英]Json.NET initialization throws System.TypeLoadException

我有兩個部分的解決方案:

  • .NET 4.5控制台應用程序( A )。
  • 消費Newtonsoft的Json.NET( B )的PCL庫。

只要B使用並引用Json.NET (作為NuGet包),一切就可以正常工作。 但是,一旦我添加了對A相同的NuGet包的引用,我就會得到:

System.TypeLoadException: Could not load type 'Newtonsoft.Json.SerializationBinder' ...

我跟蹤了由NuGet引起的問題,其中包括兩個不同版本的Json.NET程序集:

  • A使用的文件的文件描述設置為Json.NET
  • B使用的文件的文件描述設置為Json.NET Portable

顯然,一個組件不能被另一個替換。 我的PCL找不到所需的版本,因此是例外。

如何配置NuGet,以便兩個項目都引用相同的Json.NET 可移植版本?

我找到了一種解決方法,以確保BA引用相同的Json.NET Portable程序集。

默認情況下,NuGet將<HintPath>配置為設置為庫的net45版本:

<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\packages\Newtonsoft.Json.6.0.6\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>

這是這場沖突的根源。 因此,將A.csproj文件編輯為此:

<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\packages\Newtonsoft.Json.6.0.6\lib\portable-net45+wp80+win8+wpa81+aspnetcore50\Newtonsoft.Json.dll</HintPath>
</Reference>

正確安裝后, AB將使用完全相同的組件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM