C# 在运行时卸载并加载引用

C# 在运行时卸载并加载引用,c#,oracle,C#,Oracle,我的dll Oracle.DataAccess有问题:在我的工作站上安装了一个客户端,在某些服务器上安装了另一个客户端。在运行时,我捕捉到一个 System.TypeInitializationException: The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception. ---> Oracle.DataAccess.Client.OracleException: T

我的dll Oracle.DataAccess有问题:在我的工作站上安装了一个客户端,在某些服务器上安装了另一个客户端。在运行时,我捕捉到一个

System.TypeInitializationException: The type initializer for 
'Oracle.DataAccess.Client.OracleConnection' threw an exception. ---> 
Oracle.DataAccess.Client.OracleException: The provider is not compatible with the version of Oracle client
    at Oracle.DataAccess.Client.OracleInit.Initialize()
    at Oracle.DataAccess.Client.OracleConnection..cctor()
    --- End of inner exception stack trace ---
    at Oracle.DataAccess.Client.OracleConnection..ctor(String connectionString)
在catch子句中,我想卸载当前dll并加载其他位置(在配置文件中设置)


可能吗?除此之外,这是解决此问题的好方法吗?

解决此问题的方法之一-抽象您的oracle数据访问。创建两个程序集,每个程序集都引用特定的ODP。确定安装了哪个客户端或试图逐个加载程序集,直到成功并通过您的界面工作。但关键是,客户机软件必须只知道接口,但ODP通信的实现将被抽象


这是有模式的-代理,装饰。。。您选择

您不能从
AppDomain
卸载dll;您可以启动一个完全独立的
AppDomain
,但这是。。。“相当棘手”是的,这是一个很大的变化,停止了一个小黑客。你认为我看错方向了吗?选择程序集并转到属性->特定版本,将其设置为false。尝试一下,如果它工作,它已经是假的,它不工作,我很抱歉。“特定版本”是生成时属性。在运行时,框架仍会查找生成时使用的程序集的特定版本。