Mudar de onda
Um de onda de alteração de é um conjunto de alterações de comportamento no MSBuild que você pode desativar especificando um sinalizador específico como uma variável de ambiente. O objetivo disso é alertá-lo sobre mudanças potencialmente perturbadoras para que você tenha flexibilidade na adaptação a essas alterações antes que elas se tornem funcionalidade padrão. Todos os recursos em uma onda de mudança específica só podem ser ativados ou desativados juntos, não individualmente.
Quando atualizas para uma nova versão do MSBuild, as alterações que são potencialmente disruptivas são ativadas por padrão, mas se uma funcionalidade afetar negativamente a tua compilação, podes desativar facilmente essa onda de alterações. Cada onda de alteração é identificada por um número de versão do MSBuild (por exemplo, 16.8), mas definir a onda de alteração controla apenas determinados recursos que têm o potencial de afetar o processo de compilação, não todas as alterações nessa versão do MSBuild. Uma lista dos recursos em cada onda de alteração aparece mais adiante neste artigo. Desativar uma onda de mudança também desativa ondas de mudança de versões superiores.
Excluir-se de funcionalidades da onda de atualizações
Para desativar os recursos em uma onda de alteração, defina a variável de ambiente MSBuildDisableFeaturesFromVersion
para a onda de alteração (ou versão do MSBuild) que contém o recurso que você deseja desabilitar . Esta é a versão do MSBuild para a qual os recursos foram desenvolvidos. Veja o mapeamento das fases de mudança para características abaixo.
Valores de MSBuildDisableFeaturesFromVersion
Você receberá um aviso e/ou será direcionado para uma onda específica se não definir MSBuildDisableFeaturesFromVersion
para uma onda de mudança válida. A tabela a seguir mostra as configurações possíveis:
Valor MSBuildDisableFeaturesFromVersion |
Resultado | Receber aviso? |
---|---|---|
Não definido | Habilite todas as ondas de mudança, o que significa que todos os recursos por trás de cada onda de mudança estão habilitados. | Não |
Qualquer onda de mudança válida e atual (por exemplo, 16.8 ) |
Desative todos os recursos por trás do Change wave 16.8 e superior. |
Não |
Valor inválido (por exemplo, 16.9 quando as ondas válidas são 16.8 e 16.10 ) |
Definir o valor padrão para o valor válido mais próximo (ascendente). Por exemplo, definir 16.9 irá definir por padrão para 16.10 . |
Não |
Fora de Rotação (por exemplo, 17.1 quando a onda mais alta é 17.0 ) |
Ajustar para o valor válido mais próximo. Por exemplo, 17.1 prende a 17.0 , e 16.5 prende a 16.8 . |
Sim |
Formato inválido (por exemplo, 16x8 , 17_0 , garbage ) |
Habilite todas as ondas de mudança, o que significa que todos os recursos por trás de cada onda de mudança estão habilitados. | Sim |
Alterar ondas e características associadas
17.10
-
configuração AppDomain é serializada sem usar BinFmt - recurso pode ser excluído somente se BinaryFormatter for permitido em tempo de execução editando
MSBuild.runtimeconfig.json
- de dados do resolvedor de dados do SDK de cache do
17.8
- [RAR] Não faça E/S em referências fornecidas pelo SDK
- Excluir arquivo de destino antes de copiar
- Transição do SHA1 para SHA256 na tarefa de hash
-
Tornando o recurso BuildEventArgs derivado personalizado obsoleto - o recurso só pode ser excluído se BinaryFormatter for permitido em tempo de execução, editando
MSBuild.runtimeconfig.json
17.6
- Analisar propriedade inválida no contexto de de destino
- Elimine o cache de cadeia de caracteres do projeto
- Registrar um erro quando não existir um caminho de pesquisa fornecido para uma importação
- Log de montagem carrega
- AnyHaveMetadataValue retorna falso quando recebe uma lista vazia
- Expansão automática do item de log
17.4
- Respeitar deps.json ao carregar conjuntos
-
Considere
Platform
como padrão durante a negociação da plataforma - Adicionando o padrão de correspondência de nome do SDK aceito aos manifestos do SDK
- Emitir aviso indicando tipos de projeto inválidos
- servidor MSBuild
- Chame a nova API CultureInfo ao validar culturas (somente .NET Core)
17.0
- Scheduler deve honrar BuildParameters.DisableInprocNode
- Não compile regexes de globbing no .NET Framework
- Definir como padrão a cópia transitiva de itens de conteúdo
-
Os assemblies de referência agora não são mais colocados no diretório
bin
por padrão (revertido aqui e trazido de volta aqui) - Melhorar a experiência de depuração: adicionar switch global MSBuildDebugEngine; Injete o registrador binário do BuildManager; Imprimir gráfico estático como arquivo .dot
- Corrigir impasse no BuildManager contra o LoggingService
- Otimize o nível de diag para o registrador de arquivos e o registrador de console
- Arquivos imutáveis otimizados, verificações atualizadas
- Adicionar Microsoft.IO.Redist para enumeração de diretório
- Cache do processo inteiro de ToolsetConfigurationSection
- Normalizar caminhos de saída RAR
Change Waves já não está em circulação.
16.8
- Ativar NoWarn
- Truncar mensagens de log de Tarefa/Destino ignorada para 1024 caracteres
- Não expanda globs de unidade completa com condição falsa
16.10
- Erro quando uma expansão de propriedade numa condição tem espaços em branco
- Permitir um local personalizado para CopyToOutputDirectory com TargetPath
- Permitir que os usuários que têm determinados caracteres especiais em seu nome de usuário criem com êxito ao usar o exec
- Falha nas operações de restauração quando um SDK não pode ser resolvido
- Otimizar a avaliação de glob
Perguntas Frequentes
Por que direcionar todas as outras liberações para a rotação de ondas de mudança?
Acreditamos que este é tempo suficiente para discutir com as pessoas afetadas e ajudar a adaptar-se às mudanças.
Por que uma variável de ambiente e não uma propriedade de projeto?
Há cenários em que queremos colocar uma funcionalidade durante uma fase de alteração antes que o MSBuild carregue o projeto. Por essa razão, as ondas de mudança requerem o uso de variáveis de ambiente.
Porquê escolher optar por não participar em vez de participar?
A exclusão é uma abordagem melhor para nós, caso contrário, provavelmente receberíamos feedback limitado quando um recurso afeta as compilações do cliente.