Alterações de redirecionamento para a migração do .NET Framework 4.5 para 4.6.1Retargeting Changes for Migration from .NET Framework 4.5 to 4.6.1

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

ADO.NETADO.NET

DbParameter.Precision e DbParameter.Scale agora são membros virtuais públicosDbParameter.Precision and DbParameter.Scale are now public virtual members

DetalhesDetails

Precision e Scale são implementados como propriedades virtuais públicas.Precision and Scale are implemented as public virtual properties. Elas substituem as implementações de interface explícitas correspondentes, IDbDataParameter.Precision e IDbDataParameter.Scale.They replace the corresponding explicit interface implementations, IDbDataParameter.Precision and IDbDataParameter.Scale.

SugestãoSuggestion

Ao recompilar um provedor de banco de dados ADO.NET, essas diferenças exigirão que a palavra-chave "override" seja aplicada às propriedades Precision e Scale.When re-building an ADO.NET database provider, these differences will require the 'override' keyword to be applied to the Precision and Scale properties. Isso é necessário somente na recompilação dos componentes; binários existentes continuarão funcionando.This is only needed when re-building the components; existing binaries will continue to work.

NameName ValorValue
EscopoScope SecundáriaMinor
VersãoVersion 4.5.14.5.1
TypeType RedirecionandoRetargeting

APIs afetadasAffected APIs

ASP.NETASP.NET

HtmlTextWriter não renderiza o elemento <br/> corretamenteHtmlTextWriter does not render <br/> element correctly

DetalhesDetails

A partir do .NET Framework 4.6, chamar RenderBeginTag(String) e RenderEndTag() com um elemento <BR /> vai inserir corretamente apenas um <BR /> (em vez de dois)Beginning in the .NET Framework 4.6, calling RenderBeginTag(String) and RenderEndTag() with a <BR /> element will correctly insert only one <BR /> (instead of two)

SugestãoSuggestion

Se um aplicativo depender da marca <BR /> extra, RenderBeginTag(String) deverá ser chamado uma segunda vez.If an app depended on the extra <BR /> tag, RenderBeginTag(String) should be called a second time. Observe que essa alteração de comportamento afeta apenas aplicativos destinados ao .NET Framework 4.6 ou versões posteriores, de modo que outra opção é destinar a uma versão anterior do .NET Framework a fim de obter o comportamento antigo.Note that this behavior change only affects apps that target the .NET Framework 4.6 or later, so another option is to target a previous version of the .NET Framework in order to get the old behavior.

NameName ValorValue
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.64.6
TypeType RedirecionandoRetargeting

APIs afetadasAffected APIs

ClickOnceClickOnce

Os aplicativos publicados com ClickOnce que usam um certificado de autenticação de código SHA-256 podem falhar no Windows 2003Apps published with ClickOnce that use a SHA-256 code-signing certificate may fail on Windows 2003

DetalhesDetails

O executável é assinado com SHA256.The executable is signed with SHA256. Antes, ele era assinado com SHA1, independentemente se o certificado de assinatura de código era SHA-1 ou SHA-256.Previously, it was signed with SHA1 regardless of whether the code-signing certificate was SHA-1 or SHA-256. Isso se aplica a:This applies to:

  • Todos os aplicativos compilados com o Visual Studio 2012 ou posterior.All applications built with Visual Studio 2012 or later.
  • Os aplicativos compilados com o Visual Studio 2010 ou anteriores em sistemas com o .NET Framework 4.5.Applications built with Visual Studio 2010 or earlier on systems with the .NET Framework 4.5 present. Além disso, se o .NET Framework 4.5 ou posterior estiver presente, o manifesto do ClickOnce também será assinado com certificados SHA-256 para SHA-256, independentemente da versão do .NET Framework na qual ele foi compilado.In addition, if the .NET Framework 4.5 or later is present, the ClickOnce manifest is also signed with SHA-256 for SHA-256 certificates regardless of the .NET Framework version against which it was compiled.

SugestãoSuggestion

A mudança na assinatura do executável do ClickOnce afeta apenas os sistemas Windows Server 2003; eles exigem a instalação do KB 938397.The change in signing the ClickOnce executable affects only Windows Server 2003 systems; they require that KB 938397 be installed. A alteração na assinatura do manifesto com SHA-256, mesmo quando um aplicativo destina-se ao .NET Framework 4.0 ou versões anteriores, introduz uma dependência de runtime no .NET Framework 4.5 ou uma versão posterior.The change in signing the manifest with SHA-256 even when an app targets the .NET Framework 4.0 or earlier versions introduces a runtime dependency on the .NET Framework 4.5 or a later version.

NameName ValorValue
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TypeType RedirecionandoRetargeting

ClickOnce é compatível com SHA-256 em aplicativos destinados ao 4.0ClickOnce supports SHA-256 on 4.0-targeted apps

DetalhesDetails

Anteriormente, um aplicativo ClickOnce com um certificado assinado com SHA-256 exigia a presença do .NET Framework 4.5 ou posterior, mesmo se o aplicativo fosse direcionado ao 4.0.Previously, a ClickOnce app with a certificate signed with SHA-256 would require .NET Framework 4.5 or later to be present, even if the app targeted 4.0. Agora, os aplicativos ClickOnce direcionados ao .NET Framework 4.0 podem ser executados no .NET Framework 4.0, mesmo quando assinados com SHA-256.Now, .NET Framework 4.0-targeted ClickOnce apps can run on .NET Framework 4.0, even if signed with SHA-256.

SugestãoSuggestion

Essa alteração elimina essa dependência e permite que certificados SHA-256 sejam usados para assinar aplicativos ClickOnce destinados ao .NET Framework 4 e versões anteriores.This change removes that dependency and allows SHA-256 certificates to be used to sign ClickOnce apps that target .NET Framework 4 and earlier versions.

NameName ValorValue
EscopoScope SecundáriaMinor
VersãoVersion 4.64.6
TypeType RedirecionandoRetargeting

NúcleoCore

Alteração no caractere separador de caminho na propriedade FullName de objetos ZipArchiveEntryChange in path separator character in FullName property of ZipArchiveEntry objects

DetalhesDetails

