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

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

.NET Framework 4.8

Núcleo

Classes de criptografia gerenciadas não geram uma CryptographyException no modo FIPS

Detalhes

No .NET Framework 4.7.2 e em versões anteriores, as classes de provedor criptográfico gerenciadas, como SHA256Managed, geram uma CryptographicException quando as bibliotecas criptográficas do sistema estão configuradas no modo FIPS. Essas exceções são geradas porque as versões gerenciadas não foram submetidas à certificação 140-2 do padrão FIPS para bloquear algoritmos criptográficos que não foram considerados aprovados com base nas regras do FIPS. Como poucos desenvolvedores têm computadores de desenvolvimento no modo FIPS, essas exceções são frequentemente geradas apenas em sistemas de produção. Aplicativos que direcionam o .NET Framework 4.8 e versões posteriores mudam automaticamente para a política flexibilizada mais recente para que um CryptographicException não seja mais gerado por padrão nesses casos. Em vez disso, as classes de criptografia gerenciadas redirecionam as operações criptográficas para uma biblioteca de criptografia do sistema. Essa alteração na política elimina efetivamente uma diferença potencialmente confusa entre os ambientes do desenvolvedor e os ambientes de produção, fazendo com que componentes nativos e componentes gerenciados operem sob a mesma política criptográfica.

Sugestão

Se esse comportamento for indesejável, recuse-o e restaure o anterior para que uma CryptographicException seja gerada em modo FIPS adicionando a seguinte definição de configuração AppContextSwitchOverrides à seção <runtime> do arquivo de configuração de aplicativo:

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

Se o seu aplicativo se destinar ao .NET Framework 4.7.2 ou versões anteriores, também será possível aceitar essa alteração adicionando a seguinte definição de configuração AppContextSwitchOverrides à seção <runtime> do arquivo de configuração de aplicativo:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Security.Cryptography.UseLegacyFipsThrow=false" />
</runtime>
Nome Valor
Escopo Microsoft Edge
Versão 4.8
Tipo Redirecionando

APIs afetadas

Windows Forms

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

Detalhes

O Windows Forms Framework está melhorando continuamente sua maneira de trabalhar com tecnologias de acessibilidade para melhorar o suporte aos clientes do Windows Forms. Isso inclui as seguintes alterações:

  • Alterações para melhorar a exibição durante o modo de Alto Contraste.
  • Alterações na interação com o Narrator.
  • Alterações na hierarquia acessível (melhora da navegação por meio da árvore de automação de interface do usuário).

Sugestão

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

  • Ser recompilado para direcionar o .NET Framework 4.8. Essas alterações de acessibilidade são habilitadas por padrão em aplicativos do Windows Forms que direcionam o .NET Framework 4.8.
  • Ser direcionado ao .NET Framework 4.7.2 ou a uma versão anterior e recusar os comportamentos de acessibilidade herdados, adicionando o seguinte comutador AppContext à seção <runtime> do arquivo de configuração de 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, também é necessário aceitar os recursos de acessibilidade do .NET Framework 4.7.1 e 4.7.2. Os aplicativos que direcionam o .NET Framework 4.8 e desejam preservar o comportamento de acessibilidade herdado podem aceitar o uso de recursos de acessibilidade herdados definindo explicitamente esse comutador AppContext como true.Habilitar o suporte à invocação de dica de ferramenta do teclado requer a adição da linha Switch.System.Windows.Forms.UseLegacyToolTipDisplay=false ao valor AppContextSwitchOverrides:

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

Observe que, para habilitar esse recurso, é necessário aceitar os recursos de acessibilidade mencionados anteriormente do .NET Framework 4.7.1 – 4.8. Além disso, se nenhum recurso de acessibilidade for aceito, mas o recurso de exibição da dica de ferramenta for aceito, o NotSupportedException do runtime será gerado no primeiro acesso a esses recursos. A mensagem de exceção indica que as ToolTips do teclado exigem a habilitação dos aprimoramentos de acessibilidade de nível 3.

Uso de cores definidas pelo sistema operacional em temas de Alto Contraste

  • Melhoria de temas de alto contraste.

Melhor suporte ao Narrador

Melhoria no suporte à acessibilidade de CheckedListBox

  • Melhoria no suporte ao Narrador do controle CheckedListBox. Ao navegar até o controle CheckedListBox usando o teclado de controle, o Narrador concentra-se no item CheckedListBox e o anuncia.
  • Um controle CheckedListBox vazio agora tem um retângulo de foco desenhado para um primeiro item virtual quando o controle fica focalizado.

