返回介绍

博客

帮助文档

从 netstandard 迁移到 .Net Framework

发布于 2024-08-03 14:42:57 字数 3735 浏览 0 评论 0 收藏 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文