Para aplicativos direcionados para o .NET Framework 4.6.1 e versões posteriores, o caractere separador de caminho mudou de uma barra invertida (" \ ") para uma barra "/" ("/") na FullName propriedade de ZipArchiveEntry objetos criados por sobrecargas do CreateFromDirectory método.For apps that target the .NET Framework 4.6.1 and later versions, the path separator character has changed from a backslash ("\") to a forward slash ("/") in the FullName property of ZipArchiveEntry objects created by overloads of the CreateFromDirectory method. A alteração traz a implementação do .NET em conformidade com a seção 4.4.17.1 da Especificação de formato de arquivo .ZIP e permite que arquivamentos .ZIP sejam descompactados em sistemas não Windows.The change brings the .NET implementation into conformity with section 4.4.17.1 of the .ZIP File Format Specification and allows .ZIP archives to be decompressed on non-Windows systems.
A descompactação de um arquivo zip criado por um aplicativo direcionado a uma versão anterior do .NET Framework em sistemas operacionais não Windows, como o Macintosh, falha na preservação da estrutura de diretório.Decompressing a zip file created by an app that targets a previous version of the .NET Framework on non-Windows operating systems such as the Macintosh fails to preserve the directory structure. Por exemplo, no Macintosh, ela cria um conjunto de arquivos cujo nome de arquivo concatena o caminho do diretório com qualquer caractere de barra invertida ("\") e o nome do arquivo.For example, on the Macintosh, it creates a set of files whose filename concatenates the directory path, along with any backslash ("\") characters, and the filename. Consequentemente, a estrutura do diretório de arquivos descompactados não é preservada.As a result, the directory structure of decompressed files is not preserved.

SugestãoSuggestion

O impacto dessa alteração em. Os arquivos ZIP que são descompactados no sistema operacional Windows por APIs no System.IO namespace .NET Framework devem ser mínimos, uma vez que essas APIs podem lidar diretamente com uma barra ("/") ou uma barra invertida (" \ ") como o caractere separador de caminho.The impact of this change on .ZIP files that are decompressed on the Windows operating system by APIs in the .NET Framework System.IO namespace should be minimal, since these APIs can seamlessly handle either a forward slash ("/") or a backslash ("\") as the path separator character.
Se essa alteração for indesejável, você poderá recusá-la adicionando um parâmetro de configuração à <runtime> seção do arquivo de configuração do aplicativo.If this change is undesirable, you can opt out of it by adding a configuration setting to the <runtime> section of your application configuration file. O exemplo a seguir mostra a seção <runtime> e a opção de recusa Switch.System.IO.Compression.ZipFile.UseBackslash:The following example shows both the <runtime> section and the Switch.System.IO.Compression.ZipFile.UseBackslash opt-out switch:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.IO.Compression.ZipFile.UseBackslash=true" />
</runtime>

Além disso, os aplicativos que se destinam a versões anteriores do .NET Framework mas que estão em execução no .NET Framework 4.6.1 e versões posteriores podem aceitar esse comportamento adicionando um parâmetro de configuração à <runtime> seção do arquivo de configuração do aplicativo.In addition, apps that target previous versions of the .NET Framework but are running on the .NET Framework 4.6.1 and later versions can opt in to this behavior by adding a configuration setting to the <runtime> section of the application configuration file. Veja a seguir a seção <runtime> e a opção de aceitação Switch.System.IO.Compression.ZipFile.UseBackslash.The following shows both the <runtime> section and the Switch.System.IO.Compression.ZipFile.UseBackslash opt-in switch.

<runtime>
  <AppContextSwitchOverrides value="Switch.System.IO.Compression.ZipFile.UseBackslash=false" />
</runtime>
NomeName ValorValue
EscopoScope EdgeEdge
VersãoVersion 4.6.14.6.1
TypeType RedirecionandoRetargeting

APIs afetadasAffected APIs

Fluxo CurrentCulture e CurrentUICulture atravessam tarefasCurrentCulture and CurrentUICulture flow across tasks

DetalhesDetails

A partir do .NET Framework 4.6, System.Globalization.CultureInfo.CurrentCulture e System.Globalization.CultureInfo.CurrentUICulture são armazenados no System.Threading.ExecutionContext do thread, que atravessa operações assíncronas. Isso significa que as alterações em System.Globalization.CultureInfo.CurrentCulture ou System.Globalization.CultureInfo.CurrentUICulture serão refletidas em tarefas que posteriormente serão executadas de forma assíncrona.Beginning in the .NET Framework 4.6, System.Globalization.CultureInfo.CurrentCulture and System.Globalization.CultureInfo.CurrentUICulture are stored in the thread's System.Threading.ExecutionContext, which flows across asynchronous operations.This means that changes to System.Globalization.CultureInfo.CurrentCulture or System.Globalization.CultureInfo.CurrentUICulture will be reflected in tasks which are later run asynchronously. Isso é diferente do comportamento das versões anteriores do .NET Framework (que redefiniria System.Globalization.CultureInfo.CurrentCulture e System.Globalization.CultureInfo.CurrentUICulture em todas as tarefas assíncronas).This is different from the behavior of previous .NET Framework versions (which would reset System.Globalization.CultureInfo.CurrentCulture and System.Globalization.CultureInfo.CurrentUICulture in all asynchronous tasks).

SugestãoSuggestion

Aplicativos afetados por essa alteração podem contorná-la definindo explicitamente o System.Globalization.CultureInfo.CurrentCulture ou System.Globalization.CultureInfo.CurrentUICulture desejado como a primeira operação em uma Tarefa assíncrona.Apps affected by this change may work around it by explicitly setting the desired System.Globalization.CultureInfo.CurrentCulture or System.Globalization.CultureInfo.CurrentUICulture as the first operation in an async Task. Como alternativa, o comportamento antigo (de não atravessar System.Globalization.CultureInfo.CurrentCulture/System.Globalization.CultureInfo.CurrentUICulture) pode ser aceito definindo a seguinte opção de compatibilidade:Alternatively, the old behavior (of not flowing System.Globalization.CultureInfo.CurrentCulture/System.Globalization.CultureInfo.CurrentUICulture) may be opted into by setting the following compatibility switch:

AppContext.SetSwitch("Switch.System.Globalization.NoAsyncCurrentCulture", true);

Esse problema foi corrigido pelo WPF no .NET Framework 4.6.2.This issue has been fixed by WPF in .NET Framework 4.6.2. Ele também foi corrigido no .NET Framework 4.6 e 4.6.1 por meio de KB 3139549.It has also been fixed in .NET Frameworks 4.6, 4.6.1 through KB 3139549. Os aplicativos direcionados ao .NET Framework 4.6 ou posterior terão o comportamento correto automaticamente nos aplicativos WPF – System.Globalization.CultureInfo.CurrentCulture/System.Globalization.CultureInfo.CurrentUICulture. Isso seria preservado entre as operações de Dispatcher.Applications targeting .NET Framework 4.6 or later will automatically get the right behavior in WPF applications - System.Globalization.CultureInfo.CurrentCulture/System.Globalization.CultureInfo.CurrentUICulture) would be preserved across Dispatcher operations.

NameName ValorValue
EscopoScope SecundáriaMinor
VersãoVersion 4.64.6
TypeType RedirecionandoRetargeting

APIs afetadasAffected APIs

Nomes de evento ETW não podem ser diferentes apenas por um sufixo "Start" ou "Stop"ETW event names cannot differ only by a "Start" or "Stop" suffix

DetalhesDetails

No .NET Framework 4,6 e 4.6.1, o tempo de execução gera um ArgumentException quando dois nomes de evento ETW (rastreamento de eventos para Windows) diferem apenas por um sufixo "Start" ou "Stop" (como quando um evento é nomeado LogUser e outro é nomeado LogUserStart ).In the .NET Framework 4.6 and 4.6.1, the runtime throws an ArgumentException when two Event Tracing for Windows (ETW) event names differ only by a "Start" or "Stop" suffix (as when one event is named LogUser and another is named LogUserStart). Nesse caso, o runtime não pode construir a origem do evento, que não pode emitir nenhum log.In this case, the runtime cannot construct the event source, which cannot emit any logging.

SugestãoSuggestion

Para evitar a exceção, verifique se nenhum nome de dois eventos difere apenas por um sufixo "Start" ou "Stop". Esse requisito é removido começando com o .NET Framework 4.6.2; o tempo de execução pode desambiguar nomes de eventos que diferem apenas pelo sufixo "Start" e "Stop".To prevent the exception, ensure that no two event names differ only by a "Start" or "Stop" suffix.This requirement is removed starting with the .NET Framework 4.6.2; the runtime can disambiguate event names that differ only by the "Start" and "Stop" suffix.

NameName ValorValue
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.64.6
TypeType RedirecionandoRetargeting

ObsoleteAttribute exporta ObsoleteAttribute e DeprecatedAttribute em cenários WinMDObsoleteAttribute exports as both ObsoleteAttribute and DeprecatedAttribute in WinMD scenarios

DetalhesDetails

Quando você cria uma biblioteca de Metadados do Windows (arquivo .winmd), o atributo System.ObsoleteAttribute é exportado como System.ObsoleteAttribute e Windows.Foundation.DeprecatedAttribute.When you create a Windows Metadata library (.winmd file), the System.ObsoleteAttribute attribute is exported as both System.ObsoleteAttribute and Windows.Foundation.DeprecatedAttribute.

SugestãoSuggestion

A recompilação do código-fonte existente que usa o atributo System.ObsoleteAttribute pode gerar avisos durante o consumo desse código do C++/CX ou JavaScript. Não é recomendável aplicar System.ObsoleteAttribute e Windows.Foundation.DeprecatedAttribute ao código em assemblies gerenciados, isso pode gerar avisos de compilação.Recompilation of existing source code that uses the System.ObsoleteAttribute attribute may generate warnings when consuming that code from C++/CX or JavaScript.We do not recommend applying both System.ObsoleteAttribute and Windows.Foundation.DeprecatedAttribute to code in managed assemblies; it may result in build warnings.

NameName ValorValue
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.5.14.5.1
TipoType RedirecionandoRetargeting

JITJIT

IL ret não é permitido em uma região tryIL ret not allowed in a try region

DetalhesDetails

Ao contrário do compilador Just-In-Time JIT64, o RyuJIT (usado no .NET Framework 4.6) não permite que uma instrução IL ret em uma região try.Unlike the JIT64 just-in-time compiler, RyuJIT (used in .NET Framework 4.6) does not allow an IL ret instruction in a try region. Retornar de uma região try não é permitido pela especificação ECMA-335, e nenhum compilador gerenciado conhecido gera tal IL.Returning from a try region is disallowed by the ECMA-335 specification, and no known managed compiler generates such IL. No entanto, o compilador JIT64 executará essa IL se ela for gerada usando emissão de reflexo.However, the JIT64 compiler will execute such IL if it is generated using reflection emit.

SugestãoSuggestion

Se um aplicativo estiver gerando uma IL que inclua um opcode ret em uma região try, o aplicativo poderá ser direcionado ao .NET Framework 4.5 para usar o JIT antigo e evitar essa interrupção.If an app is generating IL that includes a ret opcode in a try region, the app may target .NET Framework 4.5 to use the old JIT and avoid this break. Como alternativa, a IL gerada pode ser atualizado para retornar após a região try.Alternatively, the generated IL may be updated to return after the try region.

NameName ValorValue
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.64.6
TypeType RedirecionandoRetargeting

Novo compilador JIT de 64 bits no .NET Framework 4.6New 64-bit JIT compiler in the .NET Framework 4.6

DetalhesDetails

A partir do .NET Framework 4.6, um novo compilador JIT de 64 bits é usado para compilação Just-In-Time.Starting with the .NET Framework 4.6, a new 64-bit JIT compiler is used for just-in-time compilation. Em alguns casos, será gerada uma exceção inesperada ou um comportamento diferente será observado se um aplicativo for executado usando o compilador de 32 bits ou o compilador JIT de 64 bits antigo.In some cases, an unexpected exception is thrown or a different behavior is observed than if an app is run using the 32-bit compiler or the older 64-bit JIT compiler. Essa alteração não afeta o compilador JIT de 32 bits.This change does not affect the 32-bit JIT compiler. Os diferenças conhecidas incluem o seguinte:The known differences include the following:

  • Sob certas condições, uma operação de conversão unboxing pode gerar uma NullReferenceException em compilações de Versão com a otimização ativada.Under certain conditions, an unboxing operation may throw a NullReferenceException in Release builds with optimization turned on.
  • Em alguns casos, a execução do código de produção em um corpo de método grande pode gerar uma StackOverflowException.In some cases, execution of production code in a large method body may throw a StackOverflowException.
  • Em certas condições, as estruturas passadas para um método são tratadas como tipos de referência em vez de tipos de valor em de builds de Versão.Under certain conditions, structures passed to a method are treated as reference types rather than as value types in Release builds. Um das manifestações desse problema é que os itens individuais em uma coleção aparecem em uma ordem inesperada.One of the manifestations of this issue is that the individual items in a collection appear in an unexpected order.
  • Sob determinadas condições, a comparação de valores UInt16 com seu conjunto de bits alto será incorreta se a otimização estiver habilitada.Under certain conditions, the comparison of UInt16 values with their high bit set is incorrect if optimization is enabled.
  • Sob certas condições, especialmente ao inicializar uma matriz de valores, a inicialização da memória pela instrução IL OpCodes.Initblk pode inicializar a memória com um valor incorreto.Under certain conditions, particularly when initializing array values, memory initialization by the OpCodes.Initblk IL instruction may initialize memory with an incorrect value. Isso pode resultar em uma saída incorreta ou uma exceção sem tratamento.This can result either in an unhandled exception or incorrect output.
  • Sob certas condições raras, um teste de bits condicional poderá retornar o valor Boolean incorreto ou gerar uma exceção se as otimizações do compilador estiverem habilitadas.Under certain rare conditions, a conditional bit test can return the incorrect Boolean value or throw an exception if compiler optimizations are enabled.
  • Sob certas condições, se uma instrução if for usada para testar uma condição antes de entrar em um bloco try, e na saída do bloco try, e a mesma condição for avaliada no bloco catch ou finally, o novo compilador JIT de 64 bits removerá a condição if do bloco catch ou finally durante a otimização do código.Under certain conditions, if an if statement is used to test for a condition before entering a try block and in the exit from the try block, and the same condition is evaluated in the catch or finally block, the new 64-bit JIT compiler removes the if condition from the catch or finally block when it optimizes code. Como resultado, o código dentro da instrução if no bloco catch ou finally será executado incondicionalmente.As a result, code inside the if statement in the catch or finally block is executed unconditionally.

SugestãoSuggestion

Mitigação dos problemas conhecidosMitigation of known issues
Se você encontrar os problemas listados acima, solucione-os seguindo um destes procedimentos:If you encounter the issues listed above, you can address them by doing any of the following:

  • Atualizar para o .NET Framework 4.6.2.Upgrade to the .NET Framework 4.6.2. O novo compilador de 64 bits incluído com o .NET Framework 4.6.2 resolve cada um desses problemas conhecidos.The new 64-bit compiler included with the .NET Framework 4.6.2 addresses each of these known issues.

  • Verifique se a sua versão do Windows está atualizada executando o Windows Update.Ensure that your version of Windows is up to date by running Windows Update. Atualizações de serviço para o .NET Framework 4.6 e 4.6.1 resolvem cada um desses problemas, exceto a NullReferenceException em uma operação de conversão unboxing.Service updates to the .NET Framework 4.6 and 4.6.1 address each of these issues except the NullReferenceException in an unboxing operation.

  • Compilar com o compilador JIT de 64 bits mais antigo.Compile with the older 64-bit JIT compiler. Veja a seção Mitigação de outros problemas para saber mais sobre como fazer isso.See the Mitigation of other issues section for more information on how to do this. Mitigação de outros problemasMitigation of other issues
    Se você encontrar qualquer outra diferença de comportamento entre o código compilado com o compilador de 64 bits mais antigo e o novo compilador JIT de 64 bits, ou entre as versões de depuração e de versão de seu aplicativo, ambas compiladas com o novo compilador JIT de 64 bits, faça o seguinte para compilar seu aplicativo com o compilador JIT de 64 bits mais antigo:If you encounter any other difference in behavior between code compiled with the older 64-bit compiler and the new 64-bit JIT compiler, or between the debug and release versions of your app that are both compiled with the new 64-bit JIT compiler, you can do the following to compile your app with the older 64-bit JIT compiler:

  • Em uma base por aplicativo, você pode adicionar o < elemento ao arquivo de configuração do aplicativo.On a per-application basis, you can add the < element to your application's configuration file. Veja a seguir como desabilitar a compilação com o novo compilador JIT de 64 bits e usar, em vez disso, o compilador JIT de 64 bits herdado.The following disables compilation with the new 64-bit JIT compiler and instead uses the legacy 64-bit JIT compiler.

    <?xml version ="1.0"?>
    <configuration>
      <runtime>
       <useLegacyJit enabled="1" />
      </runtime>
    </configuration>
    
  • Adicione a cada usuário um valor REG_DWORD denominado useLegacyJit para a chave HKEY_CURRENT_USER\SOFTWARE\Microsoft\.NETFramework do Registro.On a per-user basis, you can add a REG_DWORD value named useLegacyJit to the HKEY_CURRENT_USER\SOFTWARE\Microsoft\.NETFramework key of the registry. Um valor 1 habilita o compilador JIT de 64 bits herdado; um valor 0 o desabilita e habilita o novo compilador JIT de 64 bits.A value of 1 enables the legacy 64-bit JIT compiler; a value of 0 disables it and enables the new 64-bit JIT compiler.

  • Adicione a cada máquina um valor REG_DWORD denominado useLegacyJit para a chave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework do Registro.On a per-machine basis, you can add a REG_DWORD value named useLegacyJit to the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework key of the registry. Um valor de 1 habilita o compilador JIT de 64 bits herdado; um valor de 0 o desabilita e habilita o novo compilador JIT de 64 bits.A value of 1 enables the legacy 64-bit JIT compiler; a value of 0 disables it and enables the new 64-bit JIT compiler. Avise-nos sobre o problema relatando um bug no Microsoft Connect.You can also let us know about the problem by reporting a bug on Microsoft Connect.

NameName ValorValue
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.64.6
TypeType RedirecionandoRetargeting

MSBuildMSBuild

A tarefa ResolveAssemblyReference agora avisa sobre dependências com arquitetura incorretaResolveAssemblyReference task now warns of dependencies with the wrong architecture

DetalhesDetails

A tarefa emite um aviso, MSB3270, que indica que uma referência ou qualquer uma de suas dependências não corresponde à arquitetura do aplicativo.The task emits a warning, MSB3270, which indicates that a reference or any of its dependencies does not match the app's architecture. Por exemplo, isso ocorrerá se um aplicativo que tenha sido compilado com a opção AnyCPU incluir uma referência x86.For example, this occurs if an app that was compiled with the AnyCPU option includes an x86 reference. Esse cenário pode resultar em uma falha do aplicativo no tempo de execução (nesse caso, se o aplicativo for implantado como um processo x64).Such a scenario could result in an app failure at run time (in this case, if the app is deployed as an x64 process).

SugestãoSuggestion

Há duas áreas de impacto:There are two areas of impact:

  • A recompilação gerencia os avisos que não foram exibidos quando o aplicativo foi compilado com uma versão anterior do MSBuild.Recompilation generates warnings that did not appear when the app was compiled under a previous version of MSBuild. Entretanto, como o aviso identifica uma possível fonte de falha no runtime, ele deve ser investigado e resolvido.However, because the warning identifies a possible source of runtime failure, it should be investigated and addressed.
  • Se os avisos forem tratados como erros, o aplicativo não será compilado.If warnings are treated as errors, the app will fail to compile.
NameName ValorValue
EscopoScope SecundáriaMinor
VersãoVersion 4.5.14.5.1
TypeType RedirecionandoRetargeting

RedeNetworking

Validação dos certificados de EKU do OIDCertificate EKU OID validation

DetalhesDetails

A partir do .NET Framework 4.6, as classes SslStream ou ServicePointManager executarão a validação do EKU (uso avançado de chave) do OID (identificador de objeto).Starting with .NET Framework 4.6, the SslStream or ServicePointManager classes perform enhanced key use (EKU) object identifier (OID) validation. Uma extensão de EKU (uso avançado de chave) é uma coleção de OIDs (identificadores de objeto) que indicam os aplicativos que usam a chave.An enhanced key usage (EKU) extension is a collection of object identifiers (OIDs) that indicate the applications that use the key. A validação do EKU do OID usa retornos de chamada de certificado remoto para garantir que o certificado remoto tenha o OID correto para a finalidade pretendida.EKU OID validation uses remote certificate callbacks to ensure that the remote certificate has the correct OIDs for the intended purpose.

SugestãoSuggestion

Se essa alteração for indesejável, você poderá desabilitar a validação de OID de EKU de certificado adicionando a seguinte opção ao <AppContextSwitchOverrides> no ` de seu arquivo de configuração de aplicativo:If this change is undesirable, you can disable certificate EKU OID validation by adding the following switch to the <AppContextSwitchOverrides> in the ` of your app configuration file:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Net.DontCheckCertificateEKUs=true" />
</runtime>

Importante

Essa configuração é fornecida apenas para compatibilidade com versões anteriores.This setting is provided for backward compatibility only. Caso contrário, seu uso não é recomendado.Its use is otherwise not recommended.

NameName ValorValue
EscopoScope SecundáriaMinor
VersãoVersion 4.64.6
TypeType RedirecionandoRetargeting

APIs afetadasAffected APIs

Somente os protocolos Tls 1.0, 1.1 e 1.2 são compatíveis com System.Net.ServicePointManager e System.Net.Security.SslStreamOnly Tls 1.0, 1.1 and 1.2 protocols supported in System.Net.ServicePointManager and System.Net.Security.SslStream

DetalhesDetails

A partir do .NET Framework 4.6, as classes ServicePointManager e SslStream têm permissão para usar somente um dos três protocolos a seguir: Tls1.0, Tls1.1 ou Tls1.2.Starting with the .NET Framework 4.6, the ServicePointManager and SslStream classes are only allowed to use one of the following three protocols: Tls1.0, Tls1.1, or Tls1.2. Não há suporte para o protocolo SSL 3.0 e a criptografia RC4.The SSL3.0 protocol and RC4 cipher are not supported.

SugestãoSuggestion

A mitigação recomendada é fazer upgrade do aplicativo do lado do servidor para Tls1.0, Tls1.1 ou Tls1.2.The recommended mitigation is to upgrade the sever-side app to Tls1.0, Tls1.1, or Tls1.2. Se não for viável ou se os aplicativos cliente estiverem desfeitos, a classe System.AppContext poderá ser usada para recusar esse recurso de duas maneiras:If this is not feasible, or if client apps are broken, the System.AppContext class can be used to opt out of this feature in either of two ways:

  • Configurar de forma programática as opções de compatibilidade na instância System.AppContext, conforme explicado aqui.By programmatically setting compat switches on the System.AppContext, as explained here.
  • Adicionando a seguinte linha na seção <runtime> do arquivo app.config:By adding the following line to the <runtime> section of the app.config file:
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=true"/>
NameName ValorValue
EscopoScope SecundáriaMinor
VersãoVersion 4.64.6
TypeType RedirecionandoRetargeting

APIs afetadasAffected APIs

TLS 1.x por padrão passa o sinalizador SCH_SEND_AUX_RECORD para a API do SCHANNEL subjacenteTLS 1.x by default passes the SCH_SEND_AUX_RECORD flag to the underlying SCHANNEL API

DetalhesDetails

Ao usar TLS 1.x, o .NET Framework depende da API de SCHANNEL do Windows subjacente.When using TLS 1.x, the .NET Framework relies on the underlying Windows SCHANNEL API. A partir do .NET Framework 4.6, o sinalizador SCH_SEND_AUX_RECORD é passado por padrão para SCHANNEL.Starting with .NET Framework 4.6, the SCH_SEND_AUX_RECORD flag is passed by default to SCHANNEL. Isso faz com que SCHANNEL divida os dados a serem criptografados em dois registros separados, o primeiro como um byte único e o segundo como n-1 bytes. Em casos raros, isso interrompe a comunicação entre clientes e servidores existentes que supõem que os dados residem em um único registro.This causes SCHANNEL to split data to be encrypted into two separate records, the first as a single byte and the second as n-1 bytes.In rare cases, this breaks communication between clients and existing servers that make the assumption that the data resides in a single record.

SugestãoSuggestion

Se essa alteração interromper a comunicação com um servidor existente, você poderá desabilitá-la enviando o sinalizador SCH_SEND_AUX_RECORD, e restaurar o comportamento anterior de não dividir dados em registros separados adicionando a seguinte opção ao elemento <AppContextSwitchOverrides> na seção <runtime> do arquivo de configuração de aplicativo:If this change breaks communication with an existing server, you can disable sending the SCH_SEND_AUX_RECORD flag and restore the previous behavior of not splitting data into separate records by adding the following switch to the <AppContextSwitchOverrides> element in the <runtime> section of your app configuration file:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchSendAuxRecord=true" />
</runtime>

Importante

Essa configuração é fornecida apenas para compatibilidade com versões anteriores.This setting is provided for backward compatibility only. Caso contrário, seu uso não é recomendado.Its use is otherwise not recommended.

NameName ValorValue
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.64.6
TipoType RedirecionandoRetargeting

APIs afetadasAffected APIs

Visual Basic .NETVisual Basic .NET

VB.NET não é mais compatível com a qualificação do namespace parcial para APIs System.WindowsVB.NET no longer supports partial namespace qualification for System.Windows APIs

DetalhesDetails

Começando com o .NET Framework 4.5.2, os projetos VB.NET não podem especificar APIs System.Windows com namespaces parcialmente qualificados.Beginning in .NET Framework 4.5.2, VB.NET projects cannot specify System.Windows APIs with partially-qualified namespaces. Por exemplo, fazer referência a Windows.Forms.DialogResult falhará.For example, referring to Windows.Forms.DialogResult will fail. Em vez disso, o código deve fazer referência ao nome totalmente qualificado (DialogResult) ou importar o namespace específico e simplesmente fazer referência a System.Windows.Forms.DialogResult.Instead, code must refer to the fully qualified name (DialogResult) or import the specific namespace and refer simply to System.Windows.Forms.DialogResult.

SugestãoSuggestion

O código deve ser atualizado para fazer referência as APIs System.Windows com nomes simples (e importando o namespace relevante) ou com nomes totalmente qualificados.Code should be updated to refer to System.Windows APIs either with simple names (and importing the relevant namespace) or with fully qualified names.

NameName ValorValue
EscopoScope SecundáriaMinor
VersãoVersion 4.5.24.5.2
TypeType RedirecionandoRetargeting

Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)

Chamada para CreateDefaultAuthorizationContext com um argumento nulo foi alteradaCalling CreateDefaultAuthorizationContext with a null argument has changed

DetalhesDetails

A implementação de System.IdentityModel.Policy.AuthorizationContext retornado por uma chamada a System.IdentityModel.Policy.AuthorizationContext.CreateDefaultAuthorizationContext(IList<IAuthorizationPolicy>) com um argumento authorizationPolicies nulo mudou sua implementação no .NET Framework 4.6.The implementation of the System.IdentityModel.Policy.AuthorizationContext returned by a call to the System.IdentityModel.Policy.AuthorizationContext.CreateDefaultAuthorizationContext(IList<IAuthorizationPolicy>) with a null authorizationPolicies argument has changed its implementation in the .NET Framework 4.6.

SugestãoSuggestion

Em casos raros, os aplicativos WCF que usam a autenticação personalizada podem ver diferenças de comportamento.In rare cases, WCF apps that use custom authentication may see behavioral differences. Nesses casos, o comportamento anterior pode ser restaurado de uma destas duas maneiras:In such cases, the previous behavior can be restored in either of two ways:

  • Recompile o aplicativo para se destinar a uma versão anterior ao .NET Framework 4.6.Recompile your app to target an earlier version of the .NET Framework than 4.6. Para serviços hospedados pelo IIS, use o elemento <httpRuntime targetFramework="x.x"> para direcionar a uma versão anterior do .NET Framework.For IIS-hosted services, use the <httpRuntime targetFramework="x.x"> element to target an earlier version of the .NET Framework.

  • Adicione a seguinte linha à seção <appSettings> de seu arquivo app.config:Add the following line to the <appSettings> section of your app.config file:

    <add key="appContext.SetSwitch:Switch.System.IdentityModel.EnableCachedEmptyDefaultAuthorizationContext" value="true" />
    
NameName ValorValue
EscopoScope SecundáriaMinor
VersãoVersion 4.64.6
TypeType RedirecionandoRetargeting

APIs afetadasAffected APIs

Associação do WCF com o modo de segurança TransportWithMessageCredentialWCF binding with the TransportWithMessageCredential security mode

DetalhesDetails

Começando com o .NET Framework 4.6.1, a associação do WCF que usar o modo de segurança TransportWithMessageCredential poderá ser configurada para receber mensagens com cabeçalhos "to" não assinados para chaves de segurança assimétricas. Por padrão, os cabeçalhos "to" não assinados continuarão a ser rejeitados no NET Framework 4.6.1.Beginning in the .NET Framework 4.6.1, WCF binding that uses the TransportWithMessageCredential security mode can be set up to receive messages with unsigned "to" headers for asymmetric security keys.By default, unsigned "to" headers will continue to be rejected in .NET Framework 4.6.1. Eles só serão aceitos se o aplicativo aceitar esse novo modo de operação usando a opção de configuração Switch.System.ServiceModel.AllowUnsignedToHeader.They will only be accepted if an application opts into this new mode of operation using the Switch.System.ServiceModel.AllowUnsignedToHeader configuration switch.

SugestãoSuggestion

Como esse é um recurso de aceitação, ele não deve afetar o comportamento dos aplicativos existentes.Because this is an opt-in feature, it should not affect the behavior of existing apps.
Para controlar se o novo comportamento está sendo usado ou não, use a seguinte configuração:To control whether the new behavior is used or not, use the following configuration setting:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.ServiceModel.AllowUnsignedToHeader=true" />
</runtime>
NameName ValorValue
EscopoScope TransparenteTransparent
VersãoVersion 4.6.14.6.1
TypeType RedirecionandoRetargeting

APIs afetadasAffected APIs

X509CertificateClaimSet.FindClaims considera todos os claimTypesX509CertificateClaimSet.FindClaims Considers All claimTypes

DetalhesDetails

Em aplicativos destinados ao .NET Framework 4.6.1, se um conjunto de declarações X509 for inicializado de um certificado que tenha várias entradas DNS em seu campo SAN, o método System.IdentityModel.Claims.X509CertificateClaimSet.FindClaims(String, String) tentará corresponder o argumento claimType a todas as entradas DNS. Em aplicativos destinados a versões anteriores do .NET Framework, o método System.IdentityModel.Claims.X509CertificateClaimSet.FindClaims(String, String) tenta corresponder o argumento claimType somente com a última entrada DNS.In apps that target the .NET Framework 4.6.1, if an X509 claim set is initialized from a certificate that has multiple DNS entries in its SAN field, the System.IdentityModel.Claims.X509CertificateClaimSet.FindClaims(String, String) method attempts to match the claimType argument with all the DNS entries.For apps that target previous versions of the .NET Framework, the System.IdentityModel.Claims.X509CertificateClaimSet.FindClaims(String, String) method attempts to match the claimType argument only with the last DNS entry.

SugestãoSuggestion

Essa alteração afeta apenas aplicativos destinados ao .NET Framework 4.6.1.This change only affects applications targeting the .NET Framework 4.6.1. Essa alteração pode ser desabilitada (ou habilitada se destinada a versões anteriores a 4.6.1) com a opção de compatibilidade DisableMultipleDNSEntries.This change may be disabled (or enabled if targeting pre-4.6.1) with the DisableMultipleDNSEntries compatibility switch.

NameName ValorValue
EscopoScope SecundáriaMinor
VersãoVersion 4.6.14.6.1
TypeType RedirecionandoRetargeting

APIs afetadasAffected APIs

Windows FormsWindows Forms

Application.FilterMessage não é mais gerada para implementações de reentrância de IMessageFilter.PreFilterMessageApplication.FilterMessage no longer throws for re-entrant implementations of IMessageFilter.PreFilterMessage

DetalhesDetails

Antes do .NET Framework 4.6.1, a chamada a uma FilterMessage(Message) com uma PreFilterMessage(Message) que chamava System.Windows.Forms.Application.AddMessageFilter(IMessageFilter) ou System.Windows.Forms.Application.RemoveMessageFilter(IMessageFilter) (ao chamar DoEvents() também) causava uma System.IndexOutOfRangeException.Prior to the .NET Framework 4.6.1, calling FilterMessage(Message) with an PreFilterMessage(Message) which called System.Windows.Forms.Application.AddMessageFilter(IMessageFilter) or System.Windows.Forms.Application.RemoveMessageFilter(IMessageFilter) (while also calling DoEvents()) would cause an System.IndexOutOfRangeException.

A partir dos aplicativos destinados ao .NET Framework 4.6.1, essa exceção não é mais gerada e filtros reentrantes, conforme descrito acima, podem ser usados.Beginning with applications targeting the .NET Framework 4.6.1, this exception is no longer thrown, and re-entrant filters as described above may be used.

SugestãoSuggestion

Lembre-se de que FilterMessage(Message) não será mais gerado para o comportamento PreFilterMessage(Message) reentrante descrito acima.Be aware that FilterMessage(Message) will no longer throw for the re-entrant PreFilterMessage(Message) behavior described above. Isso afeta somente os aplicativos destinados ao .NET Framework 4.6.1. Os aplicativos destinados ao .NET Framework 4.6.1 podem recusar essa alteração (ou os aplicativos de Frameworks mais antigos podem aceitar) usando a opção de compatibilidade DontSupportReentrantFilterMessage.This only affects applications targeting the .NET Framework 4.6.1.Apps targeting the .NET Framework 4.6.1 can opt out of this change (or apps targeting older Frameworks may opt in) by using the DontSupportReentrantFilterMessage compatibility switch.

NameName ValorValue
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.6.14.6.1
TypeType RedirecionandoRetargeting

APIs afetadasAffected APIs

DataObject.GetData agora recupera dados como UTF-8DataObject.GetData now retrieves data as UTF-8

DetalhesDetails

Para aplicativos destinados ao .NET Framework 4 ou que são executados no .NET Framework 4.5.1 ou em versões mais recentes, DataObject.GetData recupera dados formatados em HTML como uma cadeia de caracteres ASCII.For apps that target the .NET Framework 4 or that run on the .NET Framework 4.5.1 or earlier versions, DataObject.GetData retrieves HTML-formatted data as an ASCII string. Como resultado, caracteres não ASCII (caracteres cujos códigos ASCII são maiores que 0x7F) são representados por dois caracteres aleatórios.As a result, non-ASCII characters (characters whose ASCII codes are greater than 0x7F) are represented by two random characters.

Para aplicativos direcionados ao .NET Framework 4.5 ou posteriores e executados no .NET Framework 4.5.2, o DataObject.GetData recupera dados formatados em HTML como UTF-8, que representam caracteres maiores que 0x7F corretamente.For apps that target the .NET Framework 4.5 or later and run on the .NET Framework 4.5.2, DataObject.GetData retrieves HTML-formatted data as UTF-8, which represents characters greater than 0x7F correctly.

SugestãoSuggestion

Se você implementou uma solução alternativa para o problema de codificação com cadeias de caracteres formatadas em HTML (por exemplo, codificando explicitamente a cadeia de caracteres HTML recuperada da área de transferência enviando-a para System.Text.UTF8Encoding.GetString(Byte[], Int32, Int32)) e estiver redirecionando seu aplicativo da versão 4 para a versão 4.5, essa solução deverá ser removida. Se o comportamento antigo for necessário por algum motivo, o aplicativo poderá ser destinado ao .NET Framework 4.0 para obtê-lo.If you implemented a workaround for the encoding problem with HTML-formatted strings (for example, by explicitly encoding the HTML string retrieved from the Clipboard by passing it to System.Text.UTF8Encoding.GetString(Byte[], Int32, Int32)) and you're retargeting your app from version 4 to 4.5, that workaround should be removed.If the old behavior is needed for some reason, the app can target the .NET Framework 4.0 to get that behavior.

NameName ValorValue
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.5.24.5.2
TypeType RedirecionandoRetargeting

APIs afetadasAffected APIs

Icon.ToBitmap converte com êxito ícones com quadros PNG em objetos BitmapIcon.ToBitmap successfully converts icons with PNG frames into Bitmap objects

DetalhesDetails

Começando com os aplicativos direcionados ao .NET Framework 4.6, o método Icon.ToBitmap converte com êxito ícones com quadros PNG em objetos Bitmap.Starting with the apps that target the .NET Framework 4.6, the Icon.ToBitmap method successfully converts icons with PNG frames into Bitmap objects.

Nos aplicativos direcionados ao .NET Framework 4.5.2 e a versões anteriores, o método Icon.ToBitmap gera uma exceção ArgumentOutOfRangeException quando o objeto Ícone tem quadros PNG.In apps that target the .NET Framework 4.5.2 and earlier versions, the Icon.ToBitmap method throws an ArgumentOutOfRangeException exception if the Icon object has PNG frames.

Essa alteração afeta os aplicativos que são recompilados para serem direcionados ao .NET Framework 4.6 e que implementam um tratamento especial para a ArgumentOutOfRangeException, que será gerada quando um objeto Ícone tiver quadros PNG.This change affects apps that are recompiled to target the .NET Framework 4.6 and that implement special handling for the ArgumentOutOfRangeException that is thrown when an Icon object has PNG frames. Ao executar no .NET Framework 4.6, a conversão é bem-sucedida, uma ArgumentOutOfRangeException não é mais gerada e, portanto, o manipulador de exceção não é invocado.When running under the .NET Framework 4.6, the conversion is successful, an ArgumentOutOfRangeException is no longer thrown, and therefore the exception handler is no longer invoked.

SugestãoSuggestion

Se esse comportamento for indesejável, será possível reter o comportamento anterior adicionando o seguinte elemento à seção <runtime> do arquivo app.config:If this behavior is undesirable, you can retain the previous behavior by adding the following element to the <runtime> section of your app.config file:

<AppContextSwitchOverrides
value="Switch.System.Drawing.DontSupportPngFramesInIcons=true" />

Se o arquivo app.config já contiver o elemento AppContextSwitchOverrides, o novo valor deverá ser mesclado ao atributo de valor, da seguinte forma:If the app.config file already contains the AppContextSwitchOverrides element, the new value should be merged with the value attribute like this:

<AppContextSwitchOverrides
value="Switch.System.Drawing.DontSupportPngFramesInIcons=true;<previous key>=<previous value>" />
NameName ValorValue
EscopoScope SecundáriaMinor
VersãoVersion 4.64.6
TypeType RedirecionandoRetargeting

APIs afetadasAffected APIs

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

Chamadas para System.Windows.Input.PenContext.Disable em sistemas habilitados para toque podem gerar ArgumentExceptionCalls to System.Windows.Input.PenContext.Disable on touch-enabled systems may throw an ArgumentException

DetalhesDetails

Em algumas circunstâncias, chamadas para o método interno System.Windows.Intput.PenContext.Disable em sistemas habilitados para toque podem gerar uma T:System.ArgumentException sem tratamento devido à reentrância.Under some circumstances, calls to the internal System.Windows.Intput.PenContext.Disable method on touch-enabled systems may throw an unhandled T:System.ArgumentException because of reentrancy.

SugestãoSuggestion

Esse problema foi resolvido no .NET Framework 4.7.This issue has been addressed in the .NET Framework 4.7. Para evitar a exceção, atualize para uma versão do .NET Framework a partir de 4.7.To prevent the exception, upgrade to a version of the .NET Framework starting with the .NET Framework 4.7.

NameName ValorValue
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.6.14.6.1
TypeType RedirecionandoRetargeting

CurrentCulture não é preservada entre operações do Dispatcher do WPFCurrentCulture is not preserved across WPF Dispatcher operations

DetalhesDetails

A partir do .NET Framework 4.6, alterações em System.Globalization.CultureInfo.CurrentCulture ou System.Globalization.CultureInfo.CurrentUICulture feitas em um System.Windows.Threading.Dispatcher serão perdidas ao final dessa operação do dispatcher.Beginning in the .NET Framework 4.6, changes to System.Globalization.CultureInfo.CurrentCulture or System.Globalization.CultureInfo.CurrentUICulture made within a System.Windows.Threading.Dispatcher will be lost at the end of that dispatcher operation. Da mesma forma, alterações em System.Globalization.CultureInfo.CurrentCulture ou System.Globalization.CultureInfo.CurrentUICulture feitas fora de uma operação de Dispatcher podem não ser refletidas quando a operação é executada. Em termos práticos, isso significa que alterações em System.Globalization.CultureInfo.CurrentCulture e System.Globalization.CultureInfo.CurrentUICulture podem não fluir entre retornos de chamada de UI do WPF e outro código em um aplicativo do WPF. Isso ocorre devido a uma alteração em System.Threading.ExecutionContext que faz com que System.Globalization.CultureInfo.CurrentCulture e System.Globalization.CultureInfo.CurrentUICulture sejam armazenados no contexto de execução começando com aplicativos destinados ao .NET Framework 4.6.Similarly, changes to System.Globalization.CultureInfo.CurrentCulture or System.Globalization.CultureInfo.CurrentUICulture made outside of a Dispatcher operation may not be reflected when that operation executes.Practically speaking, this means that System.Globalization.CultureInfo.CurrentCulture and System.Globalization.CultureInfo.CurrentUICulture changes may not flow between WPF UI callbacks and other code in a WPF application.This is due to a change in System.Threading.ExecutionContext that causes System.Globalization.CultureInfo.CurrentCulture and System.Globalization.CultureInfo.CurrentUICulture to be stored in the execution context beginning with apps targeting the .NET Framework 4.6. As operações de dispatcher do WPF armazenam o contexto de execução usado para começar a operação e restaurar o contexto anterior quando a operação é concluída.WPF dispatcher operations store the execution context used to begin the operation and restore the previous context when the operation is completed. Como System.Globalization.CultureInfo.CurrentCulture e System.Globalization.CultureInfo.CurrentUICulture agora fazem parte desse contexto, alterações nelas em uma operação de dispatcher não são persistidas fora da operação.Because System.Globalization.CultureInfo.CurrentCulture and System.Globalization.CultureInfo.CurrentUICulture are now part of that context, changes to them within a dispatcher operation are not persisted outside of the operation.

SugestãoSuggestion

Os aplicativos afetados por essa alteração poderão contornar esse problema ao armazenar o System.Globalization.CultureInfo.CurrentCulture ou System.Globalization.CultureInfo.CurrentUICulture desejado em um campo e verificar em todos os corpos da operação de Dispatcher (incluindo manipuladores de retorno de chamada do evento de interface do usuário) se o System.Globalization.CultureInfo.CurrentCulture e System.Globalization.CultureInfo.CurrentUICulture corretos foram definidos.Apps affected by this change may work around it by storing the desired System.Globalization.CultureInfo.CurrentCulture or System.Globalization.CultureInfo.CurrentUICulture in a field and checking in all Dispatcher operation bodies (including UI event callback handlers) that the correct System.Globalization.CultureInfo.CurrentCulture and System.Globalization.CultureInfo.CurrentUICulture are set. Como alternativa, como a alteração de ExecutionContext subjacente a essa alteração do WPF afeta apenas aplicativos destinados ao .NET Framework 4.6 ou mais recente, essa interrupção poderá ser evitada destinando-os ao .NET Framework 4.5.2. Aplicativos destinados ao .NET Framework 4.6 ou posterior também podem contornar esse problema definindo a seguinte opção de compatibilidade:Alternatively, because the ExecutionContext change underlying this WPF change only affects apps targeting the .NET Framework 4.6 or newer, this break can be avoided by targeting the .NET Framework 4.5.2.Apps that target .NET Framework 4.6 or later can also work around this by setting the following compatibility switch:

AppContext.SetSwitch("Switch.System.Globalization.NoAsyncCurrentCulture", true);

Esse problema foi corrigido pelo WPF no .NET Framework 4.6.2.This issue has been fixed by WPF in .NET Framework 4.6.2. Ele também foi corrigido no .NET Framework 4.6 e 4.6.1 por meio de KB 3139549.It has also been fixed in .NET Frameworks 4.6, 4.6.1 through KB 3139549. Os aplicativos direcionados ao .NET Framework 4.6 ou posterior terão o comportamento correto automaticamente nos aplicativos WPF – System.Globalization.CultureInfo.CurrentCulture/System.Globalization.CultureInfo.CurrentUICulture. Isso seria preservado entre as operações de Dispatcher.Applications targeting .NET Framework 4.6 or later will automatically get the right behavior in WPF applications - System.Globalization.CultureInfo.CurrentCulture/System.Globalization.CultureInfo.CurrentUICulture) would be preserved across Dispatcher operations.

