Files
Obsidian_Unity/CSharp学习/dot-net.md
T
2026-05-03 14:06:26 +08:00

12 lines
1.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
![[deepseek_mermaid_20260204_d63c65.png]]
.net平台从最开始是使用的.net framework,它可以跨语言但是不能跨平台,后面第三方提出了mono的解决方案,可以给.net framework用来跨平台,但这是第三方的解决方案。后面微软自己推出了.net core,作为官方的,开源的,跨平台的解决方案。后面在2020年,提出了统一的.net 5,她统一了所有的平台,包括.net frame和.net core。这是.net的生态发展史。
下面我们讲讲mono和IL2CPP两种跨平台的方式。
mono的工作流程是
monoC#代码->IL代码->CLR运行时JIT计时编译为机器码从而运行。
IL2CPP:C#代码->IL代码->C++代码->本地编译C++代码为机器码->运行。
区别就在于对于IL代码的处理,IL2CPP是AOT提前编译,提前就处理好代码,最终打包出去的,只有原生机器码,没有任何其他代码。
mono的话,打包出去的还存储这IL代码,在运行时会有一个虚拟机去编译IL代码为机器码去运行。
还有一个问题:Unity怎么知道我们的游戏需要打包到那个平台,从而调用该平台的C++编译器来编译c++代码让我们可以使用呢?
Unity本身并不提供所有的C++编译器,而是我们在打包不同平台的时候,比如Android需要安装NDK,打包windows需要安装vs等等,在这里我们就可以使用这些工具的C++编译器来帮助我们进行编译。所以开发的时候要提前在build里面选好平台