c# - Unity3D,为什么 "scripting runtime version"是.NET3.5而 "api compatibility level"是.NET2.0? PlayerSettings 中的两个选项究竟是什么意思?

标签 c# .net unity3d mono

这几天一直在用Unity3D,查了.NET系统的手册。但是感觉很迷茫。

在Unity3D Player Settings中,有“scripting runtime version”和“api compatibility level”两个选项。

当我将“脚本运行时版本”设置为“.NET 3.5 等效版本”时,我可以在“.NET 2.0”和“.NET 2.0 子集”之间选择“api 兼容级别”。但是为什么这两个期权值(value)不同呢?他们不应该引用相同的 .NET 版本值吗?两个不同选项中的“.NET”一词是什么意思? Unity3D 实际使用哪个 .NET 版本?

而且,当我将“脚本运行时版本”设置为“.NET 4.6 等效版本”时,我可以将“api 兼容级别”选择为“.NET4.6”。但是为什么此时这两个选项的值是一样的呢?

另一方面,我在微软网站上找到一些介绍.NET系统的手册,上面说有.NET Standard、.NET Framework、.NET Core和Mono。根本没有独立的“.NET”实体。

那么,Unity Player Settings的“scripting runtime version”和“api compatibility level”中的.NET version到底是什么意思呢?

更新

事实:

  1. Unity2017.1.0前没有“脚本运行时版本”选项

  2. .NET Framework有很好的落后compatibility ,这意味着 .NET 2.0 组件能够在 .NET 3.5 上不间断地运行。

  3. 当我们谈论 .NET 版本时,它通常指的是 .NET Framework 的版本。

  4. Unity3D 正在将运行时更新到 .NET 4.6。

推断:

  1. .NET Framework 具有良好的向后兼容性,mono 也是如此。

  2. Unity3D 使用单声道作为运行时,相当于.NET 3.5

  3. Unity3D 仅使用 .NET 2.0 功能进行编译,但具有可运行的 .NET 3.5 运行时。这就是为什么当“脚本运行时版本”是“.NET 3.5”时“api 兼容级别”是“.NET 2.0”

  4. Unity3D 正在更新以在 .NET 4.6 运行时上使用 .NET 4.6 功能。这就是为什么当“脚本运行时版本”是“.NET 4.6”时“api 兼容级别”是“.NET 4.6”

再次更新

这是另一个相关问题:Why does Unity use .NET 2.0 when Mono supports .NET 3.5?

和相关主题:https://forum.unity.com/threads/to-linq-or-not-to-linq.223887/

最佳答案

What does .NET version in "scripting runtime version" and "api compatibility level" of Unity Player Settings actually mean?

API 兼容性级别:

只是提供给您的一个选项,用于指定编译器应如何编译项目。它们是相同的.Net 版本。请参阅下文了解每个选项的内容。

.NET 2.0 子集

  • 减小应用大小
  • 增加启动时间
  • 为了完成 上面提到的事情。这主要包括 .NET 套接字或网络 API。

.NET 2.0 则相反。

  • 具有更大的构建尺寸
  • 启动时间有点长
  • 可能包括所有非基于平台的标准 .NET API 在 build 中

脚本运行时版本:

您可以在此处选择要使用的 .NET 版本。更改此项将允许您使用选择的 .NET API 和运行时版本。

因此,选择 .NET 4.6 可让您使用 .Net 4.6 API 编写代码,Unity 将在您的游戏中包含 .NET 4.6 运行时。同样的事情也适用于 .NET 3.5。

想知道为什么他们都将“等效”作为后修复?这是因为一些 API 和功能在 Unity 中被删除或剥离。您会注意到这一点,但这仅适用于少量的 .NET API。他们中的大多数都得到支持。

And, when I set "scripting runtime version" to ".NET 4.6 Equivalent", I can choose "api compatibility level" as ".NET4.6". But why these two option values are the same at this time???

没有。这是真的。您只能在 “脚本运行时版本” 选项中看到这两个选项,但您不能选择 .NET 3.5" if "API 兼容级别" 设置为 ".NET 4.6"

如果您尝试这样做,Unity 应该重新启动,然后为“脚本运行时版本” 选择".NET 3.5" 并自动更改"API 兼容级别".NET 4.6"".NET 3.5"

因此,如果 ".NET 4.6" 作为 "API 兼容级别",您必须还选择 ".NET 4.6 “ 作为 “脚本运行时版本”

Which .NET version is Unity3D actually using?

您在“脚本运行时版本” 菜单下选择的版本。

I wonder why I only have to select ".NET 2.0" or ".NET 2.0 Subset" for "api compatibility level" when setting "scripting runtime version" to ".NET 3.5". When "scripting runtime version" equals ".NET 3.5", I think "api compatibility level" should be ".NET 3.5" or ".NET 3.5 Subset". That is weird here in Unity. What went wrong here?

许可。

存在许可问题。 Unity 公司更新运行时的唯一方法是向 Xamarin 支付大量资金,因为 Xamirin 使 Unity 正在使用的单声道运行时处于 LGPL 之下。他们不想那样做。我注意到在与 Microsoft 和 joined 合作后,他们能够更新单声道运行时。 .NET 基金会去年。

关于c# - Unity3D,为什么 "scripting runtime version"是.NET3.5而 "api compatibility level"是.NET2.0? PlayerSettings 中的两个选项究竟是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47813465/

相关文章:

c# - Master-Detail 使用 Razor、ASP.NET MVC 3 和 .NET 4.0 创建 View

c# - 类型 'System.Collections.Generic.IEnumerable <string>' 无法隐式转换为 'string []'

c# - SQL 级函数是否可用于 LINQ to Entity 查询?

.net - windows phone 应用程序意外退出,无一异常(exception)

c# - 为什么以及如何仅在启动时使用 DI 容器?

c# - 如何计算特定方向垂直于多边形表面的3D矢量

c# - 空合并运算符赋值给自己

c# - 如何锁定 RectTransform 的字段

c# - 将类型 Task<IEnumerable> 转换为类型 IEnumerable

c# - 使用 .NET(控制台应用程序)发布多个文件和表单值