Version: 6000.3
语言: 中文
Unity .NET 功能
向 .NET Framework 添加类库引用

.NET 的 API 兼容性级别

Unity 支持两个不同的 .NET API 兼容性级别,您的项目代码可以根据这些级别进行编译。选择的兼容性级别决定了哪些 .NET 类库可用于 C# 代码。可用级别包括:

  • .NET Standard 2.1.NET Foundation 发布的 .NET Standard 2.1。这是默认的 API 兼容性级别。
  • .NET Framework:由 Microsoft 发布的 .NET Framework 4.8,以及 .NET Standard 2.1 中的其他 API。

若要更改 .NET 配置文件,请执行以下作:

  • 在 Unity 编辑器中,转到 编辑 > 项目设置。在“播放器”选项卡中,导航到“其他设置”选项卡,然后在“配置”部分中,将“API 兼容性级别”设置为所需的设置。
  • 从代码中,使用PlayerSettings.SetAPICompatibilityLevel.

选择 API 兼容性级别

通常,对于所有新项目,首选 .NET Standard 而不是 .NET Framework,原因如下:

  • .NET Standard 是一个较小的 API 图面,因此具有较小的实现。这减小了最终可执行文件的大小。
  • .NET Standard 具有更好的跨平台支持,因此代码更有可能跨所有平台运行。尽管某些平台不完全支持 NET Standard,但 .NET Framework 选项不太适合跨平台兼容性。.NET Framework 配置文件包括 .NET Standard 配置文件中的所有 API 以及其他 API,其中一些 API 可能在少数平台上运行或根本无法运行。
  • 所有 .NET 运行时都支持 .NET Standard,因此,使用 .NET Standard 时,代码可以在更多运行时环境(例如 .NET Framework、.NET Core、Xamarin、Unity)中工作。
  • .NET Standard 将更多错误移动到编译时。.NET Framework 中的许多 API 在编译时可用,但在某些平台上的实现在运行时引发异常。

例如,如果需要为较旧的现有应用程序提供支持,则 .NET Framework API 兼容性级别可能很有用。

托管插件

托管插件使用 Visual Studio 等工具创建的托管 .NET 程序集,用于 Unity 中。更多信息
请参阅术语表
是在 Unity 外部管理并编译为动态链接库 (DLL) 的 .NET 程序集。您可以使用托管插件在 Unity 外部创建的一组代码,用于在 Unity 中创建功能。可以在 Unity 中使用两种插件:托管插件(使用 Visual Studio 等工具创建的托管 .NET 程序集)和本机插件(特定于平台的本机代码库)。更多信息
请参阅术语表
与任一可用的 API 兼容性级别。但是,支持级别因编译托管插件所依据的 API 级别而异。由于 .NET Framework API 图面大于 .NET Standard,因此,如果项目面向 .NET Standard,则它可能不支持针对 .NET Framework 编译的所有插件。下表显示了 Unity 支持的配置:

托管插件编译目标 .NET 标准 2.1 .NET 框架 4.x
.NET Standard(任何版本) 支持 支持
.NET Framework(任何版本) 支持有限 支持
.NET Core(任何版本) 不支持 不支持

第三方 .NET 库

仅使用已在各种 Unity 配置和平台上广泛测试的第三方 .NET 库。

单声道Unity 中使用的脚本后端。更多信息
请参阅术语表
脚本后端的实时 (JIT) 编译支持在应用程序运行时生成动态 C#/.NET 中间语言 (IL) 代码。这IL2CPP Unity 开发的脚本后端,在为某些平台构建项目时,可以将其用作 Mono 的替代方案。更多信息
请参阅术语表
脚本后端的提前 (AOT) 编译不支持动态代码生成。

使用第三方库时,请务必考虑这一点,因为它们可能具有不同的 JIT 代码路径和AOT编译提前(AOT)编译是除iOS之外的所有平台都用来优化构建播放器大小的优化方法。 。更多信息
请参阅术语表
,或者它们可能使用依赖于动态生成代码的代码路径。有关如何在运行时生成代码的更多信息,请参阅 Microsoft 的 ModuleBuilder 文档。

第三方库中 JIT 和 AOT 代码路径的性能特征可能显着不同。AOT 通常会减少启动时间,因此适合较大的应用程序,但会增加二进制文件大小以适应编译的代码。AOT 在开发过程中也需要更长的时间来构建。

JIT 会根据运行它的平台在运行时进行调整,这可以提高运行时性能,但代价是应用程序启动时间可能会更长。因此,建议在编辑器和目标平台上分析你的应用程序。有关更多信息,请参阅 Profiler 概述

查看第三方库时,请考虑以下方面:

  • 兼容性:第三方库可能与某些 Unity 平台和脚本后端不兼容。
  • 性能:与其他 .NET 运行时相比,第三方库在 Unity 中可能具有非常不同的性能特征。
  • AOT 二进制大小:第三方库可能会显着增加 AOT 二进制大小,因为库使用的依赖项数量较多。

.NET System 库

Unity 支持许多平台,并且可能会使用不同的脚本后端在Unity 中为脚本提供支持的框架。Unity 支持三种不同的脚本后端,具体取决于目标平台:Mono、.NET 和 IL2CPP。但是,通用 Windows 平台仅支持两个:.NET 和 IL2CPP。更多信息
请参阅术语表
取决于平台。.NET 中的库System在某些情况下,命名空间需要特定于平台的实现才能正常工作。虽然 Unity 试图尽可能多地支持 .NET 生态系统,但 .NET 的某些部分SystemUnity 明确不支持的库:

  • Unity 不对 .NET 的性能或分配做出任何保证System跨 Unity 版本的库。
  • 通常,Unity 不会修复 .NET 中的任何性能回归System图书馆。
  • Unity 不支持System.Drawing库,并且不保证它可以在所有平台上运行。

提示: 分析 .NET System 库在所有目标平台上的使用情况,因为它们的性能特征可能会因脚本后端、.NET 版本和您使用的 API 兼容性级别而异。

传输层安全性 (TLS) 1.2

UnityWebRequestAPI 和所有 .NET Framework Web API 在除 Web 之外的所有平台上完全支持 TLS 1.2。Web 平台使用运行应用程序的浏览器和 Web 服务器中的安全设置。特定于平台的本地证书存储会自动验证 TLS 证书(如果可用)。如果无法访问证书存储,Unity 会使用嵌入式根证书存储。

其他资源

Unity .NET 功能
向 .NET Framework 添加类库引用