NameName ValorValue
EscopoScope SecundáriaMinor
VersãoVersion 4.64.6
TypeType RedirecionandoRetargeting

Não há suporte para a associação de dados bidirecionais para uma propriedade com um setter não públicoTwo-way data-binding to a property with a non-public setter is not supported

DetalhesDetails

A tentativa de associar dados a uma propriedade sem um setter público nunca foi um cenário com suporte.Attempting to data bind to a property without a public setter has never been a supported scenario. A partir do .NET Framework 4.5.1, esse cenário vai gerar uma System.InvalidOperationException.Beginning in the .NET Framework 4.5.1, this scenario will throw an System.InvalidOperationException. Observe que essa nova exceção será gerada somente para aplicativos destinados especificamente ao .NET Framework 4.5.1.Note that this new exception will only be thrown for apps that specifically target the .NET Framework 4.5.1. Se um aplicativo for destinado ao .NET Framework 4.5, a chamada será permitida.If an app targets the .NET Framework 4.5, the call will be allowed. Se o aplicativo não for destinado a uma versão específica do .NET Framework, a associação será tratada como unidirecional.If the app does not target a particular .NET Framework version, the binding will be treated as one-way.

SugestãoSuggestion

O aplicativo deve ser atualizado para usar a associação unidirecional ou expor publicamente o setter da propriedade.The app should be updated to either use one-way binding, or expose the property's setter publicly. Como alternativa, o direcionamento ao .NET Framework 4.5 fará com que o aplicativo demonstre o comportamento antigo.Alternatively, targeting the .NET Framework 4.5 will cause the app to exhibit the old behavior.

