我可以在不知道dll文件名的情况下加载程序集,其中我只知道命名空间名称

时间:2011-10-27 15:31:43

标签: c# .net reflection dll assemblies

我想知道是否可以仅使用命名空间字符串将程序集加载到AppDomain中,例如System.Data.Odbc(没有其他完全限定的程序集名称)

我也无法使用DLL的路径加载程序集,我需要.NET来解决这个问题。

背景

我有一个在另一个AppDomain中运行的C#脚本编译器,这些脚本可以包含引用,例如:System.Data.Odbc.OdbcConnection conn,我需要加载脚本引用的类型。

我正在解析System.Data.Odbc.OdbcConnection并加载System.Data.Odbc。我希望System.Data.Odbc.OdbcConnection的加载失败,我的代码解释了这一点,但我需要知道是否可以使用字符串System.Data.Odbc加载程序集

我回顾了这个问题:

Can I load a .NET assembly at runtime and instantiate a type knowing only the name?

然而它对我没有帮助,因为它假定知道dll文件名。

可以安全地假设这个库位于GAC或应用程序的基本目录中。

1 个答案:

答案 0 :(得分:4)

一般来说,这是不可能的。 DLL和命名空间之间没有固有的关系。多个DLL可能包含相同的命名空间和单个DLL,以包含多个不同的根命名空间。所以这里不能保证1-1的映射。

但是,您可以在应用程序中在给定命名空间和包含它的DLL集之间创建一个表。然后,对于命名空间,尝试按顺序加载所有这些DLL。这将使您接近您正在寻找的效果(但仅限于一组有限的可用DLL)