2010-09-21 79 views
0

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

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

但是,必须有一种更简洁的方法来处理这类版本问题,尤其是像x.x.x.0到x.x.x.20这样小的版本。我一直在ASP.NET中进行开发多年,您可以在web.config中更改对程序集的引用以解决类似的问题,但这是我的第一个“桌面”应用程序,不知道该怎么做。我试图在Visual Studio的属性中为引用程序集设置“特定版本”为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的第一个块。该应用程序不再崩溃,但我仍然得到相同的错误。

回答

0

D'oh再次。我离开了assemblyBinding的xmlns;当我穿上它时,一切都很完美。所以...你可以使用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> 
0

web.config的等效桌面是App.config(它将自动复制到您的输出文件夹并重命名为.config)。所以你可以把它放在你的项目中的App.config中(如果它有帮助的话)(你可能需要首先将这个文件添加到你的项目中)。

+0

“我也尝试在app.config文件中添加一个assemblyBinding,但这导致应用程序立即崩溃。” – 2010-09-21 15:28:22

0

Oracle客户端是一个很大的痛苦!

您是否看过备用Oracle提供商,如devArt's dotConnect?这个驱动程序,例如, 是100%托管代码,支持许多高级Oracle功能,提供实体框架支持(在ODP.NET中有一天我会确定)。

+0

我与一家政府机构订立了六个月的合同,不会发生。我想念SQL Server: -/ – 2010-09-21 15:36:44

+0

@pjabbott,那么我认为设置assemblyBinding是你最好的选择。 – 2010-09-21 16:20:07

0

我在here上提供了一些细节;让我知道它是否有帮助,或者您需要更多信息。

相关问题