在 C 语言中找不到命名空间#

Namespace not found in C#

提问人:eje211 提问时间:4/27/2023 更新时间:4/27/2023 访问量:194

问:

这是我的基本,但就我个人而言,我被难住了。

我正在接管一个以前组织得不是很好的 C# 项目。命名空间非常分散在整个代码中。具体来说,这是一个 Unity 项目,但这实际上只是一个 C# 问题。

嵌套目录深处的文件中存在一个类型(或类),该类型(或类)不能在项目其他位置的另一个文件中引用。

如果类是 ,则如下所示:MyClass

File 1
------

public class MyClass
{
    // Stuff inside.
}

File 2
------
using ManyThings;

namespace SomeNamespace.NestedNamespace { // These came before me.

public class SomethingElse
{
    private MyClass _myClass; // <-- the type "MyClass" cannot be found.
}

}

所以我(天真地)认为,如果我在文件 1 周围添加一个命名空间,它可能会有所帮助:

File 1
------

namespace FindMe
{

public class MyClass
{
    // Stuff inside.
}

}

File 2
------
using ManyThings;
using FindMe; // <-- The namespace FindMe cannot be found.
              // If I name it global::FindMe, it changes nothing.

namespace SomeNamespace.NestedNamespace {

public class SomethingElse
{
    private MyClass _myClass; // <-- the type "MyClass" STILL cannot be found.
}

}

我也尝试了类似的东西,以防万一。但它也没有被发现。莱德告诉我:.Unity 告诉我:.global::FindMeCannot resolve symbol 'FindMe'The type or namespace name 'FindMe' could not be found in the global namespace (are you missing an assembly reference?)

我一定错过了一些明显的东西,但是什么?

此外,在 Rider 中,当我尝试在类上使用它时,“重构”菜单的内容几乎全部变灰了。我不知道这是否重要。我尝试在使缓存失效后重新启动。MyClass

Content of the Refactor menu in Rider, effectively all greyed out.

同样,这是一个巨大的项目,有许多未使用的文件。我正在尝试清理它。这个需要保留。这就是为什么我不分享实际代码的原因。它看起来...讨厌。

但是我错过了什么?

C# 命名空间 重构 Rider

评论

0赞 Retired Ninja 4/27/2023
您是否将编辑器代码与运行时代码混合在一起?文件是否位于其他程序集中?
0赞 eje211 4/27/2023
阅读下面的答案,我意识到我不知道,在 C# 中,项目和解决方案是不同的东西。现在已经很晚了。我明天会再次查找它,并尝试将一个项目添加到解决方案中,现在我知道它们是如何工作的。
0赞 eje211 4/27/2023
@RetiredNinja 这些类都不使用编辑器代码,但即使它们使用,如果我在 Unity 中构建项目,问题也会在运行时发生,不是吗?命名空间仍然可见。
0赞 Retired Ninja 4/27/2023
不一定。编辑器代码可以看到运行时代码,但运行时代码看不到编辑器代码。它们所属的程序集取决于它们是否在名为 editor 的目录中或目录下。如果有多个程序集,则需要找到 asmdef 并正确设置依赖项。您需要在 Unity 中解决该问题,因为它是生成您在 Rider 中使用的项目的原因。如果你在 Rider 中修复它,它对 Unity 来说无关紧要,它也不会在 Unity 中编译。

答:

-1赞 Verwey 4/27/2023 #1

只要你们在同一个项目中,这应该可以工作。

如果您不在同一个项目中,而是在同一个解决方案中,您可以将依赖关系从一个项目添加到另一个项目,如下所示:

右键单击项目资源管理器依赖项,添加项目依赖项,选择您的项目

这样,您就可以访问其他项目中的命名空间。´

另请注意,嵌套命名空间的工作方式与带有句点的命名空间声明相同。

    namespace SomeNamespace.FindMe
    {
        ...
    }

等同于:

    namespace SomeNamespace
    {
        namespace FindMe
        {
            ...
        }
    }

希望这会有所帮助

评论

0赞 Retired Ninja 4/27/2023
在Unity中不是很有用,因为项目是根据需要生成的,像这样的更改会丢失。
0赞 Verwey 4/27/2023
你可能是对的,我还没有在 unity 上做太多工作......您仍然可以在 VS 中打开 Unity 项目,并以这种方式检查是否存在问题。
0赞 eje211 4/27/2023
就像我上面说的,我缺少的明显是 C# 中项目和解决方案之间的关系。我知道它一定是这样明显的东西。我明天会尝试在牢记这些新信息的情况下修复它。
0赞 eje211 4/27/2023
@Verwey 我不在 Windows 上。这就是我使用 Rider 的原因之一。我无法访问 Visual Studio。(我猜“vs”是 Visual Studio。