为什么我在编译这个程序集时会收到以下错误提示?

7

我尝试使用以下命令行命令编译我的项目代码的汇编:

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:名称空间“UnityEngine”中不存在“EventSystems”类型或命名空间。是否缺少程序集引用?

从我通过谷歌找到的资料来看,似乎这是人们在使用早于4.6版本的程序集时遇到的错误,因为那时候EventSystems和UI都被引入了。但我不知道我怎么可能会在我引用的dll中缺少它,因为Unity 5是唯一接触过这台电脑的版本。
顺便说一句,我已经在Unity Answers上发布了这个问题,但还没有得到回复。我认为这是因为程序集编译超出了那里大多数用户选择承担的范围。因此我在这里提问。

1
你能否使用Reflector或类似的工具打开UnityEngine并查看其中是否包含预期的类型? - Jon Skeet
有些用户可能想知道,为了解决这个问题,有时候需要将类文件放在一个名为Editor的文件夹中,例如TestTools等。 - vazor
4个回答

6
命名空间UnityEngine.EventSystems实际上出现在UnityEngine.UI.dll而不是UnityEngine.dll中,因此在从命令行手动编译时似乎需要引用前者。Unity项目默认具有此功能(请参见下文)。
通过打开您选择的反射器工具中的程序集进行验证,这里我使用JetBrains dotPeek
这是我的测试项目,具有默认的Unity引用。请注意,默认情况下,Unity创建的项目中已经引用了UnityEngine.UI
当我通过Unity构建我的Windows桌面应用程序时,以上dll出现在:
<drive>:<projectOutFolder>\<projectName>_Data\Managed

2
你可以尝试:右键点击“项目面板”,然后选择“重新导入所有”。这可能是由于切换平台(例如IOS或Desktop)而发生的,因此文件夹被删除或变得不必要。解决方法:Unity 5.2,Win 7,32位。祝你好运!

在我的Mac上也可以工作 - MacOS 10.15.5,Unity 2019.3.10f1。 - Ramon Balthazar

2

我检查了UnityEngine.dll,发现Eventsystems/UI命名空间没有包含在内。但是,在Unity5\Editor\Data\UnityExtensions\Unity\GUISystem\UnityEngine.UI.dll中有一个包括这些命名空间的dll。


哎呀,那是个打错字了。我想说的是EventSystems。 - Marius Junak
谢谢。虽然很有趣,但我想这是他们的文档错误吧? - user585968
我不确定,但它被声明为"扩展",并且用户界面是一个开源组件。也许保持这种方式会更好。 - Marius Junak

0

对于Mac系统来说,它的路径是 /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接