C# Oracle客户端版本的微小变化会导致应用程序失败

C# Oracle客户端版本的微小变化会导致应用程序失败,c#,C#,我有一个使用Oracle客户端(特别是Oracle.DataAccess)的小型命令行应用程序。我的开发机器上安装了2.11.7.20版,但应用程序最终运行的服务器版本为2.11.7.0。当我尝试在服务器上运行应用程序时,它失败,表示找不到dll或其依赖项之一(找到的程序集的清单定义与程序集引用不匹配) 我将Oracle.DataAccess.dll从服务器复制到我的机器上,将项目改为引用它,然后重新编译。它现在可以在服务器上正常运行 但是,必须有一种更干净的方法来处理这样的版本问题,特别是像x

我有一个使用Oracle客户端(特别是Oracle.DataAccess)的小型命令行应用程序。我的开发机器上安装了2.11.7.20版,但应用程序最终运行的服务器版本为2.11.7.0。当我尝试在服务器上运行应用程序时,它失败,表示找不到dll或其依赖项之一(找到的程序集的清单定义与程序集引用不匹配)

我将Oracle.DataAccess.dll从服务器复制到我的机器上,将项目改为引用它,然后重新编译。它现在可以在服务器上正常运行


但是,必须有一种更干净的方法来处理这样的版本问题,特别是像x.x.x.0到x.x.x.20这样的小问题。我已经在ASP.NET中开发了很多年,在这里,您可以更改web.config中对程序集的引用来解决类似的问题,但这是我的第一个“桌面”应用程序,不知道该做什么。我尝试在VisualStudio中为引用的程序集的属性下将“Specific Version”设置为false,但似乎没有任何作用。我还尝试将assemblyBinding添加到app.config文件,但这导致应用程序立即崩溃

<runtime>    
  <assemblyBinding> 
    <dependentAssembly> 
      <assemblyIdentity name="Oracle.DataAccess" 
                              publicKeyToken="89b483f429c47342" /> 
      <bindingRedirect oldVersion="2.111.7.20" 
                             newVersion="2.111.7.0"/> 
    </dependentAssembly>         
  </assemblyBinding> 
</runtime>


编辑:噢,我将运行时部分作为app.config中的第一个块,而不是在configSections之后。应用程序不再崩溃,但我仍然收到相同的错误。

相当于web.config的桌面是app.config(它将自动复制到输出文件夹并重命名为.config)。因此,如果有帮助,您可以将其放在项目的App.config中(您可能需要先将此文件添加到您的项目中)。

Oracle客户端是个大麻烦

您是否看过其他Oracle提供商,如?这个司机,,
例如,is是100%托管代码,支持许多高级Oracle功能,提供实体框架支持(我相信有一天会出现在ODP.NET中)

D'oh又来了。我将xmlns从assemblyBinding中删除;当我戴上它时,一切都很顺利。因此,您可以使用bindingRedirect向后查看版本

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Oracle.DataAccess"
                          publicKeyToken="89b483f429c47342" culture="neutral" />
        <bindingRedirect oldVersion="2.111.7.20"
                         newVersion="2.111.7.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>


“我还尝试将assemblyBinding添加到app.config文件中,但这导致应用程序立即崩溃。”我与一家政府机构签订了一份为期六个月的合同,但这是行不通的。我想念SQL Server:-/@pjabbott,那么我认为设置assemblyBinding是您的最佳选择。