我想知道是否可以仅使用命名空间字符串将程序集加载到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或应用程序的基本目录中。
答案 0 :(得分:4)
一般来说,这是不可能的。 DLL和命名空间之间没有固有的关系。多个DLL可能包含相同的命名空间和单个DLL,以包含多个不同的根命名空间。所以这里不能保证1-1的映射。
但是,您可以在应用程序中在给定命名空间和包含它的DLL集之间创建一个表。然后,对于命名空间,尝试按顺序加载所有这些DLL。这将使您接近您正在寻找的效果(但仅限于一组有限的可用DLL)