Partilhar via


Redirecionamento de alterações para migração para o .NET Framework 4.8.x

Este artigo lista os problemas de compatibilidade de aplicativos que foram introduzidos no .NET Framework 4.8 e 4.8.1.

.NET Framework 4.8

Principal

As classes de criptografia gerenciadas não lançam uma CryptographyException no modo FIPS

Detalhes

No .NET Framework 4.7.2 e versões anteriores, classes de provedor de criptografia gerenciadas, como SHA256Managed lançar um CryptographicException quando as bibliotecas criptográficas do sistema são configuradas no modo FIPS. Essas exceções são lançadas porque as versões gerenciadas não passaram pela certificação FIPS (Federal Information Processing Standards) 140-2, bem como para bloquear algoritmos criptográficos que não foram considerados aprovados com base nas regras FIPS. Como poucos desenvolvedores têm suas máquinas de desenvolvimento no modo FIPS, essas exceções são frequentemente lançadas apenas em sistemas de produção. Os aplicativos destinados ao .NET Framework 4.8 e versões posteriores alternam automaticamente para a política mais recente e relaxada, para que a CryptographicException não seja mais lançada por padrão nesses casos. Em vez disso, as classes de criptografia gerenciadas redirecionam operações criptográficas para uma biblioteca de criptografia do sistema. Essa alteração de política remove efetivamente uma diferença potencialmente confusa entre os ambientes de desenvolvedor e os ambientes de produção e faz com que os componentes nativos e os componentes gerenciados operem sob a mesma política criptográfica.

Sugestão

Se esse comportamento for indesejável, você pode desativá-lo e restaurar o comportamento anterior para que um CryptographicException seja lançado no modo FIPS adicionando a seguinte definição de configuração AppContextSwitchOverrides à <seção runtime> do arquivo de configuração do aplicativo:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Security.Cryptography.UseLegacyFipsThrow=true" />
</runtime>

Se o seu aplicativo tiver como destino o .NET Framework 4.7.2 ou anterior, você também poderá aceitar essa alteração adicionando a seguinte definição de configuração AppContextSwitchOverrides à <seção runtime> do arquivo de configuração do aplicativo:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Security.Cryptography.UseLegacyFipsThrow=false" />
</runtime>
Nome Valor
Âmbito Edge
Versão 4.8
Type Redirecionamento

APIs afetadas

Windows Forms

Melhorias de acessibilidade nos controles do Windows Forms para .NET 4.8

Detalhes

O Windows Forms Framework continua a melhorar a forma como funciona com tecnologias de acessibilidade para oferecer melhor suporte aos clientes do Windows Forms. Estas incluem as seguintes alterações:

  • Alterações para melhorar o ecrã durante o modo de Alto Contraste.
  • Alterações na interação com o Narrador.
  • Alterações na hierarquia Acessível (melhorando a navegação através da árvore de Automação da Interface do Usuário).

Sugestão

Como aceitar ou recusar essas alterações Para que o aplicativo se beneficie dessas alterações, ele deve ser executado no .NET Framework 4.8. O aplicativo pode aceitar essas alterações de uma das seguintes maneiras:

  • Ele é recompilado para direcionar o .NET Framework 4.8. Essas alterações de acessibilidade são habilitadas por padrão em aplicativos Windows Forms destinados ao .NET Framework 4.8.
  • Ele tem como alvo o .NET Framework 4.7.2 ou versão anterior e desativa os comportamentos de acessibilidade herdados adicionando a seguinte opção AppContext à <runtime> seção do arquivo de configuração do aplicativo e definindo-o como false, como mostra o exemplo a seguir.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
  </startup>
  <runtime>
    <!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false  -->
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;Switch.UseLegacyAccessibilityFeatures.3=false" />
  </runtime>
</configuration>

