【问题标题】:Can't access public classes in an other project but the same namespace无法访问其他项目中的公共类,但相同的命名空间
【发布时间】:2012-10-25 12:43:35
【问题描述】:

我的解决方案中有两个项目,每个项目都有一个包含公共类的 CS 文件。由于这两个类都在同一个命名空间中,我希望它们能够互相看到。事实并非如此。请参阅下面的设置。

Woof1 项目,文件 File.CS

namespace MyNameSpace
{
  public class Foo
  {
    // Doesn't compile
    Faa f;
  }
}

Woof2 项目,文件 File.CS

namespace MyNameSpace
{
  public class Faa
  {
    // Doesn't compile
    Foo f;
  }
}

注意,这两个类都存储在具有相同名称的文件中在不同的目录中(即不是同一个文件)。

  1. 为什么不能编译?
  2. 我能做些什么(除了将类移到同一个项目中)。

(我只在这个主题上找到了this discussion,但最终这不是我的问题。)

【问题讨论】:

  • 我首先想到的是缺少参考。即使项目在同一个解决方案中,Woof2 项目也需要对 Woof1 项目的引用。
  • 我认为您的两个项目都需要相互参考。
  • 您必须在 Woof2 中添加对 Woof1 的项目引用。右键单击引用并从同一解决方案中选择 Woof2。仅供参考,命名空间区分大小写。 MyNameSpace 的输入方式不同,但我认为这只是您的示例的错字,对吧?
  • 这是真正的代码吗?因为你的 2 命名空间不一样。
  • @Johnny5 是的,我添加了参考。我也尝试了项目参考和 DLL。是的 - 它是命名空间中的一种类型,但仅限于 SO。在真实的代码中,它拼写正确。

标签: c#


【解决方案1】:

您需要从项目 Woof2 中添加对项目 Woof1 的引用。

此外,尝试相互引用两者并不是一个好主意,因为您引入了循环依赖,使构建成为一场噩梦。如果您不小心需要这样做,您应该考虑将通用代码分解到一个单独的(第三个)项目中。

【讨论】:

    【解决方案2】:
    1. 确保按预期设置引用。每个项目都需要相互参考。
    2. 确保在项目中的所有类上设置public 限定符。
    3. 确保在项目中的所有枚举上设置public 限定符。

    此外,最好将您的enums 和其他辅助定义移动到一个公共项目中并将它们存储在那里。

    【讨论】:

    • 请注意,应该避免像这样的循环依赖。所以最好的答案是创建额外的共享程序集。
    • @HenkHolterman 是否存在任何需要保留循环引用的情况?我打算把那个放在我的答案中,但后来我不确定了。也许这家伙有一些非常奇怪的设置,确实需要这种方法。你能想到吗?
    • 我已经看到它发生了,但总是由于糟糕的设计。我想不出任何合法的案例。但我想它可能发生在复杂的库中,比如 .NET 本身。我正在考虑这里的应用程序。
    【解决方案3】:

    在 Woof1 中,您需要包含对 Woof2 的引用。 还有一点需要注意的是命名空间是区分大小写的,所以两个命名空间都应该是MyNameSpace。

    【讨论】:

      【解决方案4】:

      您需要从项目 Woof2 中添加对 Woof1 的项目引用。请参考this链接了解更多信息。

      【讨论】:

        【解决方案5】:

        我确实发生了。如果 dll 不是正确的构建,它可能会出现。在我的情况下,我使用工具栏中的发布选项。所以请确保选择了调试选项

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-08-05
          • 2011-06-04
          • 2012-12-21
          • 1970-01-01
          • 2020-04-06
          • 2016-12-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多