【发布时间】:2015-08-05 22:29:29
【问题描述】:
问题
我从事支持 Oracle DBMS 的 .NET COTS 产品。我的用户可能安装了 9i、10g、11g 或 12c 版本的 Oracle 客户端(和相应的 ODP.NET)。我针对特定版本的 ODP.NET (2.102.2.20) 构建,如果用户安装了不同版本,他们会收到“找不到 Oracle.DataAccess”错误。
我尝试过的事情
-
工作:用户在
.exe.config文件中手动添加/编辑dependentAssembly部分:
<dependentAssembly><assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89b483f429c47342" culture="Neutral" /><bindingRedirect oldVersion="2.102.2.20" newVersion="4.121.1.0" /><publisherPolicy apply="no"/></dependentAssembly>
不起作用:使用
newVersion的范围(是的,MSDN doesn't say you can do this,但我试过了;请注意,oldVersion的使用范围是支持但对我没有帮助)。不起作用:告诉用户他们必须安装一个特定版本的 Oracle 客户端。 (从技术上讲,它确实有效,但 IT 部门和经理讨厌这个想法。)
已工作: 创建了一个外部配置工具来搜索应用程序域以查找
Oracle.DataAccess程序集(使用System.AppDomain.CurrentDomain.GetAssemblies()),按架构(32 位或 64 位)过滤,按版本排序,获取支持的最高版本,并使用检测到的最高版本手动写入.exe.config文件,但这有点笨拙,可能容易出错,升级时可能会出现问题。
问题
有没有更好的方法来做到这一点?就像我不必自己编码的自动方式?
解决方案 1 和 4 有效,但 1 对用户来说是一件烦人的事情,而 4 看起来很奇怪(虽然这是我目前正在发布的)。
如果有办法声明这个程序集 (ODP.NET) 可以在任何版本范围内正常工作,那似乎会很好,但我看不到为newVersion 指定可接受范围的方法(您可以添加多个 dependentAssembly 节点,但是当我尝试为未安装的版本添加条目时,这会在运行时出错。)
【问题讨论】:
标签: .net oracle configuration