Observe que para aceitar os recursos de acessibilidade adicionados no .NET Framework 4.8, você também deve optar pelos recursos de acessibilidade do .NET Framework 4.7.1 e 4.7.2. Os aplicativos destinados ao .NET Framework 4.8 e que desejam preservar o comportamento de acessibilidade herdado podem optar pelo uso de recursos de acessibilidade herdados definindo explicitamente essa opção AppContext como true. Para habilitar o suporte à invocação da dica de ferramenta do teclado, é necessário adicionar a Switch.System.Windows.Forms.UseLegacyToolTipDisplay=false linha ao valor AppContextSwitchOverrides:

<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;Switch.UseLegacyAccessibilityFeatures.3=false;Switch.System.Windows.Forms.UseLegacyToolTipDisplay=false" />

Observe que habilitar esse recurso requer aceitar os recursos de acessibilidade acima mencionados do .NET Framework 4.7.1 - 4.8. Além disso, se algum dos recursos de acessibilidade não for aceito, mas o recurso de exibição de dica de ferramenta for aceito, um tempo de execução NotSupportedException será lançado no primeiro acesso a esses recursos. A mensagem de exceção indica que as Dicas de Ferramentas do teclado exigem melhorias de acessibilidade de nível 3 para serem habilitadas.

Uso de cores definidas pelo sistema operacional em temas de alto contraste

  • Temas de alto contraste melhorados.

Suporte melhorado ao Narrador

Suporte melhorado de acessibilidade CheckedListBox

  • Suporte melhorado do Narrador para o CheckedListBox controlo. Ao navegar para o CheckedListBox controle usando o teclado, o Narrador foca o CheckedListBox item e o anuncia.
  • Um controle CheckedListBox vazio agora tem um retângulo de foco desenhado para um primeiro item virtual quando o controle se torna focado.

Suporte melhorado de acessibilidade ComboBox

  • Suporte de automação da interface do usuário habilitado para o ComboBox controle, com a capacidade de usar notificações de automação da interface do usuário e outros recursos de automação da interface do usuário. Suporte aprimorado à acessibilidade DataGridView

  • Suporte habilitado à Automação da Interface do Usuário para DataGridView controle com a capacidade de usar notificações de Automação da Interface do Usuário e outros recursos de Automação da Interface do Usuário.

  • O elemento de automação da interface do usuário que corresponde ao DataGridViewComboBoxEditingControl ou DataGridViewTextBoxEditingControl agora é filho da célula de edição correspondente.

Suporte melhorado de acessibilidade LinkLabel

  • Acessibilidade de controle aprimorada LinkLabel : o Narrador anuncia o estado desativado para o link se o controle correspondente LinkLabel estiver desativado.

Suporte melhorado de acessibilidade ProgressBar

  • Habilitado o suporte de Automação da Interface do Usuário para o ProgressBar controle com a capacidade de usar notificações de Automação da Interface do Usuário e outros recursos de Automação da Interface do Usuário. Os desenvolvedores agora podem usar notificações de automação da interface do usuário que o Narrador pode anunciar para indicar o progresso. Para obter uma visão geral dos eventos de automação da interface do usuário, incluindo eventos de notificação de automação da interface do usuário, consulte a Visão geral dos eventos de automação da interface do usuário.

Suporte melhorado à acessibilidade do PropertyGrid

  • Suporte de automação da interface do usuário habilitado para o PropertyGrid controle, com a capacidade de usar notificações de automação da interface do usuário e outros recursos de automação da interface do usuário.
  • O elemento Automação da Interface do Usuário que corresponde à propriedade editada atualmente agora é filho do elemento de Automação da Interface do Usuário do item de propriedade correspondente.
  • O elemento de item da propriedade Automação da Interface do Usuário agora é filho do elemento de categoria correspondente se o controle pai PropertyGrid estiver definido como modo de exibição de categoria.

Suporte melhorado ao ToolStrip

  • Suporte de automação da interface do usuário habilitado para o ToolStrip controle, com a capacidade de usar notificações de automação da interface do usuário e outros recursos de automação da interface do usuário.
  • Navegação melhorada através de ToolStrip itens.
  • No modo de itens, o foco do Narrador não desaparece e não vai para itens ocultos.