NameName ValorValue
EscopoScope SecundáriaMinor
VersãoVersion 4.5.14.5.1
TypeType RedirecionandoRetargeting

APIs afetadasAffected APIs

Arredondamento de layout do WPF foi alteradoWPF layout rounding of margins has changed

DetalhesDetails

A maneira como as margens são arredondadas, bem como as bordas e a tela de fundo dentro delas, foi alterada.The way in which margins are rounded and borders and the background inside of them has changed. Como resultado dessa alteração:As a result of this change:

  • A largura ou altura dos elementos pode aumentar ou reduzir em um pixel no máximo.The width or height of elements may grow or shrink by at most one pixel.
  • O posicionamento de um objeto pode ser movido até um pixel, no máximo.The placement of an object can move by at most one pixel.
  • Os elementos centralizados podem estar vertical ou horizontalmente fora do centro em, no máximo, um pixel.Centered elements can be vertically or horizontally off center by at most one pixel. Por padrão, esse novo layout é habilitado somente para aplicativos que se destinam ao .NET Framework 4.6.By default, this new layout is enabled only for apps that target the .NET Framework 4.6.

SugestãoSuggestion

Uma vez que essa modificação tende a eliminar a distorção da direita ou da parte inferior dos controles do WPF em DPIs altos, os aplicativos que de destinam a versões anteriores do .NET Framework, mas estão sendo executados no .NET Framework 4.6, podem aderir a esse novo comportamento adicionando a seguinte linha à seção <runtime> do arquivo app.config:Since this modification tends to eliminate clipping of the right or bottom of WPF controls at high DPIs, apps that target earlier versions of the .NET Framework but are running on the .NET Framework 4.6 can opt into this new behavior by adding the following line to the <runtime> section of the app.config file:

