从 GAC 中查找 OracleClientFactory 类型

Find OracleClientFactory type from GAC

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

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

factoryType 始终为空。

也许我可以指定一个完全限定的名称,包括 PublicKey 等等,但我不知道必要的细节,而且它们对于每个 .NET Framework 版本都是不同的。我想避免这种情况并使它无处不在 运行。

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

我的目标是 .NET Framework 版本 4.0 到 4.5,之后还有 4.6。

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

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

但请注意,它已被宣布为 过时,这离 弃用 更近了一步。 With obsolete 仍然编译带有警告。

我不确定你想要达到什么目的,但是将所有可能的工厂添加到 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>

然后遍历您的连接字符串以找到您需要的提供商?