Melhoria no suporte à acessibilidade de ComboBox

  • Habilitação do suporte à Automação de interface do usuário para o controle ComboBox, com a capacidade de usar notificações de Automação de interface do usuário e outros recursos de automação de interface do usuário. Melhoria no suporte à acessibilidade da DataGridView

  • Habilitação do suporte à Automação de interface do usuário para o controle DataGridView, com a capacidade de usar notificações de Automação de interface do usuário e outros recursos de automação de interface do usuário.

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

Aprimoramento do suporte à acessibilidade de LinkLabel

  • Acessibilidade aprimorada do controle LinkLabel: o narrador anuncia o estado desabilitado do link se o controle LinkLabel correspondente está desabilitado.

Melhoria ao suporte à acessibilidade de ProgressBar

  • Habilitação do suporte à Automação de interface do usuário para o controle ProgressBar, com a capacidade de usar notificações de Automação de interface do usuário e outros recursos de automação de interface do usuário. Agora, os desenvolvedores podem usar as notificações de automação de interface do usuário que o Narrator pode anunciar para indicar o progresso. Para ter 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, confira Visão geral dos eventos de automação da interface do usuário.

Suporte aprimorado à acessibilidade de PropertyGrid

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

Melhoria ao suporte ToolStrip

  • Habilitação do suporte à Automação de interface do usuário para o controle ToolStrip, com a capacidade de usar notificações de Automação de interface do usuário e outros recursos de automação de interface do usuário.
  • Melhoria da navegação por meio de itens ToolStrip.
  • No modo de itens, o foco do Narrador não desaparece e não vai para os itens ocultos.

Melhoria das indicações visuais

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

Invocação de dicas de ferramenta de controles com um teclado

  • A dica de ferramenta do controle agora pode ser invocada focalizando o controle com o teclado. Esse recurso precisa ser habilitado explicitamente para o aplicativo (confira a seção "Como aceitar ou recusar essas alterações")
Nome Valor
Escopo Principal
Versão 4.8
Tipo Redirecionando

Windows Presentation Foundation (WPF)

Melhorias de acessibilidade no WPF

Detalhes

Melhorias de Alto Contraste

  • Agora, o foco do controle Expander é visível. Em versões anteriores do .NET Framework, isso não acontecia.
  • Agora, é mais fácil ver o texto nos controles CheckBox e RadioButton quando eles estão selecionados do que nas versões anteriores do .NET Framework.
  • A borda de um ComboBox desabilitado agora é da mesma cor do texto desabilitado. Em versões anteriores do .NET Framework, isso não acontecia.
  • Botões desabilitados e com foco usam a cor de tema correta. Em versões anteriores do .NET Framework, isso não acontecia.
  • O botão suspenso agora fica visível quando um estilo do controle ComboBox é definido como ToolBar.ComboBoxStyleKey. Em versões anteriores do .NET Framework, isso não acontecia.
  • A seta de indicação de classificação em um controle DataGrid agora usa cores do tema. Em versões anteriores do .NET Framework, isso não acontecia.
  • O estilo do hiperlink padrão agora é alterado para a cor de tema correto ao passar o mouse. Em versões anteriores do .NET Framework, isso não acontecia.
  • O foco do teclado em botões de opção agora fica visível. Em versões anteriores do .NET Framework, isso não acontecia.
  • A coluna da caixa de seleção do controle DataGrid usa as cores esperadas para o feedback de 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 nos controles ComboBox e ListBox. Em versões anteriores do .NET Framework, isso não acontecia.

Melhorias de interação do leitor de tela

  • Agora, controles Expander são anunciados corretamente como grupos (expandir/recolher) por leitores de tela.
  • Agora, controles DataGridCell são anunciados corretamente como uma célula de grade de dados (localizada) por leitores de tela.
  • Leitores de tela agora anunciam o nome de um ComboBox editável.
  • Os controles PasswordBox não são mais anunciados como "nenhum item na exibição” pelos leitores de tela.

Suporte para LiveRegion

Os leitores de tela, como o narrador, ajudam as pessoas a entender a interface do usuário de um aplicativo, geralmente descrevendo o elemento de interface do usuário atualmente em foco. No entanto, se um elemento da interface do usuário for alterado em alguma parte da tela e não tiver o foco, o usuário poderá não ser informado e poderá perder informações importantes. LiveRegions devem resolver esse problema. O desenvolvedor pode usá-las para informar o leitor de tela ou qualquer outro cliente de Automação da interface do usuário de que foi feita uma alteração importante em um elemento da interface do usuário. Em seguida, o leitor de tela pode decidir como e quando informar o usuário dessa alteração. A propriedade LiveSetting também permite que o leitor de tela saiba o quanto é importante informar o usuário sobre a alteração feita na interface do usuário.

