【问题标题】:VB.NET determine project's imported namespaces at runtimeVB.NET 在运行时确定项目的导入命名空间
【发布时间】: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


【解决方案1】:

您所描述的内容对于已编译的程序集是不可能的,因为它是编译器功能。编译后只有使用类型的信息(可以通过反射得到),而不是它们在源代码中的引用方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    相关资源
    最近更新 更多