MSBuild 自定义派生生成事件已弃用
任何生成扩展性(主要是自定义任务)的 BuildEventArgs 的任何子类的自定义派生生成事件已弃用。
旧行为
以前,可以从 BuildEventArgs 的任何子类派生,并在自定义任务和其他生成扩展性点中自由使用这些类型。
新行为
从 .NET 8 开始,如果你的代码使用派生自 BuildEventArgs 的任何类型并且你使用 .NET 8 版本的 MSBuild(即命令行)进行生成,则会发出生成错误:
在自定义事件类型“MyCustomBuildEventArgs”的序列化过程中使用不安全的 BinaryFormatter。 这将很快被弃用。 请改用 Extended*EventArgs。 详细信息:https://aka.ms/msbuild/eventargs
如果你通过 Visual Studio 生成,那么除非通过将 MSBUILDCUSTOMBUILDEVENTWARNING
环境变量设置为 1(可在 Visual Studio 17.8 及更高版本中实现)来选择加入,否则行为不会有变化。
引入的版本
.NET 8 RC 1
更改类型
此更改为行为更改。
更改原因
BinaryFormatter 序列化在 .NET 8 及更高版本中过时。 任何对 BinaryFormatter 的使用都会在运行时引发异常。 由于 MSBuild 自定义派生生成事件使用 BinaryFormatter,如果你在生成中使用了这些事件,则生成会崩溃。 新的生成错误提供了更正常的失败。
建议的操作
使用以下新引入的内置事件之一实现扩展性,以替代你的自定义派生生成事件:
- ExtendedCustomBuildEventArgs
- ExtendedBuildErrorEventArgs
- ExtendedBuildMessageEventArgs
- ExtendedBuildWarningEventArgs
或者,你可以通过将环境变量 MSBUILDCUSTOMBUILDEVENTWARNING
显式设置为 1
以外的值来暂时禁用检查。