在C#中使用特定版本的dll

时间:2014-08-05 05:30:19

标签: c# dll version gac

我有一个项目,我想使用某个特定版本的dll。

GAC包含几个版本的dll(新旧),我想在运行程序时使用旧版本。

问题是最新的dll总是从GAC中获取。

你知道是否有办法:

  • 强制使用运行文件夹中的dll(我在解决方案中引用的那个,在调试中正常工作)。
  • 强制从GAC使用旧版本的dll。

谢谢!

4 个答案:

答案 0 :(得分:0)

将库添加到项目中并折叠项目树的“引用”节点后,您将看到添加的库。当您选择它并单击上下文菜单的“属性”节点时,您可以指定是否应使用特定版本的库以及要使用的版本。只需将“特定版本”设置为true并指定版本号。然后,您不必处理从中加载所需版本的问题。

答案 1 :(得分:0)

您是否尝试过#34;重定向程序集版本"在你的app.config? http://msdn.microsoft.com/en-us/library/7wd6ex19(v=vs.110).aspx

答案 2 :(得分:0)

让我永远找出来,但是我所做的是在“参考路径”上,我将确切的路径添加到旧的DLL,然后将其作为第一个检查的地方。然后,它删除了我的Crystal Reports所需的旧版本。我们有多个使用13.0.2的应用程序,但我在Visual Studio 2017中开发。我能够为VB安装最新的Crystal Reports加载项13.0.23,但是使用此方法引用了旧的13.0.2。

答案 3 :(得分:0)

您可以在app.config或binding redirect节点的web.config中使用runtime

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
  </appSettings>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

确保您具有正确的publicKeyToken,并且知道要将哪个版本重定向到哪个版本。

(您可以使用this info来检查publicKeyToken中的DLL。)

MSDN Documentation

您还可以使用Package Manager Console

为整个解决方案生成这些信息
Get-Project -All | Add-BindingRedirect

这将更新所有app.config文件并添加绑定重定向。