替换DLL兼容不同版本的ODP.NET的“另类”方法
替换DLL兼容不同版本的ODP.NET的“另类”方法
用.NET开发软件,如果使用了ODP.NET,就要针对不同的Oracle客户端版本,引用对应的ODP.NET进行编译,对于版本管理来说,造成了一定的麻烦。这一话题,详见之前的日志http://www.cnblogs.com/ols/archive/2011/05/27/2059640.html#commentform。
除了期待Oracle早日推出支持所有Oracle客户端的ODP.NET版本,还有一个另类的方法,可以实现一次编译支持多个Oracle客户端的需求。
在开发环境中,选择任一ODP.NET,编译工程文件。
在部署(运行)环境中:
1. 创建一个文件夹,比如“C:\TMP”,将Oracle.Dataaccess.dll复制到该文件夹中。比如部署环境中的oralce client是9i,就把9.2.0.700版本的Oracle.Dataaccess.dll复制过来,依此类推。
2. 添加一个环境变量“DEVPATH”,值为“C:\TMP”
3. 打开C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config文件,将<runtime/>替换为
<runtime>
<developmentMode developerInstallation="true"/>
</runtime>
这种方法,是微软为了便于在开发过程中测试DLL而提供的机制,不推荐在生产环境中使用。详细介绍参见:http://blogs.msdn.com/b/junfeng/archive/2005/12/13/503059.aspx。ODP.NET 9,10,11的 name, culture, publicKeyToken是相同的,所以可以使用这种方法。
修改machine.config文件,会产生一些副作用,比如其他基于.NET的程序运行异常。可以只修改exe配置文件中的<runtime/>,而非全局配置文件,避免影响其他程序。