我有一个包含两个组件的解决方案:
- .NET 4.5 控制台应用程序 (
A
)。 - 使用 Newtonsoft 的 Json.NET (
B
) 的 PCL 库。
只要只有 B
使用并引用 Json.NET
(作为 NuGet 包),一切都会正常工作。但是,一旦我添加对 A
中同一个 NuGet 包的引用,我就会始终得到:
System.TypeLoadException:无法加载类型“Newtonsoft.Json.SerializationBinder”...
我找到了由 NuGet 引起的问题,包括两个不同版本的 Json.NET
程序集:
A
使用的文件描述设置为 Json.NETB
使用的文件描述设置为Json.NET Portable
显然,一个组件不能被另一个组件替换。我的 PCL 不再找到它期望的版本,因此出现异常。
如何配置 NuGet,以便两个项目引用相同的 Json.NET
可移植版本?
最佳答案
我找到了一种解决方法来确保 B
和A
引用相同的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>
完成后,A
将使用完全相同的程序集。和B
.
关于c# - Json.NET 初始化抛出 System.TypeLoadException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26987596/