Json.NET 初始化会抛出 System.TypeLoadException



我有一个包含两个组件的解决方案:

  • .NET 4.5 控制台应用程序 ( A )。
  • 使用Newtonsoft Json.NET 的PCL库(B)。

只要只有B使用并引用Json.NET(作为 NuGet 包),一切正常。但是一旦我从 A 中添加对相同 NuGet 包的引用,我就会一直得到:

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

我追踪了由NuGet引起的问题,包括两个不同版本的Json.NET程序集:

  • A使用的那个将文件描述设置为 Json.NET
  • B使用的那个将文件描述设置为 Json.NET 可移植

显然,一个组件不能被另一个组件取代。我的 PCL 不再找到它期望的版本,因此出现异常。

如何配置 NuGet,以便两个项目引用相同的可移植版本Json.NET

我找到了一种解决方法,以确保BA都引用同一个 Json.NET 便携式程序集。

默认情况下,NuGet 将<HintPath>配置为设置为库的net45版本:

<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..packagesNewtonsoft.Json.6.0.6libnet45Newtonsoft.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>..packagesNewtonsoft.Json.6.0.6libportable-net45+wp80+win8+wpa81+aspnetcore50Newtonsoft.Json.dll</HintPath>
</Reference>

有了这个,AB都将使用完全相同的程序集。

相关内容

  • 没有找到相关文章

最新更新