文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
从 netstandard 迁移到 .Net Framework
Unity在打包过程中,会把对netstandard.dll的引用全部转换最终的mscorlib.dll之类的引用,导致原始代码 的引用关系跟最终的引用关系有很大不同。这个差异会导致Generate/All/*
下命令会运行出错。同时由于 HybridCLR/CompileDll/*
命令编译出的热更新dll仍然引用了netstandard
而是不是最终的mscorlib之类的程序 集,导致加载和运行热更新dll时,会出现找不到netstandard中类型的错误。因此,HybridCLR默认要求使用Net Framework
Api Level。
有一些项目原先工作在.net standard Api Level上,为了能够接入HybridCLR后正常工作,需要执行一些迁移工作。 所幸,这些工作都是一次性的。
迁移步骤
迁移主要包含两步:
- 将项目内的预编译好的基于netstandard的dll转换为基于.net framework的dll
- 项目的Api Level 切换为 .Net Framework
转换基于netstarndard的外部dll
如果能直接找到该外部dll的基于.Net Framework的版本,替换项目对应的dll即可。如果找不到, 则可以利用Unity的打包过程会生成最终基于.Net Framework的aot dll的特性,生成该dll的 .Net Framework的版本。具体操作如下:
- 确保主工程已经有代码引用了此外部dll,而不仅仅是热更新代码中引用了该dll
- 在任意一个link.xml中perserve这个dll,如在
Assets/link.xml
里添加<assembly fullname="xxx.dll" preserve="all"/>
- 运行
HybridCLR/Generate/AOTDlls
- 在
{project}/HybridCLRData/AssembliesPostIl2CppStrip/{target}
裁剪目录中获得该dll对应的文件 - 用该dll替换项目中的对应dll即可
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论