<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false" />'

Os aplicativos que são direcionados ao .NET Framework 4.6, mas querem que os controles do WPF sejam renderizados usando o algoritmo de layout anterior podem fazer isso adicionando a seguinte linha à seção <runtime> do arquivo app.config:Apps that target the .NET Framework 4.6 but want WPF controls to render using the previous layout algorithm can do so by adding the following line to the <runtime> section of the app.config file:

<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=true" />'.
NameName ValorValue
EscopoScope SecundáriaMinor
VersãoVersion 4.64.6
TypeType RedirecionandoRetargeting

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

WorkflowDesigner.Load não remove a propriedade de símboloWorkflowDesigner.Load doesn't remove symbol property

DetalhesDetails

Ao destinar para o .NET Framework 4.5 no designer de fluxo de trabalho e carregar um fluxo de trabalho 3.5 hospedado novamente com o método Load(), uma System.Xaml.XamlDuplicateMemberException é gerada durante o salvamento do fluxo de trabalho.When targeting the .NET Framework 4.5 in the workflow designer, and loading a re-hosted 3.5 workflow with the Load() method, a System.Xaml.XamlDuplicateMemberException is thrown while saving the workflow.

SugestãoSuggestion

Esse bug se manifesta somente no direcionamento do .NET Framework 4.5 no designer de fluxo de trabalho, de modo que a solução alternativa é definir o WorkflowDesigner.Context.Services.GetService&lt;DesignerConfigurationService&gt;().TargetFrameworkName para o .NET Framework 4.0. O problema também pode ser evitado usando o método Load(String) para carregar o fluxo de trabalho, em vez de Load().This bug only manifests when targeting .NET Framework 4.5 in the workflow designer, so it can be worked around by setting the WorkflowDesigner.Context.Services.GetService&lt;DesignerConfigurationService&gt;().TargetFrameworkName to the 4.0 .NET Framework.Alternatively, the issue may be avoided by using the Load(String) method to load the workflow, instead of Load().

