我想得到什么:
new JsonMediaTypeFormatter().SerializerSettings;
Run Code Online (Sandbox Code Playgroud)
从lib.dll调用.但它失败了:
找不到方法:'Newtonsoft.Json.JsonSerializerSettings System.Net.Http.Formatting.JsonMediaTypeFormatter.get_SerializerSettings()'
我想做什么:
在app config中绑定:
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
culture="neutral" />
<bindingRedirect oldVersion="4.0.0.0-5.0.0.0" newVersion="9.0.0.0" />
Run Code Online (Sandbox Code Playgroud)是的,它有效.但我不能使用这个解决方案.传递后将2个Newtonsoft.Json(带有不同版本)加载到AppDomain.
我不明白为什么会这样(oldVersion ="8.0.0.0-9.0.0.0")但是:
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="8.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
Run Code Online (Sandbox Code Playgroud)异常"未找到方法"不抛出.传递后将1个Newtonsoft.Json(9.0)加载到AppDomain.但不适合我.
为什么AppDomain.CurrentDomain.AssemblyResolve不起作用?我想问题是在2个加载的程序集中,但我不能改变这种行为.
为什么AppDomain.CurrentDomain.AssemblyResolve不起作用?
AppDomain.CurrentDomain.AssemblyResolve如果程序集解析失败,则触发事件.由于您看到Newtonsoft.Json已在应用程序域中加载了程序集,因此不是您的情况.
你捕获MissingMethodException因为在Newtonsoft.Json版本4.5中声明的System.Net.Http.Formatting.JsonMediaTypeFormatter.get_SerializerSettings()返回JsonSerializerSettings.不幸的是,JsonSerializerSettings来自Newtonsoft.Json 4.5的没有灵魂的CLR JsonSerializerSettings与Newtonsoft.Json 9.0完全不同.
为了解决这个问题,引入了用于重定向程序集版本的机制(bindingRedirect您参考).
异常"未找到方法"不抛出.传递后将1个Newtonsoft.Json(9.0)加载到AppDomain.但不适合我.
实际上这是你应该坚持的解决方案.您最好的选择是只将一个Newtonsoft.Json程序集加载到应用程序域中并配置版本重定向.
为什么要重新发明轮子并尝试找到除平台优惠之外的解决方案?如果由于某些奇怪的原因您被禁止修改应用程序配置,您可以在机器级别添加程序集重定向有关详细信息,请参阅此文章.但是汇编版本重定向是如何在.Net中修复永恒的DLL地狱问题的方式.使用任何其他解决方法(即使您设法找到它们)将使您无益.
| 归档时间: |
|
| 查看次数: |
540 次 |
| 最近记录: |