Oleadas de cambios

Una oleada de cambios es un conjunto de cambios de comportamiento en MSBuild que puede optar por no recibir especificando una marca concreta como variable de entorno. El propósito de esto es advertirle de cambios potencialmente perjudiciales para que tenga flexibilidad para adaptarse a estos cambios antes de convertirse en funcionalidad estándar. Todas las características de una oleada de cambios específica solo se pueden habilitar o deshabilitar juntas, no individualmente.

Al actualizar a una nueva versión de MSBuild, los cambios potencialmente disruptivos se habilitan de forma predeterminada, pero si una funcionalidad afecta negativamente a la compilación, puede deshabilitar fácilmente ese conjunto de cambios. Cada oleada de cambios se identifica mediante un número de versión de MSBuild (por ejemplo, 16.8), pero establecer la oleada de cambios solo controla determinadas características que tienen el potencial de afectar al proceso de compilación, no todos los cambios en esa versión de MSBuild. Aparece una lista de las características de cada oleada de cambios más adelante en este artículo. Al deshabilitar una oleada de cambios también se deshabilitan las oleadas de cambios de versiones superiores.

Optar por no recibir las características de una oleada de cambios

Para deshabilitar las características de una oleada de cambios, establezca la variable de entorno MSBuildDisableFeaturesFromVersion en la oleada de cambios (o versión de MSBuild) que contiene la característica que desea deshabilitado. Esta es la versión de MSBuild para la que se desarrollaron las características. Consulte la correspondencia entre las olas de cambios y las siguientes características.

Los procesos persistentes de MSBuild conservan el valor de MSBuildDisableFeaturesFromVersion con el que se iniciaron. Después de cambiar la variable de entorno, apague los procesos de compilación persistentes antes de ejecutar otra compilación. Para las compilaciones que se ejecutan con la CLI de .NET, use dotnet build-server shutdown. En las compilaciones ejecutadas con Visual Studio o MSBuild.exe, cierre Visual Studio y finalice los MSBuild.exe procesos restantes. De lo contrario, los procesos reutilizados podrían seguir usando el valor anterior y los proyectos integrados en paralelo podrían usar valores diferentes.

Valores de MSBuildDisableFeaturesFromVersion

Si no establece MSBuildDisableFeaturesFromVersion en una oleada de cambios válida, recibirá una advertencia o se establecerá de forma predeterminada una oleada concreta. En la tabla siguiente se muestran los valores posibles:

Valor MSBuildDisableFeaturesFromVersion Resultado ¿Recibe una advertencia?
Unset Habilite todas las oleadas de cambios, lo que significa que todas las características detrás de cada oleada de cambios están habilitadas. No
Cualquier oleada de cambios válida y actual (por ejemplo, 16.8) Se deshabilitan todas las características que hay detrás de una oleada de cambios 16.8y posteriores. No
Valor no válido (por ejemplo, 16.9 cuando las ondas válidas se 16.8 y 16.10) Utiliza como valor predeterminado el valor válido más cercano (ascendente). Por ejemplo, al establecer 16.9, se toma como predeterminado 16.10. No
Fuera de rotación (por ejemplo, 17.1 cuando la onda más alta es 17.0) Se fija en el valor válido más cercano. Por ejemplo, 17.1 se sujeta a 17.0y 16.5 se sujeta a 16.8 Sí
Formato no válido (por ejemplo, 16x8, 17_0, garbage) Habilite todas las oleadas de cambios, lo que significa que todas las características detrás de cada oleada de cambios están habilitadas. Sí

Oleadas de cambios y características asociadas

Rotación actual de ondas de cambio

18.10

18.9

18.8

18.7

18.6

18.5

18.4

Conjuntos de cambios que se eliminarán en la versión que acompaña a .NET 11

18.3

17.14

17.12

17.10

Las ondas de cambio ya no están en rotación

16.8

16.10

17.0

17.4

17.6

17.8

Preguntas más frecuentes

¿Por qué se dejan fuera de la rotación las demás versiones de las oleadas de cambios?

Creemos que esto es suficiente para discutir con los afectados y ayudar a adaptarse a los cambios.

¿Por qué una variable de entorno y no una propiedad de proyecto?

Hay escenarios en los que queremos colocar una característica en una oleada de cambios antes de que MSBuild haya cargado el proyecto. Por ese motivo, las oleadas de cambios requieren el uso de variables de entorno.

¿Por qué es mejor optar por no recibir que optar por recibir?

Para nosotros es mejor optar por no recibir, si no, es probable que recibamos información limitada cuando una característica afecte a las compilaciones de un cliente.