【问题标题】:vb.net compile error 'abc' is ambiguous in the namespace 'xyz'vb.net 编译错误“abc”在命名空间“xyz”中不明确
【发布时间】:2010-01-06 23:51:28
【问题描述】:

我有另一个开发人员创建的 VB.Net 解决方案,我正在尝试在我们的构建机器上编译它(它在他们的机器上编译)但是对于其中一个项目,我收到一条错误消息,如下所示:

Imyinterface 在命名空间 anamespaceassembly 中不明确。

我试过没有成功:

  • 检查了参考资料以查看任何明显的错误
  • 删除并重新添加了相关程序集
  • 在系统中搜索相同的 dll
  • 试图编译原始开发的 src(.v 源代码控制版本)
  • 使用 ildasm.exe 检查程序集

我通常在 C# 中编写代码并且之前没有看到过这个错误(至少在这种形式中),并不是说它是 VB.Net 特定的,而是用于添加/查看引用的 UI 略有不同,所以我想也许 VB.Net 可能对引用做一些不同的事情。

我也试过在另一台机器上编译,编译正常。所以我认为这是构建机器的问题,但我不确定是什么。其他冲突的程序集不知何故未被项目引用,这可能吗??

有什么想法吗?

【问题讨论】:

  • 查看+对象浏览器,输入“Imyinterface”,回车。出现了什么?

标签: vb.net compilation ambiguous


【解决方案1】:

如果您有相同参考的两个版本(例如 Microsoft.ReportViewer.Webforms 版本 10.0.0.0 和 Microsoft.ReportViewer.Webforms 8.0.0.0),请检查您的参考。您将收到此错误。删除最旧的,你应该很好。我一直对自己这样做。

【讨论】:

    【解决方案2】:

    此错误可能有多种原因。在 VB 中,您应该知道,在没有类规范的情况下,可以使用比您习惯的 C# 更多的名称。此外,在 VB 中大小写无关紧要,这可以进一步比拟碰撞的机会。

    即使您没有发现实际的冲突问题,您也可以像在 C# 中一样解决此问题:在 Imports 语句中重命名:

    Imports IM = yourAssembly.Imyinterface
    

    然后更改代码,将Imyinterface 的使用替换为IM

    注意:如果错误未指向特定行,则冲突可能不在您的控制范围内。通常,一个完整的清理解决方案和重建有很大帮助,但有时一个行为不端的文件(即另一个错误)会导致此错误首先弹出,而没有明确的来源。尝试将最近的更改回滚到它起作用的地方。

    您还说它可以在另一台机器上运行。很有可能您的机器有不同版本的 MS Visual Studio 或 .NET。检查并比较确切的版本。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。我将我的应用程序从 vb6 升级到 vb.net,当我将构建配置从 DEBUG 更改为 RELEASE 时,我得到了 AMBIGUOUS 错误。 我在解决方案资源管理器中找到了重复的引用文件夹。我删除了那些重复的引用并成功构建。我希望它可以帮助其他人。

      【讨论】:

        【解决方案4】:

        感谢您的回复!我都试过了,但还是有问题。

        我在最初的问题中遗漏了一点信息,即 VB.net 项目是从 VB6 项目升级而来的。当时我认为这无关紧要。

        在进一步调查后,构建机器也用于构建 VB6 项目。所以我在 vb6 dll 上运行了“reg32 /u”,这似乎解决了 VB.net 问题。

        由于我没有引用 VB6 dll,所以不完全确定为什么会修复它,我猜想与注册表中模糊的条目混淆 vb.net 项目有关。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-11-28
          • 2017-12-16
          • 1970-01-01
          • 2011-12-24
          • 2011-08-26
          • 1970-01-01
          • 2023-03-12
          相关资源
          最近更新 更多