.Net框架并非为跨平台设计。这取决于您是否希望包括Linux在内。如果您想知道.NET最初是否设计为针对Linux,则答案是否定的。但是,有.NET Compact Framework,它允许.NET代码在Xbox 360和Windows Phone上运行。现在有.NET Core,这是一个免费且开源的框架,专为跨平台设计,特别是Windows、Mac和Linux。
是的,.Net框架的目标是以统一的方式设计程序,并且它们必须在执行引擎中运行。正确的术语是“Execution Engine”,而不是VM,尽管它们都属于同一类。不要将EE视为vmWare之类的东西,其中CPU指令被不断地模拟。像Java一样,.NET是一种p-code形式,但.NET程序集会JIT到当前CPU上,以提高性能并在CPU上本地运行。[1]
Mono是一个开源的.NET Framework版本,旨在跨平台使用。使用它构建的程序可以在任何有Mono虚拟机的地方运行。
是的,.NET Core也有同样的功能。
使用Mono Framework构建的程序不能在.NET虚拟机上运行,或者与之不完全兼容。
Mono Framework的许多版本并不是等效的.NET Framework。
例如:
- Mono在.NET 3.0中不支持WPF。
- Mono在.NET 3.0中不支持WWF。
- Mono在.NET 4.0中不支持CodeContracts。
Unity不仅使用Mono Framework,在编辑、构建和运行游戏时还使用Unity Script。
无论您选择哪种语言,运行时都存在很大的差异。例如,当通过Unity Web Player针对Web浏览器进行定位时,不存在.NET/Mono EE。平台是Unity Web Player。从这个意义上说,在目标平台上不需要.NET/Mono。[3]
- 使用Unity构建的游戏具有嵌入式mono框架和/或mono虚拟机。
不正确,请参见上文
- 我不需要为构建或运行Unity游戏而安装.Net Framework。
正确
- 我在Unity中编写的C#脚本在构建前后都由mono虚拟机运行。所有Unity引擎公共代码库都是C++封装的,实际上并不是C#,因此它们在C++引擎端运行。
不正确,您选择使用哪种语言来编写Unity游戏与运行时是否存在.NET/Mono EE之间没有关联。
- mono框架工具和库在游戏中使用mono虚拟机运行。
这要看情况。
- 在您的桌面上运行Unity编辑器时?- 是的
- 部署在智能设备/浏览器上运行?- 不是
- 使用.Net Framework构建的Dll与Mono不完全兼容。
不正确。实际上,可能是Mono与等效的.NET Framework不完全兼容。[2]
另请参阅
1 "CLR是虚拟机吗?", MSDN
2 兼容性, Mono
3 Unity Web Player如何工作?, Quora
4
.NET Core Framework - 使用 .NET Framework 跨平台,MSDN