Pistas visuais melhoradas

  • Um controle vazio CheckedListBox agora exibe um indicador de foco quando recebe foco. Nota: O suporte à automação da interface do usuário está habilitado para controles em tempo de execução, mas não é usado em tempo de design. Para obter uma visão geral da automação da interface do usuário, consulte Visão geral da automação da interface do usuário.

Invocando as dicas de ferramentas dos controles com um teclado

  • A dica de ferramenta de controle agora pode ser invocada focando o controle com o teclado. Esse recurso precisa ser habilitado explicitamente para o aplicativo (consulte a seção "Como aceitar ou recusar essas alterações")
Nome Valor
Âmbito Principal
Versão 4.8
Type Redirecionamento

Windows Presentation Foundation (WPF)

Melhorias de acessibilidade no WPF

Detalhes

Melhorias no Alto Contraste

  • O foco para o Expander controle agora está visível. Em versões anteriores do .NET Framework, não era.
  • O texto e CheckBoxRadioButton os controles quando são selecionados agora são mais fáceis de ver do que em versões anteriores do .NET Framework.
  • A borda de um desabilitado ComboBox agora é da mesma cor do texto desabilitado. Em versões anteriores do .NET Framework, não era.
  • Os botões desativados e focados agora usam a cor correta do tema. Em versões anteriores do .NET Framework, eles não faziam.
  • O botão suspenso agora fica visível quando o estilo de um ComboBox controle é definido como ToolBar.ComboBoxStyleKey. Em versões anteriores do .NET Framework, não era.
  • A seta indicadora de classificação em um DataGrid controle agora usa cores de tema. Em versões anteriores do .NET Framework, isso não acontecia.
  • O estilo de hiperlink padrão agora muda para a cor correta do tema ao passar o mouse. Em versões anteriores do .NET Framework, isso não acontecia.
  • O foco do teclado nos botões de opção agora está visível. Em versões anteriores do .NET Framework, não era.
  • A DataGrid coluna da caixa de seleção do controle agora usa as cores esperadas para o feedback do foco do teclado. Em versões anteriores do .NET Framework, isso não acontecia.
  • os visuais de foco do teclado agora estão visíveis e ComboBoxListBox os controles. Em versões anteriores do .NET Framework, não era.

Melhorias na interação do leitor de tela

  • Expander Os controles agora são anunciados corretamente como grupos (expandir/recolher) pelos leitores de tela.
  • DataGridCell Os controles agora são anunciados corretamente como célula de grade de dados (localizada) pelos leitores de tela.
  • Os leitores de tela agora anunciarão o nome de um arquivo ComboBox.
  • PasswordBox Os controles não são mais anunciados como "nenhum item em exibição" pelos leitores de tela.

Suporte LiveRegion

Os leitores de tela, como o Narrador, ajudam as pessoas a entender a interface do usuário (UI) de um aplicativo, geralmente descrevendo o elemento da interface do usuário que atualmente tem foco. No entanto, se um elemento da interface do usuário mudar em algum lugar na tela e não tiver o foco, o usuário pode não ser informado e perder informações importantes. LiveRegions destinam-se a resolver este problema. Um desenvolvedor pode usá-los para informar o leitor de tela ou qualquer outro cliente de automação da interface do usuário que uma alteração importante foi feita em um elemento da interface do usuário. O leitor de ecrã pode então decidir como e quando informar o utilizador desta alteração. A propriedade LiveSetting também permite que o leitor de tela saiba o quão importante é informar o usuário sobre a alteração feita na interface do usuário.

Sugestão

Como optar por participar ou não destas alterações

