Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
-
Resolver las rutas relativas del proyecto tomando como referencia el directorio actual lógico de Unix desde
PWD, para que las compilaciones en directorios con enlaces simbólicos produzcan rutas completas del proyecto estables y las rutas de salida relacionadas. -
Restore pasa
ExcludeRestorePackageImports=truecomo propiedad global, de modo que la restauración de NuGet ya no desencadena una segunda evaluación de cada proyecto. -
-getProperty/-getItem(sin destino) detienen la evaluación tras la pasada que genera los datos solicitados, en lugar de ejecutar una evaluación completa, lo que evita pasadas posteriores como el registro de destinos.
18.9
- GenerateResource: las entradas tipadas de datos o metadatos de ResX en los archivos Mark-of-the-Web ahora se consideran no confiables y se bloquean con MSB3821; desbloquee el archivo (o establezca MSBUILDDISABLEFEATURESFROMVERSION=18.9) para restaurar el comportamiento anterior. Las entradas ResXFileRef siempre se bloquean independientemente de esta oleada.
- Los búferes de las canalizaciones con nombre de TaskHost pasan a tener un tamaño predeterminado de 1 MB (antes era de 128 KB), lo que reduce la presión de retorno en el envío para los paquetes TaskHostConfiguration de gran tamaño. Ajustable a través de MSBUILDNODECONNECTIONBUFFERSIZE
18.8
- Tarea RAR: en múltiples propiedades de entrada, resolver las rutas relativas con respecto al directorio del proyecto (no con respecto al directorio de trabajo actual del proceso)
- Los registradores de consola, consola paralela y terminal imprimen las rutas de los archivos de registro generados por los registradores registrados (por ejemplo, el registrador de archivos y el registrador binario) como parte del resumen final de la compilación.
18.7
- Reintentos de tareas de copia en ERROR_ACCESS_DENIED en plataformas no Windows para gestionar conflictos transitorios de bloqueo (p. ej., sistemas de archivos CoW de macOS)
- Corregir los proyectos de sitio web de ASP.NET para resolver las dependencias de netstandard2.0 - Pasar TargetFrameworkVersion a la tarea RAR y copiar la fachada netstandard.dll para proyectos web de .NET Framework 4.7.1 o posterior.
18.6
- Optimización de AbsolutePath.GetCanonicalForm: evitar las costosas llamadas a Path.GetFullPath cuando las rutas de acceso no necesitan canonicalización
- TaskHostTask reenvía las propiedades globales del nivel de solicitud (p. ej., MSBuildRestoreSessionId) al TaskHost fuera de proceso en el modo -mt
- Corregir ShouldTreatWarningAsError en OOP TaskHost al comprobar la colección incorrecta (WarningsAsMessages en lugar de WarningsAsErrors)
- Corregir el bloqueo de ToolTask cuando la herramienta genera procesos secundarios que heredan identificadores de canalización stdout/stderr
18.5
- Las tareas FindUnderPath y AssignTargetPath ya no generan una excepción ante caracteres de ruta no válidos al usar TaskEnvironment.GetAbsolutePath
- AssignTargetPath en Linux respeta la distinción entre mayúsculas y minúsculas del sistema de archivos en lugar de ignorarla siempre
18.4
Conjuntos de cambios que se eliminarán en la versión que acompaña a .NET 11
18.3
17.14
- ~ . Compatibilidad con .SLNX - uso del nuevo analizador para .sln y .slnx~ se ha revertido tras descubrirse problemas de compatibilidad
-
Compatibilidad con la configuración regional personalizada en RAR- consulte 11607 para obtener más información. - Telemetría de VS
17.12
- Log TaskParameterEvent para parámetros escalares
- Convert.ToString durante una evaluación de propiedades usa InvariantCulture para todos los tipos
- Corrección del uso compartido excesivo de los resultados de compilación en ResultsCache
- Agregar ParameterName y PropertyName a TaskParameterEventArgs
- Emitir las propiedades eval si lo solicita cualquier destino
- Cargar Microsoft.DotNet.MSBuildSdkResolver en el contexto de carga predeterminado (solo para MSBuild.exe)
17.10
-
La configuración de AppDomain se serializa sin usar BinFmt : la característica solo se puede rechazar si BinaryFormatter está permitido en tiempo de ejecución editando
MSBuild.runtimeconfig.json. Tenga en cuenta que cualquier uso de BinaryFormatter no es seguro. - Advertencia sobre los eventos personalizados de serialización de forma predeterminada en .NET Framework
- Procesamiento de datos de resolución del SDK de caché en todo el mundo
- Los parámetros de destino se interpretarán sin comillas, lo que significa que el símbolo ';' en el nombre del parámetro de destino siempre se tratará como separador.
- Agregar metadatos de enlace a Recursos en el destino AssignLinkMetadata
- Cambiar la salida del modificador de versión para finalizar con una nueva línea
- Cargar NuGet.Frameworks en AppDomain secundario (solo MSBuild.exe)
- Actualizar rasgos cuando se ha cambiado el entorno
- La tarea Exec no recorta los espacios en blanco iniciales de ConsoleOutput
- Agregar las sobrecargas de [MSBuild]::StableStringHash
- Mantener la codificación de salida y error estándar coherente con la página de códigos de la consola para ToolTask
Las ondas de cambio ya no están en rotación
16.8
- Habilitar noWarn
- Truncamiento de los mensajes de registro omitidos de destino/tarea a 1024 caracteres
- No expandir los globs de unidad completa con una condición falsa
16.10
- Error cuando la expansión de una propiedad en una condición tiene un espacio en blanco
- Permitir ubicación personalizada de CopyToOutputDirectory con TargetPath
- Permitir que los usuarios que tengan determinados caracteres especiales en su nombre de usuario realicen compilaciones correctamente al usar exec
- Las operaciones de restauración fallan cuando un SDK no se puede resolver
- Optimizar la evaluación global
17.0
- Scheduler debe respetar BuildParameters.DisableInprocNode
- No compile expresiones regulares de globbing en .NET Framework
- valor predeterminado para copiar de forma transitiva los elementos de contenido
-
Ahora, los ensamblados de referencia ya no se colocan en el directorio
binpor defecto (revertido aquí y restablecido aquí) - Mejora de la experiencia de depuración: agregar conmutador global MSBuildDebugEngine; Insertar registrador binario desde BuildManager; imprimir gráfico estático como archivo .dot
- Corrección del interbloqueo en BuildManager frente a LoggingService
- Optimizar el nivel de diag para el registrador de archivos y el registrador de consola
- Comprobaciones actualizadas de archivos inmutables optimizados
- Agregar Microsoft.IO.Redist para la enumeración de directorios
- Almacenamiento en caché para todo el proceso de ToolsetConfigurationSection
- Normalizar rutas de salida de RAR
17.4
- Respetar deps.json al cargar ensamblados
-
considerar
Platformcomo valor predeterminado durante la negociación de la plataforma - Adición del patrón de coincidencia del nombre del SDK aceptado a los manifiestos del SDK
- Lanzar advertencia que indica tipos de proyecto no válidos
- Servidor de MSBuild
17.6
- Análisis de la propiedad no válida en el destino
- Eliminación de la caché de cadenas de proyecto
- Registrar un error cuando no existe ninguna ruta de búsqueda proporcionada para una importación
- Cargas de ensamblados de registro
- AnyHaveMetadataValue devuelve false cuando se pasa una lista vacía
- Autoexpansión del elemento de registro
17.8
- [RAR] No hacer E/S en referencias proporcionadas por el SDK
- Eliminar archivo de destino antes de copiar
- cambio de SHA1 a SHA256 para la tarea de hash
-
Dejar de usar BuildEventArgs derivado personalizado: la característica solo se puede optar por no recibir si BinaryFormatter está permitido en tiempo de ejecución editando
MSBuild.runtimeconfig.json
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.