Unity 中脚本打包dll遇到的一个很诡异的链接错误备忘

用类似 "C:/Program Files/Unity/Editor/Data/MonoBleedingEdge/bin/mcs.bat"  -r:"C:\Program Files\Unity\Editor\Data\Managed\UnityEngine.dll"  -r:"C:\Program Files\Unity\Editor\Data\UnityExtensions\Unity\GUISystem\UnityEngine.UI.dll"  -target:library D:\XXXX.cs  -out:"D:/yyyy.bytes"

这样的命令可以将脚本打包成二进制文件  也可以直接将文件改名为dll文件  放在unity plugin文件夹里边使用 

 

现象1 遇到的问题是这样 将一个接口文件用上述命令行打包成接口dll 放在plugin中 然后在命令行中引用这个接口文件将其他实现这个接口文件编译成实现dll  结果dll可以成功生成  通过ILSpy可以看到实现dll相关的类都有  但是如果通过反射去取这个类中的type的话 只有接口类的type可以得到

现象2  即使在实现类中不实现接口文件dll的任何类 完全无关的情况下 在编译命令行中不引用接口dll 但是在脚本所在的unity工程中包含这个接口dll 打包出来的实现类的dll中仍然无法获得实现类的type 很奇怪得到接口类中的type(但在ILSpy中看到的确实实现类的类型和代码 跟接口类没有任何关系)  此时如果将unity工程中这个接口dll删除掉 命令行编译实现文件 结果在代码里通过反射可以获得实现类的type了 

原因可能是通过mcs.bat 打包出dll会有奇怪的链接关系??

解决方法 通过vs新建类库项目 将接口文件和unityEngine dll放进去 生成dll文件  这种dll文件可以作为接口dll放在unity工程里 通过命令行引用这种接口dll 将unity脚本打包生成的bytes(dll)文件可以正常在反射中获得类型

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值