Eventos de compilación derivados personalizados de MSBuild en desuso
Los eventos de compilación derivados personalizados de cualquier subclase de BuildEventArgs por cualquier extensibilidad de compilación (sobre todo, tareas personalizadas) han quedado en desuso.
Comportamiento anterior
Anteriormente, podría derivar de cualquier subclase de BuildEventArgs y usar esos tipos libremente en tareas personalizadas y otros puntos de extensibilidad de compilación.
Comportamiento nuevo
A partir de .NET 8, se emite un error de compilación si el código usa cualquier tipo derivado de BuildEventArgs y se compila con la versión de .NET 8 de MSBuild, es decir, desde la línea de comandos:
Uso de BinaryFormatter no seguro durante la serialización del tipo de evento personalizado "MyCustomBuildEventArgs". Esto quedará pronto en desuso. Use Extended*EventArgs en su lugar. Más información: https://aka.ms/msbuild/eventargs
Si compila desde Visual Studio, no hay ningún cambio en el comportamiento a menos que opte por establecer la variable de entorno MSBUILDCUSTOMBUILDEVENTWARNING
en 1 (disponible en la versión 17.8 y posteriores de Visual Studio).
Versión introducida
.NET 8 RC 1
Tipo de cambio
Este es un cambio de comportamiento.
Motivo del cambio
La serialización BinaryFormatter está obsoleta en .NET 8 y versiones posteriores. Cualquier uso de BinaryFormatter produce una excepción en tiempo de ejecución. Dado que los eventos de compilación derivados personalizados de MSBuild usan BinaryFormatter, la compilación se bloquearía si usa estos eventos en la compilación. El nuevo error de compilación proporciona un error más estable.
Acción recomendada
Use uno de los siguientes eventos integrados recientemente introducidos para la extensibilidad en lugar del evento de compilación derivado personalizado:
- ExtendedCustomBuildEventArgs
- ExtendedBuildErrorEventArgs
- ExtendedBuildMessageEventArgs
- ExtendedBuildWarningEventArgs
Como alternativa, puede deshabilitar temporalmente la comprobación estableciendo explícitamente la variable de entorno MSBUILDCUSTOMBUILDEVENTWARNING
en un valor distinto de 1
.