NameName ValorValue
EscopoScope PrincipalMajor
VersãoVersion 4.54.5
TypeType RedirecionandoRetargeting

APIs afetadasAffected APIs

XML, XSLTXML, XSLT

XmlWriter é gerado com pares alternativos inválidosXmlWriter throws on invalid surrogate pairs

DetalhesDetails

Em aplicativos direcionados ao NET Framework 4.5.2 ou versões anteriores, escrever um par alternativo inválido usando o tratamento de fallback de exceção nem sempre gera uma exceção.For apps that target the .NET Framework 4.5.2 or previous versions, writing an invalid surrogate pair using exception fallback handling does not always throw an exception. Em aplicativos destinados ao .NET Framework 4.6, tentar escrever um par alternativo inválido gera System.ArgumentException.For apps that target the .NET Framework 4.6, attempting to write an invalid surrogate pair throws an System.ArgumentException.

SugestãoSuggestion

Se necessário, essa interrupção pode ser evitada destinando ao .NET Framework 4.5.2 ou versões anteriores.If necessary, this break can be avoided by targeting the .NET Framework 4.5.2 or earlier. Como alternativa, os pares alternativos inválidos podem ser pré-processados em um xml válido antes serem escritos.Alternatively, invalid surrogate pairs can be pre-processed into valid xml prior to writing them.

