为了给出一些背景信息,我试图在Ubuntu 16.04上创建一个构建服务器,为Unity Asset商店构建一个包。
我使用mcs使用以下命令将我们的一些代码(我们不希望用户面对的代码)导出到dll中:
mcs -debug+ -debug:full -optimize- -codepage:utf8 -sdk:2 -lib:/opt/Unity/Editor/Data/MonoBleedingEdge/lib/mono/2.0-api/ -t:library -define:DEBUG -define:RELEASE_IS_TRIAL -define:DEBUGGER_IS_DISABLED -out:<path to dll> -reference:<required extra references> -recurse:<path to source>/*.cs
然后我将它放入一个新的Unity项目并使用以下命令导出该项目:
/opt/Unity/Editor/Unity -quit -batchmode -nographics -serial <serial> -username <username> -password "" -projectPath <path to project> -exportPackage "Assets" <path to preferred output location>.unitypackage
如果我然后在Windows上统一导入此包,我会遇到一堆错误:
The type or namespace name A does not exist in the namespace B (are you missing an assembly reference?)
这里A和B是我自己定义的类型和命名空间..即没有加载dll。虽然这个dll没什么问题。特别是,如果我运行上面的mcs命令,取出输出dll并替换导入包中的那个,一切导入正常。如果我看看它在unitypackage中导出的dll的Assembly属性,以及直接来自mcs的dll(使用ILSpy),我可以看到unity导出的那个有一个额外的属性:
[assembly: UnityAPICompatibilityVersion("5.6.0xb10Linux")]
我非常怀疑这是导致问题的属性,但我不知道如何阻止Unity以这种方式导出dll,以便Unitypackage可以与平台无关。有什么想法吗?
答案 0 :(得分:0)
事实证明,我在Linux机器上运行的Unity版本比在我的Windows机器上运行的更高版本。代码中存在不兼容错误,因为就Linux机器而言,我使用Unity API中的过时函数。因此,当它构建包时,它创建了一个棘手的DLL。糟糕。