.Net - 程序集绑定不适用于 net461 中的 Newtonsoft

.Net - Assembly Binding is not working for Newtonsoft in net461

我正在 NopCommerce 电子商务 Web 应用程序之上工作。目前,整个解决方案正在使用 Newtonsoft 10.0.3。我正在开发一个需要 Newtonsoft 12.0.1 的插件。所以我无法通过解决方案更新我的 newtonsoft。这可以通过程序集绑定来实现。但不确定,为什么它对我不起作用。

错误:

Could not load file or assembly 'Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified.

尝试过的方法

  1. 在根项目的 web.config 中添加了以下配置。

    <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <codeBase version="10.0.3" href="Newtonsoft\v10.0.3\Newtonsoft.Json.dll" />
        <codeBase version="12.0.1" href="Newtonsoft\v12.0.1\Newtonsoft.Json.dll" />
      </dependentAssembly>
    </assemblyBinding>
    

  2. 尝试通过将其设置为 true/false 来使用项目的自动生成绑定。

我需要为 Framework - Net461 (.Netcore) 做些什么吗? 或者我遗漏了一些愚蠢的东西?

在方法 1 中,您实际上没有重定向;尝试添加它,即

<dependentAssembly>
  <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
        culture="neutral" />
  <bindingRedirect oldVersion="1.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
  <!-- whatever else you need here -->    
</dependentAssembly>

Presentation/Nop.Web/Plugins 中有一个 bin 文件夹,在尝试加载插件之前,nopCommerce 将插件的 dll 复制到其中。一个常见的问题是,如果两个或多个插件使用同名的 dll,除了最后一个之外的所有插件都会被其他插件替换。因此,我认为如果您检查该文件夹中的 dll,您将找不到具有所需版本的程序集。可以从以下选项中选择解决方案:

  1. 尽量用nopCommerce一样的程序集,入乡随俗!

  2. 不要使用 nuget,将 dll 文件复制到您的插件中,重命名并将其作为文件引用