Para que o aplicativo se beneficie dessas alterações, ele deve ser executado no .NET Framework 4.7.1 ou posterior. O aplicativo pode se beneficiar dessas alterações de uma das seguintes maneiras:

  • Destino .NET Framework 4.7.1. Esta é a abordagem recomendada. Essas alterações de acessibilidade são habilitadas por padrão em aplicativos WPF destinados ao .NET Framework 4.7.1 ou posterior.

  • Ele desativa os comportamentos de acessibilidade herdados adicionando a seguinte opção AppContext na<runtime> seção do arquivo de configuração do aplicativo e definindo-a como false, como mostra o exemplo a seguir.

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
      </startup>
      <runtime>
        <!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false'  -->
        <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" />
      </runtime>
    </configuration>
    

Os aplicativos destinados ao .NET Framework 4.7.1 ou posterior e que desejam preservar o comportamento de acessibilidade herdado podem optar pelo uso de recursos de acessibilidade herdados definindo explicitamente essa opção AppContext como true. Para obter uma visão geral da automação da interface do usuário, consulte Visão geral da automação da interface do usuário.

Nome Valor
Âmbito Principal
Versão 4.7.1
Type Redirecionamento

APIs afetadas

Adicionar a propriedade pública SelectionTextBrush à seleção de não adoradores TextBox/PasswordBox

Detalhes

Em aplicativos WPF que usam seleção de texto não baseada em adorner para TextBox e PasswordBox, os desenvolvedores agora podem definir a propriedade SelectionTextBrush recém-adicionada para alterar a renderização do texto selecionado. Por padrão, essa cor muda com HighlightTextBrushKey. Se a seleção de texto não baseada em adorno não estiver habilitada, essa propriedade não fará nada.

Sugestão

Depois que a seleção de texto não baseada em adorno estiver habilitada, você poderá usar a PasswordBox.SelectionTextBrush propriedade e SelectionTextBrush para alterar a aparência do texto selecionado. Isso pode ser feito usando XAML:

<TextBox SelectionBrush="Red" SelectionTextBrush="White"  SelectionOpacity="0.5"
Foreground="Blue" CaretBrush="Blue">
This is some text.
</TextBox>
Nome Valor
Âmbito Principal
Versão 4.8
Type Redirecionamento

APIs afetadas

HwndHost agora redimensiona corretamente child-HWND durante alterações de DPI

Detalhes

No .NET Framework 4.7.2 e versões anteriores, quando o WPF era executado no modo Compatível com Monitor, os controles hospedados dentro HwndHost não eram dimensionados corretamente após alterações de DPI, como ao mover aplicativos de um monitor para outro. Essa correção garante que os controles hospedados sejam dimensionados adequadamente.

Sugestão

Para que o aplicativo se beneficie dessas alterações, ele deve ser executado no .NET Framework 4.7.2 ou posterior e deve aceitar esse comportamento definindo a seguinte opção AppContext na<runtime> seção do arquivo de configuração do aplicativo como false, como mostra o exemplo a seguir.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
</startup>
<runtime>
<!-- AppContextSwitchOverrides value attribute is in the form of &#39;key1=true/false;key2=true/false  -->
<AppContextSwitchOverrides value="Switch.System.Windows.DoNotUsePresentationDpiCapabilityTier2OrGreater=false" />
</runtime>
</configuration>
Nome Valor
Âmbito Principal
Versão 4.8
Type Redirecionamento

Windows Workflow Foundation (WF)

Melhorias de acessibilidade no designer de fluxo de trabalho do Windows Workflow Foundation (WF)

Detalhes

