任何生成扩展性(主要是自定义任务)的 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,因此如果在生成中使用这些事件,则生成会崩溃。 新的生成错误提供了更正常的失败。
建议的措施
使用以下新引入的内置事件之一来实现扩展性,而不是使用自定义派生的构建事件:
- ExtendedCustomBuildEventArgs
- ExtendedBuildErrorEventArgs
- ExtendedBuildMessageEventArgs
- ExtendedBuildWarningEventArgs
或者,你可以通过将环境变量 MSBUILDCUSTOMBUILDEVENTWARNING
显式设置为 1
以外的值来暂时禁用检查。