Alterações de tempo de execução para a migração do .NET Framework 4.6.2 para 4.7Runtime Changes for Migration from .NET Framework 4.6.2 to 4.7

Se você estiver migrando do .NET Framework 4.6.2 para o .NET Framework 4.7, examine os seguintes tópicos sobre problemas de compatibilidade do aplicativo que possam afetar seu aplicativo:If you are migrating from the .NET Framework 4.6.2 to 4.7, review the following topics for application compatibility issues that may affect your app:

JITJIT

Geração de código incorreto ao passar e comparar valores UInt16Incorrect code generation when passing and comparing UInt16 values

DetalhesDetails Em virtude das alterações realizadas no .NET Framework 4.7, em alguns casos, o código gerado pelo compilador JIT em aplicativos em execução no .NET Framework 4.7 é incorretamente comparado com dois valores T:System.UInt16.Because of changes introduced in the .NET Framework 4.7, in some cases the code generated by the JIT compiler in applications running on the .NET Framework 4.7 incorrectly compares two T:System.UInt16 values. Para obter mais informações, confira Problema nº 11508: Geração de código silenciosa incorreta ao passar e comparar ushort args no GitHub.com.For more information, see Issue #11508: Silent bad codegen when passing and comparing ushort args on GitHub.com.
SugestãoSuggestion Se houver problemas na comparação dos valores sem sinal de 16 bits no .NET Framework 4.7, atualize para o .NET Framework 4.7.1.If you encounter issues in the comparison of 16-bit unsigned values in the .NET Framework 4.7, upgrade to the .NET Framework 4.7.1.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.74.7
TipoType Tempo de execuçãoRuntime

Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)

Seletor falha ao remover um item de uma coleção INCC personalizadaCrash in Selector when removing an item from a custom INCC collection

DetalhesDetails Um T:System.InvalidOperationException pode ocorrer no seguinte cenário:An T:System.InvalidOperationException can occur in the following scenario:
  • O ItemsSource de um T:System.Windows.Controls.Primitives.Selector é uma coleção com uma implementação personalizada de T:System.Collections.Specialized.INotifyCollectionChanged.The ItemsSource for a T:System.Windows.Controls.Primitives.Selector is a collection with a custom implementation of T:System.Collections.Specialized.INotifyCollectionChanged.
  • O item selecionado é removido da coleção.The selected item is removed from the collection.
  • O T:System.Collections.Specialized.NotifyCollectionChangedEventArgs tem P:System.Collections.Specialized.NotifyCollectionChangedEventArgs.OldStartingIndex = -1, o que indica uma posição desconhecida.The T:System.Collections.Specialized.NotifyCollectionChangedEventArgs has P:System.Collections.Specialized.NotifyCollectionChangedEventArgs.OldStartingIndex = -1 (indicating an unknown position).
A pilha de chamadas da exceção começa em System.Windows.Threading.Dispatcher.VerifyAccess() em System.Windows.DependencyObject.GetValue(DependencyProperty dp) em System.Windows.Controls.Primitives.Selector.GetIsSelected(DependencyObject element). Essa exceção poderá ocorrer no .NET Framework 4.5 se o aplicativo tiver mais que um thread Dispatcher.The exception's callstack begins at System.Windows.Threading.Dispatcher.VerifyAccess() at System.Windows.DependencyObject.GetValue(DependencyProperty dp) at System.Windows.Controls.Primitives.Selector.GetIsSelected(DependencyObject element)This exception can occur in .NET Framework 4.5 if the application has more than one Dispatcher thread. No .NET Framework 4.7, a exceção também pode ocorrer em aplicativos com um único thread Dispatcher.In .NET Framework 4.7 the exception can also occur in applications with a single Dispatcher thread. O problema foi corrigido no .NET Framework 4.7.1.The issue is fixed in .NET Framework 4.7.1.
SugestãoSuggestion Atualizar para o .NET Framework 4.7.1.Upgrade to .NET Framework 4.7.1.
EscopoScope SecundárioMinor
VersãoVersion 4.74.7
TipoType Tempo de execuçãoRuntime

DataGridCellsPanel.BringIndexIntoView gera ArgumentOutOfRangeExceptionDataGridCellsPanel.BringIndexIntoView throws ArgumentOutOfRangeException