Sugestão

Como aceitar ou recusar essas alterações

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

  • Defina o .NET Framework 4.7.1 como destino. Essa é a abordagem recomendada. Essas alterações de acessibilidade estão habilitadas por padrão em aplicativos WPF destinados ao .NET Framework 4.7.1 ou posterior.

  • Recusar os comportamentos de acessibilidade herdados adicionando a seguinte Opção de AppContext à seção <runtime> do arquivo de configuração de aplicativo e configurando-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 a versões posteriores que desejam preservar o comportamento de acessibilidade herdado podem aceitar o uso das funcionalidades de acessibilidade herdadas definindo explicitamente essa opção de AppContext como true. Para ter uma visão geral da automação da interface do usuário, confira Visão geral da automação da interface do usuário.

Nome Valor
Escopo Principal
Versão 4.7.1
Tipo Redirecionando

APIs afetadas

Adicionar a propriedade pública SelectionTextBrush à seleção não baseada em adorno TextBox/PasswordBox

Detalhes

Em aplicativos do WPF que usam a seleção de texto não baseada em adorno para TextBox e PasswordBox, os desenvolvedores podem agora definir a propriedade SelectionTextBrush recém-adicionada para alterar a renderização do texto selecionado. Por padrão, essa cor é alterada 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, será possível usar a propriedade PasswordBox.SelectionTextBrush 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
Escopo Principal
Versão 4.8
Tipo Redirecionando

APIs afetadas

Agora o HwndHost redimensiona corretamente HWND filho durante alterações de DPI

Detalhes

No .NET Framework 4.7.2 e versões anteriores, quando o WPF estava sendo executado no modo Com reconhecimento por monitor, os controles hospedados em HwndHost não foram dimensionados corretamente após alterações de DPI, por exemplo, ao migrar aplicativos de um monitor para outro. Com essa correção, os controles hospedados são dimensionados apropriadamente.

Sugestão

Para que o aplicativo se beneficie dessas alterações, ele deve ser executado no .NET Framework 4.7.2 ou posterior e aceitar esse comportamento definindo o seguinte comutador AppContext na seção <runtime> do arquivo de configuração do aplicativo false, conforme mostrado pelo 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
Escopo Principal
Versão 4.8
Tipo Redirecionando

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 esquerda para a direita e de cima para baixo em alguns controles:
  • A janela de inicialização de correlação para definir dados de correlação para a atividade InitializeCorrelation
  • A janela de definição de conteúdo para as atividades Receive, Send, SendReply e ReceiveReply
  • Mais funções estão disponíveis por meio do teclado:
  • Ao editar as propriedades de uma atividade, grupos de propriedades podem ser recolhidos pelo teclado na primeira vez em que são colocados em foco.
  • Ícones de aviso agora são acessíveis por teclado.
  • O botão Mais Propriedades na janela Propriedades agora pode ser acessado pelo teclado.
  • Usuários do teclado agora podem acessar os itens de cabeçalho nos painéis de Argumentos e Variáveis do Designer de Fluxo de Trabalho.
  • Melhor visibilidade de itens com foco, como ao:
  • Adicionar linhas às grades de dados usadas pelo Designer de Fluxo de Trabalho e por designers de atividades.
  • Percorrer campos nas atividades ReceiveReply e SendReply.
  • Definir valores padrão para variáveis ou argumentos
  • Agora, leitores de tela podem reconhecer corretamente:
  • Pontos de interrupção definidos no Designer de Fluxo de Trabalho.
  • As atividades FlowSwitch<T>, FlowDecision e CorrelationScope.
  • O conteúdo da atividade Receive.
  • O Tipo de Destino da atividade InvokeMethod.
  • A caixa de combinação Exceção e a seção Finalmente na atividade TryCatch.
  • 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 de Definição de CorrelatesOn nas atividades de mensagens (Receive, Send, SendReply e ReceiveReply).
  • Transições de máquinas de estado e destinos de transição.
  • Anotações e conectores em atividades FlowDecision.
  • 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 de classificação Por Categoria e Ordem Alfabética e a caixa de diálogo Editor de Expressão na grade de propriedades.
  • A porcentagem de zoom no Designer de Fluxo de Trabalho.
  • O separador nas atividades Parallel e Pick.
  • A atividade InvokeDelegate.
  • 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 um Tipo .NET.
  • Trilhas de navegação no Designer de Fluxo de Trabalho.
  • Usuários que escolherem temas de Alto Contraste verão muitas melhorias na visibilidade do Designer de Fluxo de Trabalho e em seus controles, como melhores taxas de contraste entre elementos e caixas de seleção mais notáveis usadas para elementos de foco.