O designer de fluxo de trabalho do Windows Workflow Foundation (WF) está melhorando a forma como funciona com tecnologias de acessibilidade. Essas melhorias incluem as seguintes alterações:

  • A ordem de tabulação é alterada para a esquerda para a direita e de cima para baixo em alguns controles:
  • A janela de correlação inicializar para definir dados de correlação para a InitializeCorrelation atividade
  • A janela de definição de conteúdo para o Receive, Send, SendReplye ReceiveReply atividades
  • Mais funções estão disponíveis através do teclado:
  • Ao editar as propriedades de uma atividade, os grupos de propriedades podem ser recolhidos pelo teclado na primeira vez que estiverem focados.
  • Os ícones de aviso agora estão acessíveis pelo teclado.
  • O botão Mais Propriedades na janela Propriedades agora está acessível pelo teclado.
  • Os usuários do teclado agora podem acessar os itens de cabeçalho nos painéis Argumentos e Variáveis do Designer de Fluxo de Trabalho.
  • Melhor visibilidade de itens com foco, como quando:
  • Adicionar linhas a grades de dados usadas pelo Designer de Fluxo de Trabalho e designers de atividades.
  • Tabulação pelos campos no ReceiveReply e SendReply atividades.
  • Definindo valores padrão para variáveis ou argumentos
  • Os leitores de tela agora podem reconhecer corretamente:
  • Pontos de interrupção definidos no designer de fluxo de trabalho.
  • O FlowSwitch<T>, FlowDecision, e CorrelationScope atividades.
  • O conteúdo da Receive atividade.
  • O Tipo de Destino para a InvokeMethod atividade.
  • A caixa de combinação Exceção e a seção Finalmente na TryCatch atividade.
  • A caixa de combinação Tipo de Mensagem, o divisor na janela Adicionar Inicializadores de Correlação, a janela Definição de Conteúdo e a janela CorrelatesOn Defintion nas atividades de mensagens (Receive, Send, SendReplye ReceiveReply).
  • Transições de máquina de estado e destinos de transições.
  • Anotações e conectores em FlowDecision atividades.
  • Os menus de contexto (clique com o botão direito do mouse) para atividades.
  • Os editores de valor de propriedade, o botão Limpar pesquisa, os botões Por categoria e Classificação alfabética e a caixa de diálogo Editor de expressões na grade de propriedades.
  • A porcentagem de zoom no Designer de Fluxo de Trabalho.
  • O separador em Parallel e Pick atividades.
  • A InvokeDelegate atividade.
  • A janela Selecionar tipos para atividades de dicionário (Microsoft.Activities.AddToDictionary<TKey,TValue>, Microsoft.Activities.RemoveFromDictionary<TKey,TValue>, etc.).
  • A janela Procurar e Selecionar Tipo .NET.
  • Trilha no Designer de Fluxo de Trabalho.
  • Os usuários que escolherem temas de Alto Contraste verão muitas melhorias na visibilidade do Designer de Fluxo de Trabalho e seus controles, como melhores relações de contraste entre elementos e caixas de seleção mais percetíveis usadas para elementos de foco.

Sugestão

Se você tiver um aplicativo com um designer de fluxo de trabalho rehospedado, seu aplicativo poderá se beneficiar dessas alterações executando uma destas ações:

  • Recompile seu aplicativo para direcionar o .NET Framework 4.7.1. Essas alterações de acessibilidade são habilitadas por padrão.
  • Se seu aplicativo tem como alvo o .NET Framework 4.7 ou anterior, mas está sendo executado no .NET Framework 4.7.1, você pode desativar esses comportamentos de acessibilidade herdados adicionando a seguinte opção AppContext à <runtime> seção do arquivo app.config e definindo-a como false, como mostra o exemplo a seguir.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
  </startup>
  <runtime>
    <!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false  -->
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" />
  </runtime>
</configuration>

Os aplicativos destinados ao .NET Framework 4.7.1 ou posterior e que desejam preservar o comportamento de acessibilidade herdado podem optar pelo uso de recursos de acessibilidade herdados definindo explicitamente essa opção AppContext como true.

Nome Valor
Âmbito Menor
Versão 4.7.1
Type Redirecionamento

Somas de verificação XAML do fluxo de trabalho para símbolos alterados de SHA1 para SHA256

Detalhes

