【发布时间】:2016-03-25 06:58:04
【问题描述】:
在 VB.NET(或 C#)中,如何在运行时确定在项目属性中导入了哪些命名空间?我将使用它进行动态编译,我希望动态代码自动具有与其父项目相同的 Imports。
我已经看到“使用反射 (DotNET) 查找程序集中的所有命名空间”。它和我发现的其他示例似乎无法解决我的问题,因为我发现它们提供了所有项目引用的列表。是的,我希望所有这些都可以访问,但有些是通过完全限定的名称,而不是全部导入到根命名空间中的。而且我只想通过现有项目属性的“导入的命名空间”列表进行选择,而不是在我的动态执行类中维护一个单独的冗余列表。
【问题讨论】:
-
谢谢,但不是我需要的。我已经编辑了我原来的问题,以更好地解释需要什么。
-
对我来说仍然不清楚你想要实现什么。你能提供一个完整的例子吗?你期望在什么条件下得到什么结果?
-
我的项目有很多参考资料。其中之一是“系统”,这是我想要在项目范围内导入的东西,所以我总是可以输入 Convert 而不是 System.Convert。另一个是“Maat”,一个用户创建的类库。尽管我引用了它,但我从不导入它,无论是在项目级别还是文件级别;部分是个人喜好,部分是因为它有像 Maat.Convert 这样的类,这会与 System 中的类发生冲突,从而导致歧义。因此,如果我想使用 Maat.Convert,我习惯于将其全部输入。 (在下一条评论中继续)
-
现在在动态编译代码时,我必须告诉编译器我的动态代码将引用什么,我希望它与父项目相同。这就是您的链接解决的问题,允许动态代码访问 System.Convert 和 Maat.Convert - 但通过这些完全限定的名称。为了在动态代码中保留我的标准名称/访问约定(将 System.Convert 访问为 Convert,并将 Maat.Convert 作为 Maat.Convert 访问),我还需要复制项目属性中列出的导入,而不是导入每个引用. (再续)
标签: .net vb.net reflection namespaces assembly-references