如果我指定了一个程序集限定名,Type.GetType
方法应该在GAC中找到一个类型。这就是我的所作所为:
Type factoryType = Type.GetType("System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient");
但factoryType
始终为空。
也许我可以指定一个完全限定的名称,包括PublicKey和所有这些,但我不知道必要的细节,并且它们对于每个.NET框架版本都不同。我想避免这种情况,并让它在任何地方运行。
我无法使用编译器程序集引用,因为代码可以在运行时配置,可能根本不使用。我也知道所要求的类型已经过时,但它仍然存在,并且可能在其他替代品不可用时使用。
我将.NET框架版本的目标定位在4.0到4.5之间,后来也是4.6。
答案 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以找到你需要的提供者?