DetalhesDetails ScrollIntoView(Object) será executado assincronamente quando a virtualização de coluna estiver habilitada, mas as larguras das colunas ainda não estiverem determinadas.ScrollIntoView(Object) will work asynchronously when column virtualization is enabled but the column widths have not yet been determined. Se as colunas forem removidas antes da operação assíncrona, um ArgumentOutOfRangeException poderá ocorrer.If columns are removed before the asynchronous work happens, an ArgumentOutOfRangeException can occur.
SugestãoSuggestion Siga um destes procedimentos:Any one of the following:
  1. Atualize para o .NET Framework 4.7.Upgrade to .NET Framework 4.7.
  2. Instale o patch de manutenção mais recente para o .NET Framework 4.6.2.Install the latest servicing patch for .NET Framework 4.6.2.
  3. Evitar remover colunas até que a resposta assíncrona ao método ScrollIntoView(Object) seja concluída.Avoid removing columns until the asynchronous response to ScrollIntoView(Object) has completed.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.6.24.6.2
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

ObjectDisposedException gerada pelo verificador ortográfico do WPFObjectDisposedException thrown by WPF spellchecker

DetalhesDetails Ocasionalmente, os aplicativos WPF falham durante o desligamento com uma ObjectDisposedException gerada pelo verificador ortográfico.WPF applications occasionally crash during application shutdown with an ObjectDisposedException thrown by the spellchecker. Isso foi corrigido no WPF do .NET Framework 4.7 por meio do tratamento normal da exceção, garantindo que os aplicativos não sejam mais prejudicados.This is fixed in .NET Framework 4.7 WPF by handling the exception gracefully, and thus ensuring that applications are no longer adversely affected. Observe que exceções de primeira chance ocasionais continuariam a ser observadas em aplicativos em execução em um depurador.It should be noted that occasional first-chance exceptions would continue to be observed in applications running under a debugger.
SugestãoSuggestion Atualizar para o .NET Framework 4.7Upgrade to .NET Framework 4.7
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.6.14.6.1
TipoType Tempo de execuçãoRuntime

Redimensionar uma grade pode causar travamentoResizing a Grid can hang

DetalhesDetails Um loop infinito pode ocorrer durante o layout de um T:System.Windows.Controls.Grid nas seguintes circunstâncias:An infinite loop can occur during layout of a T:System.Windows.Controls.Grid under the following circumstances:
  • As definições de linha contêm dois *-rows, ambos declarando um MinHeight e um MaxHeight.Row definitions contain two *-rows, both declaring a MinHeight and a MaxHeight.
  • O conteúdo dos *-rows não ultrapassa o MaxHeight correspondenteContent of the *-rows doesn't exceed the corresponding MaxHeight
  • A altura disponível da grade é ultrapassada pelo primeiro MinHeight (além de qualquer outra linha fixa ou automática)The Grid's available height is exceeded by the first MinHeight (plus any other fixed or Auto rows)
  • O aplicativo é direcionado ao .NET Framework 4.7 ou aceita o algoritmo de alocação do 4.7 definindo Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=falseThe app targets .NET Framework 4.7, or opts in to the 4.7 allocation algorithm by setting Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=false
O loop também aconteceria com mais de duas linhas, ou no caso análogo para colunas.The loop would also happen with more than two rows, or in the analogous case for columns. O problema foi corrigido no .NET Framework 4.7.1.The issue is fixed in .NET Framework 4.7.1.
SugestãoSuggestion Atualizar para o .NET Framework 4.7.1.Upgrade to .NET Framework 4.7.1. Como alternativa, se não precisar do algoritmo de alocação do 4.7, você poderá usar a seguinte configuração:Alternatively, if you don't need the 4.7 allocation algorithm you can use the following configuration setting:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true" />
</runtime>
EscopoScope Microsoft EdgeEdge
VersionVersion 4.74.7
TipoType Tempo de execuçãoRuntime

Tela de fundo RibbonGroup é definida como transparente em builds localizadosRibbonGroup background is set to transparent in localized builds

DetalhesDetails A tela de fundo RibbonGroup em builds localizados sempre foi pintada com um pincel Transparente, o que resultava em uma experiência de interface do usuário ruim.RibbonGroup background on localized builds was always painted with Transparent brush, resulting in poor UI experience. Isso foi corrigido no WPF do .NET Framework 4.7 por meio da atualização dos recursos localizados para RibbonGroup, que, por sua vez, garante que o pincel correto seja selecionado.This is fixed in .NET Framework 4.7 WPF fix by updating the localized resources for RibbonGroup, which in turn ensures that the correct brush is selected.
SugestãoSuggestion Atualizar para o .NET Framework 4.7Upgrade to .NET Framework 4.7
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.6.24.6.2
TipoType Tempo de execuçãoRuntime