Para dar suporte à depuração com o Visual Studio, o tempo de execução do fluxo de trabalho gera uma soma de verificação para um arquivo XAML do fluxo de trabalho usando um algoritmo de hash. No .NET Framework 4.6.2 e versões anteriores, o hash de soma de verificação do fluxo de trabalho usava o algoritmo MD5, o que causava problemas em sistemas habilitados para FIPS. A partir do .NET Framework 4.7, o algoritmo padrão foi alterado para SHA1. A partir do .NET Framework 4.8, o algoritmo padrão foi alterado para SHA256.

Sugestão

Se o código não conseguir carregar instâncias de fluxo de trabalho ou encontrar símbolos apropriados devido a uma falha na soma de verificação, tente definir a AppContext opção "Switch.System.Activities.UseSHA1HashForDebuggerSymbols" como true. No código:

System.AppContext.SetSwitch("Switch.System.Activities.UseSHA1HashForDebuggerSymbols", true);

Ou na configuração:

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Activities.UseSHA1HashForDebuggerSymbols=true" />
  </runtime>
</configuration>
Nome Valor
Âmbito Menor
Versão 4.8
Type Redirecionamento

Definição de XOML do fluxo de trabalho e chaves de cache SqlTrackingService alteradas de MD5 para SHA256

Detalhes

O Workflow Runtime in mantém um cache de definições de fluxo de trabalho definidas no XOML. O SqlTrackingService também mantém um cache que é chaveado por cadeias de caracteres. Esses caches são chaveados por valores que incluem o valor de hash da soma de verificação. No .NET Framework 4.7.2 e versões anteriores, esse hash de soma de verificação usava o algoritmo MD5, que causava problemas em sistemas habilitados para FIPS. Começando com o .NET Framework 4.8, o algoritmo usado é SHA256. Não deve haver um problema de compatibilidade com essa alteração porque os valores são recalculados cada vez que o Workflow Runtime e o SqlTrackingService são iniciados. No entanto, fornecemos peculiaridades para permitir que os clientes voltem ao uso do algoritmo de hash herdado, se necessário.

Sugestão

Se essa alteração apresentar um problema ao executar fluxos de trabalho, tente definir uma ou ambas as AppContext opções:

  • "Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey" para true.
  • "Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKey" para true. No código:
System.AppContext.SetSwitch("Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey", true);
System.AppContext.SetSwitch("Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKey", true);

Ou no arquivo de configuração (isso precisa estar no arquivo de configuração do aplicativo que está criando o WorkflowRuntime objeto):

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey=true" />
<AppContextSwitchOverrides value="Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKeytrue" />
</runtime>
</configuration>
Nome Valor
Âmbito Menor
Versão 4.8
Type Redirecionamento

Somas de verificação do arquivo XOML do fluxo de trabalho alteradas de MD5 para SHA256

Detalhes

Para dar suporte à depuração de fluxos de trabalho baseados em XOML com o Visual Studio, quando projetos de fluxo de trabalho contendo arquivos XOML são compilados, uma soma de verificação do conteúdo do arquivo XOML é incluída no código gerado como um WorkflowMarkupSourceAttribute.MD5Digest valor. No .NET Framework 4.7.2 e versões anteriores, esse hash de soma de verificação usava o algoritmo MD5, que causava problemas em sistemas habilitados para FIPS. Começando com o .NET Framework 4.8, o algoritmo usado é SHA256. Para ser compatível com o WorkflowMarkupSourceAttribute.MD5Digest, apenas os primeiros 16 bytes da soma de verificação gerada são usados. Isso pode causar problemas durante a depuração. Pode ser necessário reconstruir seu projeto.

Sugestão

Se a reconstrução do projeto não resolver o problema, tente definir a AppContext opção "Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum" como true. No código:

System.AppContext.SetSwitch("Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum", true);

Ou em um arquivo de configuração (isso precisa estar em MSBuild.exe.config para o MSBuild.exe que você está usando):

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum=true" />
</runtime>
</configuration>
Nome Valor
Âmbito Menor
Versão 4.8
Type Redirecionamento

.NET Framework 4.8.1

Nenhum problema de compatibilidade de aplicativo foi introduzido no .NET Framework 4.8.1.