从GAC中查找OracleClientFactory类型

时间:2015-03-06 09:53:32

标签: c# .net .net-assembly

如果我指定了一个程序集限定名,Type.GetType方法应该在GAC中找到一个类型。这就是我的所作所为:

Type factoryType = Type.GetType("System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient");

factoryType始终为空。

也许我可以指定一个完全限定的名称,包括PublicKey和所有这些,但我不知道必要的细节,并且它们对于每个.NET框架版本都不同。我想避免这种情况,并让它在任何地方运行。

我无法使用编译器程序集引用,因为代码可以在运行时配置,可能根本不使用。我也知道所要求的类型已经过时,但它仍然存在,并且可能在其他替代品不可用时使用。

我将.NET框架版本的目标定位在4.0到4.5之间,后来也是4.6。

1 个答案:

答案 0 :(得分:0)

如果你真的,真的,真的需要这样做,你仍然可以使用LoadWithPartialName重载

var factory = Assembly
         .LoadWithPartialName("System.Data.OracleClient")
         .GetType("System.Data.OracleClient.OracleClientFactory");

但请注意,它已声明已过时,距离已弃用更近一步。过时仍然会编译警告。

我不确定您要实现的目标,但不会更容易将所有可能的工厂添加到config file

<system.data>
  <DbProviderFactories>
    <add name="SqlClient Data Provider"
     invariant="System.Data.SqlClient" 
     description=".Net Framework Data Provider for SqlServer" 
     type="System.Data.SqlClient.SqlClientFactory, System.Data, 
     Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
    />
  </DbProviderFactories>
</system.data>

然后遍历你的connnectionstrings以找到你需要的提供者?