Atualização da pilha de impressão do WPFWPF Printing Stack Update

DetalhesDetails Agora, as APIs de Impressão do WPF que usam PrintQueuechamam a API de Impressão Pacote de Documentos do Windows em vez da API de Impressão XPS, que foi preterida.WPF's Printing APIs using PrintQueue now call Window's Print Document Package API in favor of the now deprecated XPS Print API. A alteração foi feita para fins de manutenção. Nem usuários nem os desenvolvedores devem ver todas as alterações no comportamento ou no uso da API.The change was made with serviceability in mind; neither users nor developers should see any changes in behavior or API usage. A nova pilha de impressão é habilitada por padrão ao ser executada na Atualização do Windows 10 para Criadores.The new printing stack is enabled by default when running in Windows 10 Creators Update. A pilha de impressão antiga continuará a funcionar como antes nas versões mais antigas do Windows.The old printing stack will still continue to work just as before in older Windows versions.
SugestãoSuggestion Para usar a pilha antiga na Atualização do Windows 10 para Criadores, defina o valor REG_DWORD UseXpsOMPrinting da chave do Registro HKEY_CURRENT_USER\Software\Microsoft.NETFramework\Windows Presentation Foundation\Printing como 1.To use the old stack in Windows 10 Creators Update, set the UseXpsOMPrinting REG_DWORD value of the HKEY_CURRENT_USER\Software\Microsoft.NETFramework\Windows Presentation Foundation\Printing registry key to 1.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.74.7
TipoType Tempo de execuçãoRuntime

Windows Workflow Foundation (WF)Windows Workflow Foundation (WF)

Agora, o fluxo de trabalho gera a exceção original em vez de NullReferenceException em alguns casosWorkflow now throws original exception instead of NullReferenceException in some cases

DetalhesDetails No .NET Framework 4.6.2 e versões anteriores, quando o método Executar de uma atividade de fluxo de trabalho gera uma exceção com um valor null para a propriedade Message, o tempo de execução do fluxo de trabalho System.Activities gera NullReferenceException, mascarando a exceção original. No .NET Framework 4.7, a exceção mascarada anteriormente é gerada.In the .NET Framework 4.6.2 and earlier versions, when the Execute method of a workflow activity throws an exception with a null value for the Message property, the System.Activities Workflow runtime throws a NullReferenceException, masking the original exception.In the .NET Framework 4.7, the previously masked exception is thrown.
SugestãoSuggestion Se o código depender do tratamento de NullReferenceException, altere-o para capturar as exceções que possam ser geradas por meio das atividades personalizadas.If your code relies on handling the NullReferenceException, change it to catch the exceptions that could be thrown from your custom activities.
EscopoScope SecundárioMinor
VersãoVersion 4.74.7
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Persistência do fluxo de trabalho SQL adiciona clusters de chave primária e não permite valores nulos em algumas colunasWorkflow SQL persistence adds primary key clusters and disallows null values in some columns

DetalhesDetails A partir do .NET Framework 4.7, as tabelas criadas para a SWIS (SQL Workflow Instance Store) pelo script SqlWorkflowInstanceStoreSchema.sql usarão chaves primárias em clusters.Starting with the .NET Framework 4.7, the tables created for the SQL Workflow Instance Store (SWIS) by the SqlWorkflowInstanceStoreSchema.sql script use clustered primary keys. Por isso, as identidades não são compatíveis com valores null.Because of this, identities do not support null values. A operação da SWIS não é afetada por essa alteração.The operation of SWIS is not impacted by this change. As atualizações foram feitas serem compatíveis com replicação transacional do SQL Server.The updates were made to support SQL Server Transactional Replication.
SugestãoSuggestion O arquivo SQL SqlWorkflowInstanceStoreSchemaUpgrade.sql deve ser aplicado a instalações existentes para usar essa alteração.The SQL file SqlWorkflowInstanceStoreSchemaUpgrade.sql must be applied to existing installations in order to experience this change. Novas instalações de banco de dados serão alteradas automaticamente.New database installations will automatically have the change.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.74.7
TipoType Tempo de execuçãoRuntime