Godot C# 迁移至 .NET 8

Godot C# 迁移至 .NET 8

沫萝ㅤ

2025-01-08 发布774 浏览 · 0 点赞 · 0 收藏

作者:Raul Santos     日期:2025年1月2日
原文地址:https://godotengine.org/article/godotsharp-packages-net8

每年 11 月,微软都会发布一个新版本的 .NET,并交替进行长期支持(LTS)和标准支持(STS)。所有发行版的质量都是相同的,唯一的区别是支持时间:LTS 版本支持 3 年的维护周期,而 STS 版本仅支持一年半。

随着 Godot 4.0 的发布,我们将 C# 包的目标版本从 Mono 迁移到了 .NET 6。该版本的 .NET 于 2021 年 11 月 8 日发布,并于 2024 年 11 月 12 日结束了支持。随着 .NET 6 结束支持,Godot 4.4 中的 C# 包将目标定为当前的 LTS 版本,即 .NET 8。感谢 RedworkDE 和 Paul Joannon 在 GH-92131中的出色工作。

这对用户来说意味着什么?

从 Godot 4.4 开始,您的项目需要将目标定为 .NET 8 或更新版本,否则将与新的 GodotSharp 包不兼容。您仍然可以使用目标定为更早版本的 .NET 的其他库。

当用 Godot 4.4 打开现有项目时,项目将自动升级成以 .NET 8.0 为基准版本。如果您的项目已经将目标定为 .NET 8 或更高版本,则不会有任何变化。该功能已在 GH-100195中实现。

为什么花了这么长时间?

库的目标 .NET 版本将成为该库用户所需的最低版本。也就是说,如果 GodotSharp 包目标定为 .NET 7.0,则您的游戏项目需要将目标定为 .NET 7.0 或更新版本。而我们不想强迫用户升级到非 LTS 版本。

当 .NET 8 于 2023 年 11 月发布时,本应是将 Godot C# 包的目标版本提升的好时机,因为 .NET 8 是一个 LTS 版本。不幸的是,.NET 7 中的一些破坏性变更阻止了我们的升级,进行所需的更改花费了比我们预期更长的时间。

然而,用户始终可以在项目中使用最新版本的 .NET。直到现在,.NET 6 一直是最低要求版本,但最新版本(甚至是预发布版本)始终从第一天起就得到支持。在 Godot 4.4 版本中,新的最低要求版本是 .NET 8,但一如既往,您的项目可以将目标定为最近的 STS 版本 .NET 9 和未来发布的任何新版本。

那么旧版 Godot 呢?

我们鼓励用户升级到最新版本的 Godot,将会努力防止破坏兼容性的行为,以确保您可以安全地在新版本发布时进行升级。建议您参与测试预发布(Pre-Release)版本,并在发现任何错误时告知我们,以便我们在稳定版本发布前修复它们。

旧版 Godot 会继续将目标版本定为 .NET 6。我们不会在补丁更新中更改目标版本,因为那将是一个重大破坏性变更。如果您仍然需要目标定为 .NET 6,可以停留在旧版 Godot 上。但我们强烈建议您更新,以获得最新版本 Godot 和 .NET 运行时中包含的所有修复和改进。

未来的 .NET 发行版呢?

Godot 始终支持最新版本的 .NET。Godot 的 C# 目标版本只是您的项目可以设为目标的最低版本,但您始终可以自由地使用更新版本的 .NET。要在项目中设置目标为最新发布的 .NET 9 版本,您只需安装最新版本的 .NET SDK 并更改 .csproj 中的 TargetFramework 属性:

<Project Sdk="Godot.NET.Sdk/4.3.0">
  <PropertyGroup>
    <!-- 目标版本:.NET 9 -->
    <TargetFramework>net9.0</TargetFramework>
    <EnableDynamicLoading>true</EnableDynamicLoading>
  </PropertyGroup>
</Project>

我们会继续在发布新版本时将 C# 更新到最新的 LTS 版本。下一个 LTS 版本是 .NET 10,预计于 2025 年 11 月发布。

附注:

  1. .NET 7 引入了新的 scoped 关键字。此功能在一些底层场景中破坏了兼容性,影响了 Godot。
  1. 虽然 Godot 通常支持预发布版本的.NET,但用户可能需要通过将 DOTNET_ROLL_FORWARD_TO_PRERELEASE 环境变量设置为 1 来启用它们。请记住,预发布版本仍在开发中,因此可能存在问题。
  1. 译者注:本文废话有点多,比如反复提及可以使用更新的版本的.NET。
请前往 登录/注册 即可发表您的看法…