【问题标题】:C# Multiple Versions of same DLLC# 同一个 DLL 的多个版本
【发布时间】:2018-11-05 20:14:52
【问题描述】:

我有一个需要 Newtonsoft.Json DLL 版本 10 的 C# 类库(项目 A)。

但是我有另一个需要 Newtonsoft.Json DLL 版本 6 的 C# 类库(项目 B)。

我无法将项目 B 升级为使用 10,因为有太多重大更改。

是否可以同时存在两个版本?

我的问题是项目 A 有一个 Google.Apis 依赖项,它依赖于 Newtonsoft.Json DLL,所以我不能简单地重命名 DLL 并将它们都放在同一个目录中。

我看到其他解决方案提到 App.Config 文件,但由于这是一个类库,它没有配置文件。

有没有办法做到这一点?

【问题讨论】:

  • 查找<bindingRedirect\> 配置文件元素:docs.microsoft.com/en-us/dotnet/framework/configure-apps/…。希望较新的版本向后兼容并使用相同的标记强命名。如果是这样,它应该可以解决您的问题。你说你有“太多的重大变化”。如果是这样,那么你可能是在一个糟糕的方式。 NewtonSoft 是否提供任何建议?我们以前经常报道过这样的 JSON.net 版本问题,但不是很久以前。
  • 在这种情况下 bindingRedirect 是否有用,因为类库没有 app.config 文件?
  • 不,您将<bindingRedirect> 放在两个类库的使用者身上。如果有“这里有太多的重大变化”,那可能没关系。 @Cookinski 的建议可能是唯一的解决方案。或查看 NewtonSoft 的支持网站。

标签: c# dll


【解决方案1】:

也许这会有所帮助:

使用 AppDomain.CurrentDomain.AssemblyResolve 构建事件并加载特定的 dll。

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

public static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    //debug and check the name
    if (args.Name == "MyDllName")
        return Assembly.LoadFrom("c:\\pathdll\midllv1.dll")
    else if(args.Name ="MyDllName2")
        return Assembly.LoadFrom("c:\\pathdll\midllv2.dll");
    else
        return Assembly.LoadFrom("");
}

【讨论】:

  • 我一直在用 Newtonsoft.json 寻找 dll hell 的答案。这个解决方案终于解决了我雇主日益严重的问题。谢谢。
猜你喜欢
  • 2021-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
相关资源
最近更新 更多