【问题标题】:Visual Studio extending namespace to produce errorVisual Studio 扩展命名空间以产生错误
【发布时间】:2010-12-17 15:31:07
【问题描述】:

我在 Visual Studio 2008 中遇到了一个问题,在重新编译库项目时,Visual Studio 无法解析命名空间。问题是 Visual Studio 不必要地扩展了命名空间。例如,我有一个演员像

... = (MyCompany.Dashboard.Data.BaseObjects.ZonesStruct) value;

以前编译好的,重新编译时突然开始失败。 Visual Studio 无法解决它并给出错误消息“类型或命名空间名称 'Data' 不存在于命名空间 'MyCompany.MyCompany.Dashboard'...”。开始的变化是向库中添加了一个新类。失败的类是现有的和未触及的类。

我以前遇到过类似的情况,但那是 UI 设计器生成的代码明确限定为“MyCompany.MyCompany...”。我希望这两种情况的根本原因是相同的。

不确定它是否有用,但库项目的默认命名空间是“MyCompany”。我试过修改它,但我没有注意到任何变化。

谢谢。

【问题讨论】:

    标签: c# visual-studio-2008 namespaces


    【解决方案1】:

    改成这个

    global::MyCompany.Dashboard.Data.BaseObjects.ZonesStruct

    global:: 将命名空间一直转义到根命名空间。这不是 Visual Studio 问题,而是命名空间冲突问题。

    【讨论】:

    • 解决方法是有效的,但任何解释为什么第一个限定符被重复?这只是突然出现,现在看起来我随机添加 global:: 限定符时 Visual Studio 抱怨没有很好地理解为什么。我不明白冲突是如何产生的,因为这之前确实有效。
    • 只有在名为 MyCompany.MyCompany 的命名空间或类型 MyCompany.MyCompany 存在时才会发生错误(虽然不是 100% 肯定),这会引入歧义并因此导致错误。当您指定 global:: 时,您告诉编译器之后的第一个限定符必须是非嵌套命名空间,并且编译器使用该信息解决歧义。我建议检查命名空间或(不太可能的)类型的错误名称,以避免需要一遍又一遍地指定 global::。
    • 是的,不知何故,我的班级是使用“MyCompany.MyCompany”命名空间生成的。纠正这个问题就解决了。谢谢。
    【解决方案2】:

    这并不能解决问题,只是症状。但是您可以尝试使用以下方法确保您拥有的命名空间在全局范围内开始使用

    ... = (global::MyCompany.Dashboard.Data.BaseObjects.ZoneStruct) value;
    

    有关 global 关键字的详细信息,请参阅 MSDN:http://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx

    【讨论】:

      猜你喜欢
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 2015-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多