Sugestão

Se você tiver um aplicativo com um designer de fluxo de trabalho hospedado novamente, seu aplicativo poderá se beneficiar dessas alterações ao executar qualquer uma das seguintes ações:

  • Recompilar o aplicativo para ser destinado ao .NET Framework 4.7.1. Essas alterações de acessibilidade são habilitadas por padrão.
  • Se seu aplicativo for destinado ao .NET Framework 4.7 ou anterior, mas estiver em execução no .NET Framework 4.7.1, você poderá recusar esses comportamentos de acessibilidade herdados adicionando a seguinte opção de AppContext à seção <runtime> 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>

Aplicativos destinados ao .NET Framework 4.7.1 ou posterior que desejam preservar o comportamento de acessibilidade herdado pode aceitar o uso das funcionalidades de acessibilidade herdadas definindo explicitamente essa opção de AppContext como true.

Nome Valor
Escopo Secundária
Versão 4.7.1
Tipo Redirecionando

As somas de verificação XAML do Fluxo de Trabalho para símbolos mudaram de SHA1 para SHA256

Detalhes

Para compatibilidade com a depuração com o Visual Studio, o runtime de 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 causou problemas em sistemas habilitados para FIPS. Começando com o .NET Framework 4.7, o algoritmo padrão mudou para SHA1. Começando com o .NET Framework 4.8, o algoritmo padrão mudou para SHA256.

Sugestão

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

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

Ou em nossa configuração:

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Activities.UseSHA1HashForDebuggerSymbols=true" />
  </runtime>
</configuration>
Nome Valor
Escopo Secundária
Versão 4.8
Tipo Redirecionando

Alteração da definição XOML do fluxo de trabalho e das chaves de cache SqlTrackingService de MD5 para SHA256

Detalhes

O runtime de fluxo de trabalho mantém um cache de definições de fluxo de trabalho definido em XOML. O SqlTrackingService também mantém um cache inserido por cadeias de caracteres. Esses caches são inseridos por valores que incluem o valor de hash da soma de verificação. No .NET Framework 4.7.2 e versões anteriores, o hash de soma de verificação usava o algoritmo MD5, o que causou problemas em sistemas habilitados para FIPS. A partir do .NET Framework 4.8, o algoritmo usado é o SHA256. Não deve haver nenhum problema de compatibilidade com essa alteração, pois os valores são recalculados sempre que o runtime de fluxo de trabalho e o SqlTrackingService são iniciados. No entanto, fornecemos quirks para permitir que os clientes revertam para o 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 um ou ambos os comutadores AppContext:

  • "Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey" como true.
  • "Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKey" como 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 para o aplicativo que está criando o objeto WorkflowRuntime):

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey=true" />
<AppContextSwitchOverrides value="Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKeytrue" />
</runtime>
</configuration>
Nome Valor
Escopo Secundária
Versão 4.8
Tipo Redirecionando

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

Detalhes

Para oferecer suporte à depuração de fluxos de trabalho baseados em XOML com o Visual Studio, quando projetos de fluxo de trabalho que contêm arquivos XOML são criados, uma soma de verificação do conteúdo do arquivo XOML é incluída no código gerado como um valor WorkflowMarkupSourceAttribute.MD5Digest. No .NET Framework 4.7.2 e versões anteriores, o hash de soma de verificação usava o algoritmo MD5, o que causou problemas em sistemas habilitados para FIPS. A partir do .NET Framework 4.8, o algoritmo usado será o SHA256. Para ser compatível com o WorkflowMarkupSourceAttribute.MD5Digest, somente os primeiros 16 bytes da soma de verificação gerada serão usados. Isso pode causar problemas durante a depuração. Você precisará compilar novamente seu projeto.

Sugestão

Se uma nova compilação do projeto não resolver o problema, tente definir a opção "Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum" de AppContext como true no seguinte código:

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

Ou em um arquivo de configuração (isso precisa estar no 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
Escopo Secundária
Versão 4.8
Tipo Redirecionando

.NET Framework 4.8.1

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