从 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>
然后遍历您的连接字符串以找到您需要的提供商?
如果我指定程序集限定名称,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>
然后遍历您的连接字符串以找到您需要的提供商?