编译此程序集时为什么会出现以下错误?

Why am I getting the following error when compiling this assembly?

我正在尝试使用以下命令行命令从我的项目中编译代码集:

C:/"Program Files"/Unity/Editor/Data/Mono/bin/gmcs 
-target:library -out:C:/Users/Austin/Desktop/PixelExpanse.dll 
-recurse:C:/Users/Austin/Desktop/Projects/Repos/trunk/PixelExpanse/SpaceColonyRefactor/Assets/Source/*.cs 
-d:RUNTIME -r:C:/"Program Files"/Unity/Editor/Data/Managed/UnityEngine.dll

如您所见,我相信我引用的 UnityEngine.dll 是正确的。 将编译的代码包含对 UnityEngine.UIUnityEngine.EventSystems 的引用。但是当我 运行 上面的命令时,我得到以下编译错误:

error CS0234: The type or namespace name 'EventSystems' does not exist in the namespace 'UnityEngine'. Are you missing an assembly reference?

根据我通过谷歌搜索所能找到的内容,它看起来像是人们在使用 4.6 之前的程序集时遇到的错误,因为那是 EventSystems 和 UI 都被引入的时候。但我不知道我怎么会在我引用的 dll 中遗漏它,因为 Unity 5 是唯一接触过这台计算机的版本。

附带说明一下,我已将此问题发布到 Unity Answers,但尚未收到回复。我希望这是因为汇编编译超出了那里大多数用户选择进行的范围。因此我在这里问。

我检查了 UnityEngine.dll 并且不包括 Eventsystems/UI 命名空间。尽管如此,在 Unity5\Editor\Data\UnityExtensions\Unity\GUISystem\UnityEngine.UI.dll 中有一个包含这些命名空间的 dll。

命名空间 UnityEngine.EventSystems 实际上出现在 UnityEngine.UI.dll 而不是 UnityEngine.dll 所以看起来从命令行手动编译时,您也需要引用前者。 Unity 项目默认有这个(见下文)。

这可以通过在您选择的反射器工具中打开程序集来验证,这里我使用的是 JetBrains dotPeek:

这是我的测试项目使用默认 Unity 引用时的显示方式。请注意,默认情况下,对 UnityEngine.UI 的引用已出现在 Unity 创建的项目中:

当我通过 Unity 构建我的 Windnows 桌面应用程序时,上述 dll 出现在:

<驱动器>:<projectOutFolder>\<projectName>_Data\Managed

你可以试试:

右键单击 "project panel",然后 "Reimport All"。

这可能是由于平台之间的切换而发生的,例如IOS,或桌面..因此,文件夹被删除变得不必要..

帮我解决:Unity 5.2, Win 7, 32bits;

祝你好运!

对于 mac,它是 /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll