是否可以在项目中使用同一库的多个版本?

时间:2019-02-26 19:10:25

标签: c# asp.net .net

我需要在同一项目中使用Nest 1.9.2(硬连接到Newtonsoft.Json 9.x)和Puppeteer(需要Newtonsoft.Json 10.x或更高版本)。

Nest实际上使用的是Newtonsoft.Json功能,该功能已在10.x中删除,因此我不能仅仅强制使用它。

那么,有没有办法在同一项目中使用多个版本的Newtonsoft.Json?

1 个答案:

答案 0 :(得分:1)

如果您要谈论在一个项目中引用两个版本的DLL ,则有一种解决方法。您可以同时引用nuget程序包,然后在驱动程序应用程序(控制台,Web或Winform)配置文件中,可以添加绑定重定向以仅使用一个版本-只要您的依赖关系不中断。

如果您要谈论在同一应用程序中使用多个版本DLL ,那么this article. Although this article中指定的Kentico有3种方法,它应该可以帮助您解决您的查询。

1。在GAC中安装程序集

2。 in this question

指定的自定义解析器逻辑

将答案中的代码复制到此处以供参考:

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

    static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        if (/*some condition*/)
            return Assembly.LoadFrom("DifferentDllFolder\\differentVersion.dll");
        else
            return Assembly.LoadFrom("");
    }

3。在应用程序的配置文件中使用CodeBase

在web.config中,您可以指定程序集绑定重定向。

您可以为每个版本创建两个文件夹,然后告诉您的应用程序引用特定版本的DLL所在的位置。

<configuration>  
   <runtime>  
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
         <dependentAssembly>  
            <assemblyIdentity name="myAssembly"  
                              publicKeyToken="32ab4ba45e0a69a1"  
                              culture="neutral" />  

            <codeBase version="1.0.0.0"  
                      href="v1\myAssembly.dll"/>  


            <codeBase version="2.0.0.0"  
                      href="v2\myAssembly.dll"/>  
         </dependentAssembly>  
      </assemblyBinding>  
   </runtime>  
</configuration>  

还有另一种指定方式at this MSDN blog.

希望这对您有所帮助。