MSBuild 自定义派生生成事件已弃用

任何生成扩展性(主要是自定义任务)的 BuildEventArgs 的任何子类的自定义派生生成事件已弃用。

以前的行为

以前,可以从任何子类 BuildEventArgs 派生,并在自定义任务和其他生成扩展点中自由使用这些类型。

新行为

从 .NET 8 开始,如果代码使用派生自 BuildEventArgs 的任意类型并使用 .NET 8 版本的 MSBuild(即命令行生成)生成,则会发出生成错误:

在自定义事件类型“MyCustomBuildEventArgs”的序列化过程中使用不安全的 BinaryFormatter。 这将很快弃用。 请改用 Extended*EventArgs。 详细信息:https://aka.ms/msbuild/eventargs

从 Visual Studio 版本 17.10 开始,相同的行为适用于 Visual Studio 中的生成。

已引入的版本

.NET 8 RC 1

更改类型

此更改为行为更改

更改原因

BinaryFormatter 序列化在 .NET 8 及更高版本中已过时。 任何使用 BinaryFormatter 都不受保护,并在运行时引发异常。 由于 MSBuild 自定义派生生成事件使用 BinaryFormatter,因此如果在生成中使用这些事件,则生成会崩溃。 新的生成错误提供了更正常的失败。

使用以下新引入的内置事件之一来实现扩展性,而不是使用自定义派生的构建事件:

或者,你可以通过将环境变量 MSBUILDCUSTOMBUILDEVENTWARNING 显式设置为 1 以外的值来暂时禁用检查。

受影响的 API