NameName ValorValue
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.64.6
TypeType RedirecionandoRetargeting

APIs afetadasAffected APIs

A validação do Esquema XSD agora detecta corretamente as violações de restrições exclusivas se chaves compostas forem usadas e uma chave estiver vaziaXSD Schema validation now correctly detects violations of unique constraints if compound keys are used and one key is empty

DetalhesDetails

As versões do .NET Framework anteriores a 4.6 tinham um bug que fazia com que a validação de XSD não detectasse restrições exclusivas em chaves compostas se uma das chaves estivesse vazia.Versions of the .NET Framework prior to 4.6 had a bug that caused XSD validation to not detect unique constraints on compound keys if one of the keys was empty. No .NET Framework 4.6, esse problema foi corrigido.In the .NET Framework 4.6, this issue is corrected. Isso resultará na validação mais correta, mas também pode resultar na não validação de algum XML que anteriormente seria validado.This will result in more correct validation, but it may also result in some XML not validating which previously would have.

SugestãoSuggestion

Se for necessária uma validação menos rigorosa do .NET Framework 4.0, o aplicativo de validação poderá ser destinado à versão 4.5 (ou anterior) do .NET Framework.If looser .NET Framework 4.0 validation is needed, the validating application can target version 4.5 (or earlier) of the .NET Framework. No entanto, ao redirecionar para o .NET Framework 4.6, será necessário fazer uma revisão de código para garantir que não seja esperado que chaves compostas duplicadas (conforme é descrito na descrição desse problema) sejam validadas.When retargeting to .NET Framework 4.6, however, code review should be done to be sure that duplicate compound keys (as described in this issue's description) are not expected to validate.

NameName ValorValue
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.64.6
TypeType RedirecionandoRetargeting