为了提供一些上下文,我试图在Ubuntu16.04上创建一个构建服务器来为Unity资产存储构建一个包。
我使用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上以unity方式导入这个包,我会得到一堆错误,大致如下:
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并替换导入包中的dll,那么一切都可以导入。如果我查看在unitypackage中导出的dll的程序集属性,以及直接从mcs(使用ILSpy)导出的dll,我可以看到unity导出的dll有一个额外的属性:
[assembly: UnityAPICompatibilityVersion("5.6.0xb10Linux")]

我非常怀疑这是导致问题的属性,但我不知道如何阻止Unity以这种方式导出dll,从而使unitypackage不受平台限制。有什么想法吗?

最佳答案

结果发现,在Linux机器上运行的Unity版本比在Windows机器上运行的版本要晚。代码中存在不兼容错误,因为就Linux机器而言,我使用的是UnityAPI中过时的函数。所以当它构建包时,它创建了一个可怕的dll。哎哟。

关于c# - Unity Linux软件包导出正在修改我的DLL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43008852/

10-10 00:57
查看更多