可以将多个版本的Newtonsoft.Json dll共存吗?

时间:2017-08-07 03:16:00

标签: c# json visual-studio dll

我们有2个独立项目( A B )参考

Newtonsoft.Json dll.

项目 A 使用版本6.0.0.0,而项目 B 使用版本10.0.0.0

现在,当我尝试从项目B引用dll(以应用涉及反序列化的服务)时,它会抛出异常

Could not load file or assembly 'Newtonsoft.Json, Version=10.0.0.0,...

enter image description here

我理解这基本上是版本冲突。其中一个解决方案是从项目 A 更新版本。

然而,假设我不会选择这种方法(担心它会破坏依赖性或任何未知错误),我可以通过使它们共存来解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

在ProjectB中添加运行时AssemblyBinding并将两个版本重定向到10v。

在app.config

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
          <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
          <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

答案 1 :(得分:1)

确保.csproj文件中的<HintPath>指向适当的dll

通常我正在使用其中包含多个项目的解决方案,以及不同的dll 没问题。也许你可以试试新的空白解决方案来检查。

Start blank solution, add 2 new projects, install each with different version using nuget

using System;
using System.Reflection;
using Newtonsoft.Json;

namespace ProjectA
{
    class Program
    {
        static void Main(string[] args)
        {
            object product = new
            {
                Name = "Apple",
                Expiry = new DateTime(2008, 12, 28),
                Sizes = new string[] {"Small"}
            };

            string json = JsonConvert.SerializeObject(product);
            Assembly assembly = Assembly.LoadFrom("Newtonsoft.Json.dll");
            Console.WriteLine($"Using version {assembly.GetName().Version}");
            Console.WriteLine($"Serialize just fine: {json}");
            Console.ReadKey();
        }
    }
}

result