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

Introduction

Runtime changes affect all apps that are running under a .NET Framework it was not compiled against and that use a particular feature.

In the topics that describe runtime changes, we have classified individual items by their expected impact, as follows:

Major This is a significant change that affects a large number of apps or that requires substantial modification of code.

Minor This is a change that affects a small number of apps or that requires minor modification of code.

Edge case This is a change that affects apps under very specific scenarios that are not common.

Transparent This is a change that has no noticeable effect on the app's developer or user. The app should not require modification because of this change.

Se você estiver migrando do .NET Framework 4.0 para 4.7.2, 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.0 to 4.7.2, review the following topics for application compatibility issues that may affect your app:

ADO.NETADO.NET

Agora, ADO.NET tentará reconectar automaticamente conexões SQL interrompidasADO.NET now attempts to automatically reconnect broken SQL connections

DetalhesDetails A partir do .NET Framework 4.5.1, o .NET Framework tentará reconectar automaticamente conexões SQL interrompidas.Beginning in the .NET Framework 4.5.1, the .NET Framework will attempt to automatically reconnect broken SQL connections. Embora, normalmente, isso torne os aplicativos mais confiáveis, há casos de borda em que um aplicativo precisa saber que a conexão foi perdida para tomar medidas sobre a reconexão.Although this will typically make apps more reliable, there are edge cases in which an app needs to know that the connection was lost so that it can take some action upon reconnection.
SugestãoSuggestion Se esse recurso for indesejável devido a preocupações de compatibilidade, ele poderá ser desabilitado por meio da configuração da propriedade ConnectRetryCount de uma cadeia de conexão (ou SqlConnectionStringBuilder) para 0.If this feature is undesirable due to compatibility concerns, it can be disabled by setting the ConnectRetryCount property of a connection string (or SqlConnectionStringBuilder) to 0.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.5.14.5.1
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

ASP.NETASP.NET

O MVC do ASP.NET agora escapa espaços em cadeias de caracteres passadas por meio dos parâmetros de rotaASP.NET MVC now escapes spaces in strings passed in via route parameters

DetalhesDetails Para estar em conformidade com a RFC 2396, os espaços nos caminhos de rota agora são escapados na população dos parâmetros de ação usando uma rota.In order to conform to RFC 2396, spaces in route paths are now escaped when populating action parameters from a route. Portanto, enquanto /controller/action/some data anteriormente correspondia à rota /controller/action/{data} e fornecia some data como o parâmetro de dados, ele agora fornecerá some%20data.So, whereas /controller/action/some data would previously match the route /controller/action/{data} and provide some data as the data parameter, it will now provide some%20data instead.
SugestãoSuggestion O código deve ser atualizado para não escapar parâmetros de cadeia de caracteres de uma rota.Code should be updated to unescape string parameters from a route. Se o URI original for necessário, ele poderá ser acessado com a API RequestUri.OriginalString.If the original URI is needed, it can be accessed with the RequestUri.OriginalString API.
EscopoScope SecundárioMinor
VersãoVersion 4.5.24.5.2
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

A propriedade HttpRequest.ContentEncoding proíbe a UTF7HttpRequest.ContentEncoding property prohibits UTF7

DetalhesDetails A partir do .NET Framework 4.5, a codificação UTF-7 está proibida nos corpos de HttpRequest.Beginning in .NET Framework 4.5, UTF-7 encoding is prohibited in HttpRequests' bodies. Os dados para aplicativos que dependem de dados de entrada UTF-7 não serão decodificados corretamente em alguns casos.Data for applications that depend on incoming UTF-7 data will not decode properly in some cases.
SugestãoSuggestion De modo ideal, os aplicativos devem ser atualizados para não usar a codificação UTF-7 em HttpRequest.Ideally, applications should be updated to not use UTF-7 encoding in HttpRequests. De modo alternativo, o comportamento herdado pode ser restaurado usando o atributo aspnet:AllowUtf7RequestContentEncoding do elemento appSettings.Alternatively, legacy behavior can be restored by using the aspnet:AllowUtf7RequestContentEncoding attribute of the appSettings element.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

HttpUtility.JavaScriptStringEncode escapa o E comercialHttpUtility.JavaScriptStringEncode escapes ampersand

DetalhesDetails A partir do .NET Framework 4.5, JavaScriptStringEncode(String) ignora o caractere E comercial (&).Starting with the .NET Framework 4.5, JavaScriptStringEncode(String) escapes the ampersand (&) character.
SugestãoSuggestion Se seu aplicativo depende do comportamento anterior desse método, você poderá adicionar uma definição aspnet:JavaScriptDoNotEncodeAmpersand ao elemento appSettings do ASP.NET no seu arquivo de configuração.If your app depends on the previous behavior of this method, you can add an aspnet:JavaScriptDoNotEncodeAmpersand setting to the ASP.NET appSettings element in your configuration file.
EscopoScope SecundárioMinor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

IPad não deve ser usado no arquivo de funcionalidades personalizadas, pois agora é uma funcionalidade do navegadorIPad should not be used in custom capabilities file because it is now a browser capability

DetalhesDetails Começando com o .NET Framework 4.5, o iPad é um identificador no arquivo de funcionalidades padrão do navegador ASP.NET, portanto ele não deve ser usado em um arquivo de funcionalidades personalizadosBeginning in .NET Framework 4.5, iPad is an identifier in the default ASP.NET browser capabilities file, so it should not be used in a custom capabilities file
SugestãoSuggestion Se funcionalidades específicas do iPad forem exigidas, será necessário modificar o comportamento dele configurando funcionalidades na refID do gateway predefinido "IPad" em vez de gerar uma nova ID "IPad" pela correspondência do agente do usuário.If iPad-specific capabilities are required, it is necessary to modify iPad behavior by setting capabilities on the pre-defined gateway refID "IPad" instead of by generating a new "IPad" ID by user agent matching.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime

Não é mais possível definir EnableViewStateMac como falseNo longer able to set EnableViewStateMac to false

DetalhesDetails O ASP.NET não permite mais que os desenvolvedores especifiquem <pages enableViewStateMac="false"/> ou <@Page EnableViewStateMac="false" %>.ASP.NET no longer allows developers to specify <pages enableViewStateMac="false"/> or <@Page EnableViewStateMac="false" %>. O MAC (Message Authentication Code) de estado da exibição agora é obrigatório em todas as solicitações com estado de exibição embutido.The view state message authentication code (MAC) is now enforced for all requests with embedded view state. Apenas aplicativos que definiram explicitamente a propriedade EnableViewStateMac como false são afetados.Only apps that explicitly set the EnableViewStateMac property to false are affected.
SugestãoSuggestion EnableViewStateMac deve ser considerada true e qualquer erro MAC resultante deverá ser resolvido (conforme explicado nestas diretrizes, que contêm várias resoluções que variam de acordo com as características do que está causando os erros MAC).EnableViewStateMac must be assumed to be true, and any resulting MAC errors must be resolved (as explained in this guidance, which contains multiple resolutions depending on the specifics of what is causing MAC errors).
EscopoScope PrincipalMajor
VersãoVersion 4.5.24.5.2
TipoType Tempo de execuçãoRuntime

O evento Page.LoadComplete não faz mais com que o controle System.Web.UI.WebControls.EntityDataSource invoque a associação de dadosPage.LoadComplete event no longer causes System.Web.UI.WebControls.EntityDataSource control to invoke data binding

DetalhesDetails O evento LoadComplete não faz mais com que o controle EntityDataSource chame a associação de dados para alterações par criar/atualizar/excluir parâmetros.The LoadComplete event no longer causes the EntityDataSource control to invoke data binding for changes to create/update/delete parameters. Essa alteração elimina um processamento irrelevante para o banco de dados, impede que os valores dos controles sejam redefinidos e gera um comportamento consistente com outros controles de dados, como SqlDataSource e ObjectDataSource.This change eliminates an extraneous trip to the database, prevents the values of controls from being reset, and produces behavior that is consistent with other data controls, such as SqlDataSource and ObjectDataSource. Essa alteração gera um comportamento diferente em um evento improvável no qual os aplicativos dependam da associação de dados no evento LoadComplete.This change produces different behavior in the unlikely event that applications rely on invoking data binding in the LoadComplete event.
SugestãoSuggestion Se houver necessidade de vinculação de dados, invoque manualmente a associação de dados em um evento que seja anterior no post-back.If there is a need for databinding, manually invoke databind in an event that is earlier in the post-back.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime

Compartilhamento de estado de sessão com StateServer Asp.Net exige que todos os servidores no web farm usem a mesma versão do .NET FrameworkSharing session state with Asp.Net StateServer requires all servers in the web farm to use the same .NET Framework version

DetalhesDetails Ao habilitar o estado de sessão StateServer, todos os servidores no web farm fornecido devem usar a mesma versão do .NET Framework para o estado ser compartilhado corretamente.When enabling StateServer session state, all of the servers in the given web farm must use the same version of the .NET Framework in order for state to be properly shared.
SugestãoSuggestion Certifique-se de atualizar as versões do .NET Framework em servidores Web que compartilham o estado ao mesmo tempo.Be sure to upgrade .NET Framework versions on web servers that share state at the same time.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

WebUtility.HtmlDecode não decodifica mais sequências de entrada inválidasWebUtility.HtmlDecode no longer decodes invalid input sequences

DetalhesDetails Por padrão, os métodos de decodificação não decodificam mais uma sequência de entrada válida em uma cadeia de caracteres UTF-16 inválida.By default, decoding methods no longer decode an invalid input sequence into an invalid UTF-16 string. Em vez disso, eles retornam a entrada original.Instead, they return the original input.
SugestãoSuggestion A alteração na saída do decodificador deve importar somente se você armazenar dados binários em vez de dados UTF-16 em cadeias de caracteres.The change in decoder output should matter only if you store binary data instead of UTF-16 data in strings. Para controlar explicitamente esse comportamento, defina o atributo aspnet:AllowRelaxedUnicodeDecoding do elemento appSettings como true para habilitar o comportamento herdado ou como false para habilitar o comportamento atual.To explicitly control this behavior, set the aspnet:AllowRelaxedUnicodeDecoding attribute of the appSettings element to true to enable legacy behavior or to false to enable the current behavior.
EscopoScope SecundárioMinor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

NúcleoCore

Permitir Unicode em URIs semelhantes a compartilhamentos UNCAllow Unicode in URIs that resemble UNC shares

DetalhesDetails No System.Uri, a criação de um URI de arquivo contendo um nome do compartilhamento UNC e caracteres Unicode não resultará mais em um URI com estado interno inválido.In System.Uri, constructing a file URI containing both a UNC share name and Unicode characters will no longer result in a URI with invalid internal state. O comportamento será alterado somente quando todos os itens a seguir forem verdadeiros:The behavior will change only when all of the following are true:
  • O URI tiver o esquema file: e for seguido por quatro ou mais barras.The URI has the scheme file: and is followed by four or more slashes.
  • O nome do host começar com um sublinhado ou outro símbolo não reservado.The host name begins with an underscore or other non-reserved symbol.
  • O URI contiver caracteres Unicode.The URI contains Unicode characters.
SugestãoSuggestion Os aplicativos que funcionam com URIs que contêm Unicode de forma consistente podem ter aceitado o uso desse comportamento para não permitir referências a compartilhamentos UNC.Applications working with URIs consistently containing Unicode could have conceivably used this behavior to disallow references to UNC shares. Esses aplicativos devem usar IsUnc.Those applications should use IsUnc instead.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.7.24.7.2
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

AppDomainSetup.DynamicBase não é mais randomizado por UseRandomizedStringHashAlgorithmAppDomainSetup.DynamicBase is no longer randomized by UseRandomizedStringHashAlgorithm

DetalhesDetails Antes do .NET Framework 4.6, o valor de DynamicBase seria randomizado entre domínios de aplicativos ou entre processos se UseRandomizedStringHashAlgorithm estivesse habilitado no arquivo de configuração do aplicativo.Prior to the .NET Framework 4.6, the value of DynamicBase would be randomized between application domains, or between processes, if UseRandomizedStringHashAlgorithm was enabled in the app's config file. A partir do .NET Framework 4.6, DynamicBase retornará um resultado estável entre instâncias diferentes de um aplicativo em execução e entre diferentes domínios de aplicativo.Beginning in the .NET Framework 4.6, DynamicBase will return a stable result between different instances of an app running, and between different app domains. Bases dinâmicas ainda serão diferentes para diferentes aplicativos. Essa alteração remove apenas o elemento de nomenclatura aleatório para instâncias diferentes do mesmo aplicativo.Dynamic bases will still differ for different apps; this change only removes the random naming element for different instances of the same app.
SugestãoSuggestion Lembre-se de que habilitar UseRandomizedStringHashAlgorithm não fará com que DynamicBase seja randomizado.Be aware that enabling UseRandomizedStringHashAlgorithm will not result in DynamicBase being randomized. Se for necessária uma base aleatória, ela deverá ser produzida no código do aplicativo, e não por meio dessa API.If a random base is needed, it must be produced in your app's code rather than via this API.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.64.6
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Assemblies compilados com interrupções Regex.CompileToAssembly entre o 4.0 e o 4.5Assemblies compiled with Regex.CompileToAssembly breaks between 4.0 and 4.5

DetalhesDetails Se uma assembly de expressões regulares compiladas é trabalhada com o .NET Framework 4.5 mas é destinada ao .NET Framework 4, numa tentativa de usar uma das expressões regulares em que a assembly de um sistema com .NET Framework 4 instalado gera uma exceção.If an assembly of compiled regular expressions is built with the .NET Framework 4.5 but targets the .NET Framework 4, attempting to use one of the regular expressions in that assembly on a system with .NET Framework 4 installed throws an exception.
SugestãoSuggestion Para solucionar esse problema, pode-se seguir uma das seguintes alternativas:To work around this problem, you can do either of the following:
  • Compilar o assembly que contém as expressões regulares com o .NET Framework 4.Build the assembly that contains the regular expressions with the .NET Framework 4.
  • Use uma expressão regular interpretada.Use an interpreted regular expression.
EscopoScope SecundárioMinor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

BlockingCollection<T>.TryTakeFromAny não é mais geradoBlockingCollection<T>.TryTakeFromAny does not throw anymore

DetalhesDetails Se uma das coleções de entrada for marcada como concluída, TryTakeFromAny(BlockingCollection<T>[], T) não retornará mais -1 e TakeFromAny(BlockingCollection<T>[], T) não vai mais gerar uma exceção.If one of the input collections is marked completed, TryTakeFromAny(BlockingCollection<T>[], T) no longer returns -1 and TakeFromAny(BlockingCollection<T>[], T) no longer throws an exception. Essa alteração possibilita trabalhar com coleções quando uma das coleções está vazia ou concluída, mas a outra coleção ainda possui itens que podem ser recuperados.This change makes it possible to work with collections when one of the collections is either empty or completed, but the other collection still has items that can be retrieved.
SugestãoSuggestion Se o retorno de -1 de TryTakeFromAny ou a geração de TakeFromAny foram usados para fins de fluxo de controle no caso de conclusão de uma coleção de blocos, tal código agora deverá ser alterado para usar .Any(b => b.IsCompleted) a fim de detectar essa condição.If TryTakeFromAny returning -1 or TakeFromAny throwing were used for control-flow purposes in cases of a blocking collection being completed, such code should now be changed to use .Any(b => b.IsCompleted) to detect that condition.
EscopoScope SecundárioMinor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Chamar Attribute.GetCustomAttributes na propriedade de um indexador não vai mais gerar AmbiguousMatchException se a ambiguidade puder ser resolvida pelo tipo do índiceCalling Attribute.GetCustomAttributes on an indexer property no longer throws AmbiguousMatchException if the ambiguity can be resolved by index's type

DetalhesDetails Antes do .NET Framework 4.6, chamar GetCustomAttribute(s) na propriedade de um indexador que diferia de outra propriedade apenas pelo tipo do índice resultaria em um AmbiguousMatchException.Prior to the .NET Framework 4.6, calling GetCustomAttribute(s) on an indexer property which differed from another property only by the type of the index would result in an AmbiguousMatchException. A partir do .NET Framework 4.6, os atributos da propriedade serão corretamente retornados.Beginning in the .NET Framework 4.6, the property's attributes will be correctly returned.
SugestãoSuggestion Lembre-se de que GetCustomAttribute(s) funcionará com mais frequência agora.Be aware that GetCustomAttribute(s) will work more frequently now. Se um aplicativo anteriormente contava com o AmbiguousMatchException, a reflexão agora deverá ser usada para procurar explicitamente vários indexadores.If an app was previously relying on the AmbiguousMatchException, reflection should now be used to explicitly look for multiple indexers, instead.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.64.6
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Mudança no comportamento de métodos Task.WaitAll com argumentos de tempo limiteChange in behavior for Task.WaitAll methods with time-out arguments

DetalhesDetails O comportamento de Task.WaitAll ficou mais consistente no .NET Framework 4.5. No .NET Framework 4, esses métodos se comportavam de forma inconsistente.Task.WaitAll behavior was made more consistent in .NET Framework 4.5.In the .NET Framework 4, these methods behaved inconsistently. Quando o tempo limite expirou, se uma ou mais tarefas foram concluídas ou canceladas antes da chamada de método, o método lançou uma exceção AggregateException.When the time-out expired, if one or more tasks were completed or canceled before the method call, the method threw an AggregateException exception. Quando o tempo limite expirava, se nenhuma tarefa tivesse sido concluída ou cancelada antes da chamada de método, mas uma ou mais tarefas tivessem entrado nesses estados após a chamada de método, o método retornava false.When the time-out expired, if no tasks were completed or canceled before the method call, but one or more tasks entered these states after the method call, the method returned false.

No .NET Framework 4.5, essas sobrecargas de método agora retornam false se alguma tarefa ainda está em execução quando o intervalo de tempo limite expira e geram uma exceção AggregateException somente se uma tarefa de entrada é cancelada (não importa se antes ou depois da chamada de método) e nenhuma outra tarefa ainda está em execução.In the .NET Framework 4.5, these method overloads now return false if any tasks are still running when the time-out interval expired, and they throw an AggregateException exception only if an input task was cancelled (regardless of whether it was before or after the method call) and no other tasks are still running.
SugestãoSuggestion Se um AggregateException era capturado como um meio de detectar uma tarefa cancelada antes da invocação da chamada de WaitAll, esse código deverá fazer a mesma detecção por meio da propriedade IsCanceled [por exemplo: .Any(t => t.IsCanceled)], porque o .NET Framework 4.6 acionará esse caso apenas se todas as tarefas esperadas forem concluídas antes do tempo limite.If an AggregateException was being caught as a means of detecting a task that was cancelled prior to the WaitAll call being invoked, that code should instead do the same detection via the IsCanceled property (for example: .Any(t => t.IsCanceled)) since .NET Framework 4.6 will only throw in that case if all awaited tasks are completed prior to the timeout.
EscopoScope SecundárioMinor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Compilador compatível com encaminhamento de tipos ao destinar várias vezes o mscorlibCompiler support for type forwarding when multi-targeting mscorlib

DetalhesDetails Um novo recurso CodeDOM permite a um compilador compilar com a versão de destino do mscorlib.dll em vez da versão do .NET Framework 4.5 de mscorlib.dll.A new CodeDOM feature allows a compiler to compile against the targeted version of mscorlib.dll instead of the .NET Framework 4.5 version of mscorlib.dll.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime

Desserialização de objetos em domínios de aplicativo podem falharDeserialization of objects across appdomains can fail

DetalhesDetails Em alguns casos, quando um aplicativo usa dois ou mais domínios de aplicativo com bases de aplicativo diferentes, a tentativa de desserializar objetos no contexto da chamada lógica nos domínios de aplicativo aciona uma exceção.In some cases, when an app uses two or more app domains with different application bases, trying to deserialize objects in the logical call context across app domains throws an exception.
SugestãoSuggestion Confira Mitigação: Desserialização de objetos em domínios do aplicativoSee Mitigation: Deserialization of Objects Across App Domains
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.5.14.5.1
TipoType Tempo de execuçãoRuntime

EventListener trunca cadeias de caracteres com nulos inseridosEventListener truncates strings with embedded nulls

DetalhesDetails EventListener trunca cadeias de caracteres com nulos inseridos.EventListener truncates strings with embedded nulls. Os caracteres nulos não são compatíveis com a classe EventSource.Null characters are not supported by the EventSource class. A alteração afeta apenas os aplicativos que usam EventListener para ler dados EventSource no processo e que usam caracteres nulos como delimitadores.The change only affects apps that use EventListener to read EventSource data in process and that use null characters as delimiters.
SugestãoSuggestion Os dados EventSource devem ser atualizados, se possível, para não usar caracteres nulos inseridos.EventSource data should be updated, if possible, to not use embedded null characters.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.5.14.5.1
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

EventSource.WriteEvent deve passar a WriteEvent os mesmos parâmetros que recebeu (mais ID)EventSource.WriteEvent impls must pass WriteEvent the same parameters that it received (plus ID)

DetalhesDetails O tempo de execução agora aplica o contrato que especifica o seguinte: Uma classe derivada de EventSource que define um método de evento ETW deve chamar o método de classe base EventSource.WriteEvent com a ID do evento seguido dos mesmos argumentos que o método de evento ETW passou.The runtime now enforces the contract that specifies the following: A class derived from EventSource that defines an ETW event method must call the base class EventSource.WriteEvent method with the event ID followed by the same arguments that the ETW event method was passed.
SugestãoSuggestion Uma exceção IndexOutOfRangeException será acionada se um EventListener ler dados EventSource no processo de uma origem de evento que viola esse contrato.An IndexOutOfRangeException exception is thrown if an EventListener reads EventSource data in process for an event source that violates this contract.
EscopoScope SecundárioMinor
VersãoVersion 4.5.14.5.1
TipoType Tempo de execuçãoRuntime

Exceções durante o processamento não observado em System.Threading.Tasks.Task não são mais propagadas no thread do finalizadorExceptions during unobserved processing in System.Threading.Tasks.Task no longer propagate on finalizer thread

DetalhesDetails Como a classe Task representa uma operação assíncrona, ela captura todas as exceções não graves que ocorrem durante o processamento assíncrono.Because the Task class represents an asynchronous operation, it catches all non-severe exceptions that occur during asynchronous processing. No .NET Framework 4.5, se uma exceção não for observada e seu código nunca aguarda a tarefa, a exceção não será mais propagada no thread do finalizador e causará a falha do processo durante a coleta de lixo.In the .NET Framework 4.5, if an exception is not observed and your code never waits on the task, the exception will no longer propagate on the finalizer thread and crash the process during garbage collection. Essa alteração melhora a confiabilidade de aplicativos que usam a classe Task para executar processamento assíncrono não observado.This change enhances the reliability of applications that use the Task class to perform unobserved asynchronous processing.
SugestãoSuggestion Se um aplicativo depender de exceções assíncronas não observadas que se propagam para o thread do finalizador, o comportamento anterior poderá ser restaurado com o fornecimento de um manipulador apropriado para o evento UnobservedTaskException ou com a definição de um elemento de configuração de tempo de execução.If an app depends on unobserved asynchronous exceptions propagating to the finalizer thread, the previous behavior can be restored by providing an appropriate handler for the UnobservedTaskException event, or by setting a runtime configuration element.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

O algoritmo List.Sort foi alteradoList.Sort algorithm changed

DetalhesDetails A partir do .NET Framework 4.5, o algoritmo de classificação de List<T> foi alterado (para ser uma classificação introspectiva em vez de uma classificação rápida).Beginning in .NET Framework 4.5, List<T>'s sort algorithm has changed (to be an introspective sort instead of a quick sort). A classificação de List<T> nunca foi estável, mas essa alteração pode fazer com que cenários diferentes sejam classificados de maneiras instáveis.List<T>'s sort has never been stable, but this change may cause different scenarios to sort in unstable ways. Isso significa apenas que itens equivalentes podem ser classificados em ordens diferentes em chamadas posteriores da API.That simply means that equivalent items may sort in different orders in subsequent calls of the API.
SugestãoSuggestion Como o algoritmo de classificação antigo também era instável (embora de maneiras ligeiramente diferentes), não deve haver nenhum código que dependa de itens equivalentes sempre serem classificados em uma ordem específica.Because the old sort algorithm was also unstable (though in slightly different ways), there should be no code that depends on equivalent items always sorting in a particular order. Se houver casos de códigos que dependem disso e que tinham sorte com o comportamento antigo, esses códigos deverão ser atualizados para usar um comparador que classifique de forma determinista os itens na ordem desejada.If there are instances of code depending upon that and being lucky with the old behavior, that code should be updated to use a comparer that will deterministically sort the items in the desired order.
EscopoScope TransparenteTransparent
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

As sobrecargas Marshal.SizeOf e Marshal.PtrToStructure interrompem o código dinâmicoMarshal.SizeOf and Marshal.PtrToStructure overloads break dynamic code

DetalhesDetails A partir do .NET Framework 4.5.1, a associação dinâmica aos métodos SizeOf<T>(), SizeOf<T>(T), PtrToStructure(IntPtr, Object), PtrToStructure(IntPtr, Type), PtrToStructure<T>(IntPtr) ou PtrToStructure<T>(IntPtr, T) (por meio do Windows PowerShell, IronPython ou da palavra-chave dinâmica do C#, por exemplo) pode resultar em MethodInvocationExceptions, pois novas sobrecargas desses métodos que foram adicionadas podem ser ambíguas para os mecanismos de script.Beginning in the .NET Framework 4.5.1, dynamically binding to the methods SizeOf<T>(), SizeOf<T>(T), PtrToStructure(IntPtr, Object), PtrToStructure(IntPtr, Type), PtrToStructure<T>(IntPtr), or PtrToStructure<T>(IntPtr, T), (via Windows PowerShell, IronPython, or the C# dynamic keyword, for example) can result in MethodInvocationExceptions because new overloads of these methods have been added that may be ambiguous to the scripting engines.
SugestãoSuggestion Atualize os scripts para indicar claramente qual sobrecarga deve ser usada.Update scripts to clearly indicate which overload should be used. Normalmente, isso pode ser feito convertendo explicitamente os parâmetros de tipo dos métodos como Type.This can typically done by explicitly casting the methods' type parameters as Type. Clique neste link para obter mais detalhes e exemplos de como contornar o problema.See this link for more detail and examples of how to workaround the issue.
EscopoScope SecundárioMinor
VersãoVersion 4.5.14.5.1
TipoType Tempo de execuçãoRuntime

Ausência do Moniker da Estrutura de Destino resulta no comportamento da versão 4.0Missing Target Framework Moniker results in 4.0 behavior

DetalhesDetails Os aplicativos sem um TargetFrameworkAttribute aplicado no nível de assembly serão executados automaticamente usando a semântica (quirks) do .NET Framework 4.0.Applications without a TargetFrameworkAttribute applied at the assembly level will automatically run using the semantics (quirks) of the .NET Framework 4.0. Para garantir a alta qualidade, é recomendável que todos os binários sejam explicitamente atribuídos com um TargetFrameworkAttribute indicando a versão do .NET Framework com a qual eles foram criados.To ensure high quality, it is recommended that all binaries be explicitly attributed with a TargetFrameworkAttribute indicating the version of the .NET Framework they were built with. Usar um moniker da estrutura de destino em um arquivo de projeto fará com que o MSBuild aplique automaticamente um TargetFrameworkAttribute.Note that using a target framework moniker in a project file will cause MSBuild to automatically apply a TargetFrameworkAttribute.
SugestãoSuggestion O TargetFrameworkAttribute deve ser fornecido, seja por meio da adição do atributo diretamente ao assembly ou da especificação de uma estrutura de destino no arquivo de projeto, seja por meio da GUI das propriedades do projeto do Visual Studio.A TargetFrameworkAttribute should be supplied, either through adding the attribute directly to the assembly or by specifying a target framework in the project file or through Visual Studio's project properties GUI.
EscopoScope PrincipalMajor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime

O calendário persa agora usa o algoritmo solar islâmicoPersian calendar now uses the Hijri solar algorithm

DetalhesDetails A partir do .NET Framework 4.6, a classe PersianCalendar usa o algoritmo solar islâmico.Starting with the .NET Framework 4.6, the PersianCalendar class uses the Hijri solar algorithm. Converter datas entre o PersianCalendar e outros calendários pode produzir um resultado um pouco diferente começando com o .NET Framework 4.6 para datas anteriores a 1800 ou posteriores a 2023 (gregoriano). Além disso, agora PersianCalendar.MinSupportedDateTime é March 22, 0622 em vez de March 21, 0622.Converting dates between the PersianCalendar and other calendars may produce a slightly different result beginning with the .NET Framework 4.6 for dates earlier than 1800 or later than 2023 (Gregorian).Also, PersianCalendar.MinSupportedDateTime is now March 22, 0622 instead of March 21, 0622.
SugestãoSuggestion Lembre-se de que algumas datas anteriores ou posteriores podem ser um pouco diferentes quando se usa o PersianCalendar no .NET Framework 4.6.Be aware that some early or late dates may be slightly different when using the PersianCalendar in .NET Framework 4.6. Além disso, ao serializar datas entre processos que podem ser executados em diferentes versões do .NET Framework, não armazene-as como cadeias de caracteres de data PersianCalendar (uma vez que esses valores podem ser diferentes).Also, when serializing dates between processes which may run on different .NET Framework versions, do not store them as PersianCalendar date strings (since those values may be different).
EscopoScope SecundárioMinor
VersãoVersion 4.64.6
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Os objetos Reflection não podem mais ser passados de código gerenciado para clientes DCOM fora do processoReflection objects can no longer be passed from managed code to out-of-process DCOM clients

DetalhesDetails Os objetos Reflection não podem mais ser passados de código gerenciado para clientes DCOM fora do processo.Reflection objects can no longer be passed from managed code to out-of-process DCOM clients. Os seguintes tipos são afetados:The following types are affected:Chamadas a IMarshal para o retorno do objeto E_NOINTERFACE.Calls to IMarshal for the object return E_NOINTERFACE.
SugestãoSuggestion Atualize o código de marshaling para trabalhar com objetos de não reflexãoUpdate marshaling code to work with non-reflection objects
EscopoScope SecundárioMinor
VersãoVersion 4.64.6
TipoType Tempo de execuçãoRuntime

Permitir notação de URI relativo especial quando o Unicode estiver presenteSupport special relative URI notation when Unicode is present

DetalhesDetails Urinão gerará mais um NullReferenceException ao chamar TryCreate em determinados URIs relativos que contenham Unicode.Uri will no longer throw a NullReferenceException when calling TryCreate on certain relative URIs containing Unicode. A reprodução mais simples do NullReferenceException está abaixo, com as duas instruções sendo equivalentes:The simplest reproduction of the NullReferenceException is below, with the two statements being equivalent:
bool success = Uri.TryCreate("http:%C3%A8", UriKind.RelativeOrAbsolute, out Uri href);
bool success = Uri.TryCreate("http:è", UriKind.RelativeOrAbsolute, out Uri href);
Para reproduzir a NullReferenceException, os itens a seguir precisam ser verdadeiros:To reproduce the NullReferenceException, the following items must be true:
  • O URI precisa ser especificado como relativo acrescentando 'http:' a ele e não inserindo '//' depois dele.The URI must be specified as relative by prepending it with ‘http:’ and not following it with ‘//’.
  • O URI precisa conter Unicode codificado por porcentagem ou símbolos não reservados.The URI must contain percent-encoded Unicode or unreserved symbols.
SugestãoSuggestion Os usuários que dependem desse comportamento para não permitir URIs relativos precisam especificar UriKind.Absolute durante a criação de um URI.Users depending on this behavior to disallow relative URIs should instead specify UriKind.Absolute when creating a URI.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.7.24.7.2
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

System.Threading.Tasks.Task não gera mais ObjectDisposedException depois que o objeto é descartadoSystem.Threading.Tasks.Task no longer throw ObjectDisposedException after object is disposed

DetalhesDetails Exceto por IAsyncResult.AsyncWaitHandle, os métodos Tasknão geram mais uma exceção ObjectDisposedException após o objeto ser descartado. Essa alteração permite o uso de tarefas em cache.Except for IAsyncResult.AsyncWaitHandle, Task methods no longer throw an ObjectDisposedException exception after the object is disposed.This change supports the use of cached tasks. Por exemplo, um método pode retornar uma tarefa em cache para representar uma operação já concluída em vez de alocar uma nova tarefa.For example, a method can return a cached task to represent an already completed operation instead of allocating a new task. Isso era impossível nas versões anteriores do .NET Framework porque qualquer consumidor da tarefa poderia descartá-los, o que a tornava inutilizável.This was impossible in previous .NET Framework versions, because any consumer of the task could dispose of it, which rendered it unusable.
SugestãoSuggestion Lembre-se de que os métodos Task podem não gerar mais ObjectDisposedException nos casos em que o objeto é descartado.Be aware that Task methods may no longer throw ObjectDisposedException in cases when the object is disposed. Se um aplicativo dependia dessa exceção para saber que uma tarefa foi descartada, ele deverá ser atualizado para verificar explicitamente o status da tarefa usando Status.If an app was depending on this exception to know that a task was disposed, it should be updated to explicitly check the task's status using Status.
EscopoScope SecundárioMinor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime

O escape de System.Uri agora é compatível com RFC 3986System.Uri escaping now supports RFC 3986

DetalhesDetails O escape do URI foi alterado no .NET Framework 4.5 para atender ao RFC 3986.URI escaping has changed in .NET Framework 4.5 to support RFC 3986. As alterações específicas incluem:Specific changes include:
SugestãoSuggestion
  • Atualize os aplicativos para não dependerem da geração de UnescapeDataString(String) no caso de uma sequência de escape inválida.Update applications to not rely on UnescapeDataString(String) to throw in the case of an invalid escape sequence. Essas sequências devem ser detectadas diretamente agora.Such sequences must be detected directly now.
  • Da mesma forma, o URI com escape e sem escape, bem como as cadeias de caracteres de dados, podem variar entre o .NET Framework 4.0 e o .NET Framework 4.5 e não devem ser comparados diretamente entre as versões do .NET.Similarly, expect that Escaped and Unescaped URI and Data strings may vary from .NET Framework 4.0 and .NET Framework 4.5 and should not be compared across .NET versions directly. Em vez disso, eles devem ser analisados e normalizados em uma única versão do .NET antes que qualquer comparação seja feita.Instead, they should be parsed and normalized in a single .NET version before any comparisons are made.
EscopoScope SecundárioMinor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

TargetFrameworkName para o domínio de aplicativo padrão não será mais padronizado como nulo se não for definidoTargetFrameworkName for default app domain no longer defaults to null if not set

DetalhesDetails O TargetFrameworkName era nulo anteriormente no domínio de aplicativo padrão, a menos que fosse explicitamente definido.The TargetFrameworkName was previously null in the default app domain, unless it was explicitly set. A partir da 4.6, a propriedade TargetFrameworkName para o domínio de aplicativo padrão terá um valor padrão derivado do TargetFrameworkAttribute (se um estiver presente).Beginning in 4.6, the TargetFrameworkName property for the default app domain will have a default value derived from the TargetFrameworkAttribute (if one is present). Os domínios de aplicativo não padrão continuarão herdando o respectivo TargetFrameworkName do domínio de aplicativo padrão (que não será padronizado para nulo na 4.6), a menos que sejam explicitamente substituídos.Non-default app domains will continue to inherit their TargetFrameworkName from the default app domain (which will not default to null in 4.6) unless it is explicitly overridden.
SugestãoSuggestion O código deve ser atualizado para não depender do TargetFrameworkName que padroniza para nulo.Code should be updated to not depend on TargetFrameworkName defaulting to null. Se for necessário que essa propriedade continue sendo avaliada como nula, ela poderá ser explicitamente definida para esse valor.If it is required that this property continue to evaluate to null, it can be explicitly set to that value.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.64.6
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Adaptadores de fluxo do WinRT não chamam mais FlushAsync automaticamente ao fecharWinRT stream adapters no long call FlushAsync automatically on close

DetalhesDetails Em aplicativos da Windows Store, os adaptadores de fluxo do Windows Runtime não chamam mais o método de FlushAsync do método Dispose.In Windows Store apps, Windows Runtime stream adapters no longer call the FlushAsync method from the Dispose method.
SugestãoSuggestion Essa alteração deve ser transparente.This change should be transparent. Os desenvolvedores podem restaurar o comportamento anterior gravando um código como este:Developers can restore the previous behavior by writing code like this:
using (var stream = GetWindowsRuntimeStream() as Stream)
{
// do something
await stream.FlushAsync();
}
EscopoScope TransparenteTransparent
VersãoVersion 4.5.14.5.1
TipoType Tempo de execuçãoRuntime

Agora, o X509Certificate2.ToString(Boolean) não é gerado quando o .NET não pode tratar o certificadoX509Certificate2.ToString(Boolean) does not throw now when .NET cannot handle the certificate

DetalhesDetails No .NET Framework 4.5.2 e nas versões anteriores, esse método era gerado quando true era passado para o parâmetro verbose e havia certificados instalados que não eram compatíveis com o .NET Framework.In .NET Framework 4.5.2 and earlier versions, this method would throw if true was passed for the verbose parameter and there were certificates installed that weren't supported by the .NET Framework. Agora, o método será bem-sucedido e retornará uma cadeia de caracteres válida que omita as partes inacessíveis do certificado.Now, the method will succeed and return a valid string that omits the inaccessible portions of the certificate.
SugestãoSuggestion Qualquer código dependente do X509Certificate2.ToString(Boolean) deve ser atualizado para esperar que a cadeia de caracteres retornada possa excluir alguns dados do certificado (como chave pública, chave privada e extensões) em alguns casos nos quais a API teria sido gerada anteriormente.Any code depending on X509Certificate2.ToString(Boolean) should be updated to expect that the returned string may exclude some certificate data (such as public key, private key, and extensions) in some cases in which the API would have previously thrown.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.64.6
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

DadosData

Agora, ADO.NET tentará reconectar automaticamente conexões SQL interrompidasADO.NET now attempts to automatically reconnect broken SQL connections

DetalhesDetails A partir do .NET Framework 4.5.1, o .NET Framework tentará reconectar automaticamente conexões SQL interrompidas.Beginning in the .NET Framework 4.5.1, the .NET Framework will attempt to automatically reconnect broken SQL connections. Embora, normalmente, isso torne os aplicativos mais confiáveis, há casos de borda em que um aplicativo precisa saber que a conexão foi perdida para tomar medidas sobre a reconexão.Although this will typically make apps more reliable, there are edge cases in which an app needs to know that the connection was lost so that it can take some action upon reconnection.
SugestãoSuggestion Se esse recurso for indesejável devido a preocupações de compatibilidade, ele poderá ser desabilitado por meio da configuração da propriedade ConnectRetryCount de uma cadeia de conexão (ou SqlConnectionStringBuilder) para 0.If this feature is undesirable due to compatibility concerns, it can be disabled by setting the ConnectRetryCount property of a connection string (or SqlConnectionStringBuilder) to 0.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.5.14.5.1
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Período de bloqueio do pool de conexões para bancos de dados SQL do Azure removidoConnection pool blocking period for Azure SQL databases is removed

DetalhesDetails A partir do .NET Framework 4.6.2, para solicitações de abertura da conexão com bancos de dados SQL do Azure conhecidos (*.database.windows.net, *.database.chinacloudapi.cn, *.database.usgovcloudapi.net, *.database.cloudapi.de), o período de bloqueio do pool de conexões foi removido e os erros de abertura da conexão não são armazenados em cache.Starting with the .NET Framework 4.6.2, for connection open requests to known Azure SQL databases (*.database.windows.net, *.database.chinacloudapi.cn, *.database.usgovcloudapi.net, *.database.cloudapi.de), the connection pool blocking period is removed, and connection open errors are not cached. As tentativas de repetir as solicitações de abertura de conexão ocorrerão quase que imediatamente após os erros de conexão transitórios.Attempts to retry connection open requests will occur almost immediately after transient connection errors. Essa alteração permite que a tentativa de abertura da conexão seja repetida imediatamente para bancos de dados SQL do Azure, melhorando, assim, o desempenho dos aplicativos habilitados para a nuvem.This change allows the connection open attempt to be retried immediately for Azure SQL databases, thereby improving the performance of cloud- enabled apps. Para todas as outras tentativas de conexão, o período de bloqueio do pool de conexões continuará sendo imposto.For all other connection attempts, the connection pool blocking period continues to be enforced.

No .NET Framework 4.6.1 e nas versões anteriores, quando um aplicativo encontra uma falha de conexão transitória ao conectar-se a um banco de dados, a tentativa de conexão não pode ser repetida rapidamente porque o pool de conexões armazena o erro em cache e gera-o novamente por um tempo que varia de 5 segundos a 1 minuto.In the .NET Framework 4.6.1 and earlier versions, when an app encounters a transient connection failure when connecting to a database, the connection attempt cannot be retried quickly, because the connection pool caches the error and re-throws it for 5 seconds to 1 minute. Para obter mais informações, confira Pooling de conexão do SQL Server (ADO.NET).For more information, see SQL Server Connection Pooling (ADO.NET). Esse comportamento é problemático para conexões com bancos de dados SQL do Azure que, muitas vezes, falham com erros transitórios que normalmente são recuperados em alguns segundos.This behavior is problematic for connections to Azure SQL databases, which often fail with transient errors that are typically recovered from within a few seconds. O recurso de bloqueio do pool de conexões significa que o aplicativo não pode se conectar ao banco de dados por um período extenso, mesmo que o banco de dados esteja disponível e o aplicativo precise ser renderizado em alguns segundos.The connection pool blocking feature means that the app cannot connect to the database for an extensive period, even though the database is available and the app needs to render within a few seconds.

SugestãoSuggestion Se esse comportamento for indesejável, o período de bloqueio do pool de conexões poderá ser configurado definindo a propriedade PoolBlockingPeriod introduzida no .NET Framework 4.6.2.If this behavior is undesirable, the connection pool blocking period can be configured by setting the PoolBlockingPeriod property introduced in the .NET Framework 4.6.2. O valor da propriedade é membro da enumeração PoolBlockingPeriod que pode assumir um dos três valores:The value of the property is a member of the PoolBlockingPeriod enumeration that can take either of three values:É possível restaurar o comportamento anterior definindo a propriedade PoolBlockingPeriod como AlwaysBlock.The previous behavior can be restored by setting the PoolBlockingPeriod property to AlwaysBlock.
EscopoScope SecundárioMinor
VersãoVersion 4.6.24.6.2
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Os dados do Sql_variant usam a ordenação sql_variant em vez da ordenação de banco de dadosSql_variant data uses sql_variant collation rather than database collation

DetalhesDetails Os dados do sql_variant usam a ordenação sql_variant em vez da ordenação de banco de dados.sql_variant data uses sql_variant collation rather than database collation.
SugestãoSuggestion Essa alteração aborda os possíveis dados corrompidos caso a ordenação do banco de dados seja diferente da ordenação sql_variant.This change addresses possible data corruption if the database collation differs from the sql_variant collation. Os aplicativos que dependem de dados corrompidos podem apresentar falhas.Applications that rely on the corrupted data may experience failure.
EscopoScope TransparenteTransparent
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime

SqlBulkCopy usa a codificação de coluna de destino para cadeias de caracteresSqlBulkCopy uses destination column encoding for strings

DetalhesDetails Quando dados são inseridos em uma coluna, o SqlBulkCopy usa a codificação da coluna de destino em vez da codificação padrão para os tipos VARCHAR e CHAR.When inserting data into a column, SqlBulkCopy uses the encoding of the destination column rather than the default encoding for VARCHAR and CHAR types. Essa alteração elimina a possibilidade de corrompimento de dados causada pelo uso da codificação padrão quando a coluna de destino não usa a codificação padrão.This change eliminates the possibility of data corruption caused by using the default encoding when the destination column does not use the default encoding. Em casos raros, um aplicativo existente pode gerar uma exceção SqlException quando a mudança na codificação produz dados que são grandes demais para caber na coluna de destino.In rare cases, an existing application may throw a SqlException exception if the change in encoding produces data that is too big to fit into the destination column.
SugestãoSuggestion Espere que SqlBulkCopy não corrompa os dados devido a diferenças de codificação.Expect that SqlBulkCopy will no longer corrupt data due to encoding differences. Se as cadeias de caracteres perto do limite de tamanho da coluna de destino estiverem sendo copiadas, talvez seja necessário codificar previamente os dados (a serem copiados para verificar se os dados serão ajustados na coluna de destino) ou capturar SqlExceptions.If strings near the destination column's size limit are being copied, it may be necessary to either pre-encode data (to be copied to check that the data will fit in the destination column) or catch SqlExceptions.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

SqlConnection não pode mais se conectar ao SQL Server 1997 ou a bancos de dados usando o adaptador VIASqlConnection can no longer connect to SQL Server 1997 or databases using the VIA adapter

DetalhesDetails Conexões a bancos de dados do SQL Server usando o Protocolo VIA (Virtual Interface Adapter) não têm mais suporte.Connections to SQL Server databases using the Virtual Interface Adapter (VIA) protocol are no longer supported. O protocolo usado para se conectar a um banco de dados do SQL Server fica visível na cadeia de conexão.The protocol used to connect to a SQL Server database is visible in the connection string. Uma conexão VIA conterá via:<nomedoservidor>.A VIA connection will contain via:<servername>. Se o aplicativo estiver se conectando ao SQL usando um protocolo diferente do VIA (tcp: ou np:, por exemplo), nenhuma alteração da falha será encontrada. Além disso, não há suporte para conexões com o SQL Server 7 (1997).If this app is connecting to SQL via a protocol other than VIA (tcp: or np: for example), then no breaking change will be encountered.Also, connections to SQL Server 7 (1997) are no longer supported.
SugestãoSuggestion O protocolo VIA foi preterido, de modo que um protocolo alternativo deve ser usado para se conectar a bancos de dados SQL.The VIA protocol is deprecated, so an alternative protocol should be used to connect to SQL databases. O protocolo mais usado é o TCP/IP.The most common protocol used is TCP/IP. Para obter mais informações sobre como se conectar por meio de TCP/IP, confira Habilitar o protocolo TCP/IP para uma instância de banco de dados.For more information about connecting through TCP/IP, see Enable the TCP/IP protocol for a database instance. Se o banco de dados for acessado somente de dentro de uma intranet, o protocolo de pipes compartilhado poderá fornecer um melhor desempenho se a rede estiver lenta.If the database is only accessed from within an intranet, the shared pipes protocol may provide better performance if the network is slow.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Entity FrameworkEntity Framework

Mudança de comportamento nas APIs DDL (Linguagem de Definição de Dados)Change in behavior in Data Definition Language (DDL) APIs

DetalhesDetails O comportamento dos APIs DDL quando AttachDBFilename é especificado foi alterado da seguinte forma:The behavior of DDL APIs when AttachDBFilename is specified has changed as follows:
  • As cadeias de conexão não precisam especificar um valor de Catálogo Inicial.Connection strings need not specify an Initial Catalog value. Anteriormente, AttachDBFilename e Catálogo Inicial eram obrigatórios.Previously, both AttachDBFilename and Initial Catalog were required.
  • Se AttachDBFilename e Catálogo Inicial forem especificados e o arquivo MDF especificado existir, o método DatabaseExists retornará true.If both AttachDBFilename and Initial Catalog are specified and the given MDF file exists, the DatabaseExists method returns true. Anteriormente, o valor retornado era false.Previously, it returned false.
  • Se AttachDBFilename e Catálogo Inicial forem especificados e o arquivo MDF especificado existir, chamar o método DeleteDatabase excluirá o arquivo.If both AttachDBFilename and Initial Catalog are specified and the given MDF file exists, calling the DeleteDatabase method deletes the files.
  • Se DeleteDatabase for chamado quando a cadeia de conexão especificar um valor de AttachDBFilename com um MDF e um Catálogo Inicial que não existam, o método gerará uma exceção InvalidOperationException.If DeleteDatabase is called when the connection string specifies an AttachDBFilename value with an MDF that doesn't exist and an Initial Catalog that doesn't exist, the method throws an InvalidOperationException exception. Anteriormente, ele gerava uma exceção SqlException.Previously, it threw a SqlException exception.
SugestãoSuggestion Essas alterações facilitam a criação de ferramentas e aplicativos que usam APIs de DDL.These changes make it easier to build tools and applications that use the DDL APIs. Essas alterações podem afetar a compatibilidade do aplicativo nas seguintes situações:These changes can affect application compatibility in the following scenarios:
  • O usuário escreve um código que executará um comando DROP DATABASE diretamente em vez de chamar DeleteDatabase se DatabaseExists retornar true.The user writes code that executes a DROP DATABASE command directly instead of calling DeleteDatabase if DatabaseExists returns true. Isso quebrará o código existente se o banco de dados não estiver anexado, mas um arquivo MDF existir.This breaks existing code If the database is not attached but the MDF file exists.
  • O usuário escreve um código que espera o método DeleteDatabase para gerar uma SqlException em vez de uma InvalidOperationException quando os arquivos de Catálogo Inicial e de MDF não existes.The user writes code that expects the DeleteDatabase method to throw a SqlException rather than an InvalidOperationException when the Initial Catalog and MDF file don't exist.
EscopoScope SecundárioMinor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime

Tratamento de exceção diferente para os métodos ObjectContext.CreateDatabase e DbProviderServices.CreateDatabaseDifferent exception handling for ObjectContext.CreateDatabase and DbProviderServices.CreateDatabase methods

DetalhesDetails Começando com o .NET Framework 4.5, se houver falha na criação do banco de dados, os métodos CreateDatabase tentarão remover o banco de dados vazio.Beginning in .NET Framework 4.5, if database creation fails, CreateDatabase methods will attempt to drop the empty database. Se essa operação for bem-sucedida, a SqlException original será propagada (em vez da InvalidOperationException que sempre era gerada no .NET Framework 4.0)If that operation succeeds, the original SqlException will be propagated (instead of the InvalidOperationException that was always thrown in .NET Framework 4.0)
SugestãoSuggestion Ao capturar um InvalidOperationException durante a execução de CreateDatabase() ou CreateDatabase(DbConnection, Nullable<Int32>, StoreItemCollection), agora, SQLExceptions também devem ser capturadas.When catching an InvalidOperationException while executing CreateDatabase() or CreateDatabase(DbConnection, Nullable<Int32>, StoreItemCollection), SQLExceptions should now also be caught.
EscopoScope SecundárioMinor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

EF não gera mais para QueryViews com características específicasEF no longer throws for QueryViews with specific characteristics

DetalhesDetails O Entity Framework já não gera uma exceção StackOverflowException quando um aplicativo executa uma consulta que envolve QueryView com uma propriedade de navegação de 0..1 que tenta incluir as entidades relacionadas como parte da consulta.Entity Framework no longer throws a StackOverflowException exception when an app executes a query that involves a QueryView with a 0..1 navigation property that attempts to include the related entities as part of the query. Por exemplo, chamando .Include(e => e.RelatedNavProp).For example, by calling .Include(e => e.RelatedNavProp).
SugestãoSuggestion Essa alteração afeta apenas o código que usa relacionamentos de QueryViews com 1-0..1 ao executar consultas que chamam .Include.This change only affects code that uses QueryViews with 1-0..1 relationships when running queries that call .Include. Isso melhora a confiabilidade e deve ser transparente para quase todos os aplicativos.It improves reliability and should be transparent to almost all apps. No entanto, se causa um comportamento inesperado, é possível desabilitá-lo adicionando a seguinte entrada à seção <appSettings> do arquivo de configuração do aplicativo:However, if it causes unexpected behavior, you can disable it by adding the following entry to the <appSettings> section of the app's configuration file:
<add key="EntityFramework_SimplifyUserSpecifiedViews" value="false" />
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.5.24.5.2
TipoType Tempo de execuçãoRuntime

O EntityFramework 6.0 carrega muito lentamente em aplicativos inicializados pelo Visual StudioEntityFramework 6.0 loads very slowly in apps launched from Visual Studio

DetalhesDetails A inicialização de um aplicativo no Visual Studio 2013 que usa o EntityFramework 6.0 pode ser muito lenta.Launching an app from Visual Studio 2013 that uses EntityFramework 6.0 can be very slow.
SugestãoSuggestion Esse problema foi corrigido no EntityFramework 6.0.2.This issue is fixed in EntityFramework 6.0.2. Atualize o EntityFramework para evitar o problema de desempenho.Update EntityFramework to avoid the performance issue.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime

O nome do arquivo de log criado pelo método ObjectContext.CreateDatabase foi alterado para corresponder às especificações do SQL ServerLog file name created by the ObjectContext.CreateDatabase method has changed to match SQL Server specifications

DetalhesDetails Quando o método CreateDatabase() é chamado diretamente ou usando Code First com o provedor SqlClient e um valor AttachDBFilename na cadeia de conexão, ele cria um arquivo de log chamado filename_log.ldf em vez de filename.ldf (onde filename é o nome do arquivo especificado pelo valor AttachDBFilename).When the CreateDatabase() method is called either directly or by using Code First with the SqlClient provider and an AttachDBFilename value in the connection string, it creates a log file named filename_log.ldf instead of filename.ldf (where filename is the name of the file specified by the AttachDBFilename value). Essa alteração melhora a depuração ao fornecer um arquivo de log chamado de acordo com especificações do SQL Server.This change improves debugging by providing a log file named according to SQL Server specifications.
SugestãoSuggestion Se o nome do arquivo de log for importante para um aplicativo, o aplicativo deverá ser atualizado para esperar o formato de nome de arquivo _log.ldf padrão.If the log file name is important for an app, the app should be updated to expect the standard _log.ldf file name format.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

ObjectContext.Translate e ObjectContext.ExecuteStoreQuery agora dão suporte ao tipo de enumeraçãoObjectContext.Translate and ObjectContext.ExecuteStoreQuery now support enum type

DetalhesDetails No .NET Framework 4.0, o parâmetro genérico T dos métodos ObjectContext.Translate e ObjectContext.ExecuteStoreQuery não pode ser uma enumeração.In .NET Framework 4.0, the generic parameter T of ObjectContext.Translate and ObjectContext.ExecuteStoreQuery methods could not be an enum. Agora há suporte para esse cenário.That scenario is now supported.
SugestãoSuggestion Quando Translate ou ExecuteStoreQuery era chamado em um tipo de enumeração no .NET Framework 4.0, '0' era retornado.If Translate or ExecuteStoreQuery was called on an enum type in .NET Framework 4.0, '0' was returned. Se esse comportamento fosse desejável, as chamadas deveriam ser substituídas por uma constante 0 (ou o equivalente de enumeração dele).If that behavior was desirable, the calls should be replaced with a constant 0 (or the enum equivalent of it).
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Interrupção de aceitação será revertida de geração de SQL 4.5 diferente para geração de SQL 4.0 mais simplesOpt-in break to revert from different 4.5 SQL generation to simpler 4.0 SQL generation

DetalhesDetails As consultas que produzem instruções JOIN e contêm uma chamada para uma operação de limitação sem usar primeiro o OrderBy agora produzem um SQL mais simples.Queries that produce JOIN statements and contain a call to a limiting operation without first using OrderBy now produce simpler SQL. Após a atualização para o .NET Framework 4.5, essas consultas produziram SQLs mais complicados do que as versões anteriores.After upgrading to .NET Framework 4.5, these queries produced more complicated SQL than previous versions.
SugestãoSuggestion Esse recurso está desabilitado por padrão.This feature is disabled by default. Se Entity Framework gera instruções JOIN adicionais que causam a degradação do desempenho, pode-se habilitar esse recurso adicionando a seguinte entrada à seção <appSettings> do arquivo (app.config) de configuração da aplicação:If Entity Framework generates extra JOIN statements that cause performance degradation, you can enable this feature by adding the following entry to the <appSettings> section of the application configuration (app.config) file:
<add key="EntityFramework_SimplifyLimitOperations" value="true" />
EscopoScope TransparenteTransparent
VersãoVersion 4.5.24.5.2
TipoType Tempo de execuçãoRuntime

GlobalizaçãoGlobalization

Categorias do padrão Unicode versão 8.0 agora são compatíveisUnicode standard version 8.0 categories now supported

DetalhesDetails No .NET Framework 4.6.2, os dados Unicode foram atualizados do Unicode Standard versão 6.3 para a versão 8.0.In .NET Framework 4.6.2, Unicode data has been upgraded from Unicode Standard version 6.3 to version 8.0. Ao solicitar a categorias de caracteres Unicode no .NET Framework 4.6.2, alguns resultados poderão não corresponder aos resultados nas versões anteriores do .NET Framework.When requesting Unicode character categories in .NET Framework 4.6.2, some results might not match the results in previous .NET Framework versions. Essa alteração afeta principalmente as sílabas Cheroqui, bem como os símbolos vocálicos e as marcas de tom Tai Lue Novo.This change mostly affects Cherokee syllables and New Tai Lue vowels signs and tone marks.
SugestãoSuggestion Examine o código e remova ou altere a lógica que depende de categorias de caractere Unicode embutido em código.Review code and remove/change logic that depends on hard-coded Unicode character categories.
EscopoScope SecundárioMinor
VersãoVersion 4.6.24.6.2
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

LINQLINQ

Enumerable.Empty<TResult> sempre retorna instância em cacheEnumerable.Empty<TResult> always returns cached instance

DetalhesDetails Começando com o .NET Framework 4.5, Empty<TResult>() sempre retorna um IEnumerable<T> de instância interna em cache. Anteriormente, o Empty<TResult>() armazenava em cache um IEnumerable<T> vazio no momento em que a API era chamada, significando que, em algumas condições nas quais Empty<TResult>() era chamado de forma rápida e simultânea, diferentes instâncias do tipo poderiam ser retornadas para diferentes chamadas à API.Beginning in .NET Framework 4.5, Empty<TResult>() always returns a cached internal instance IEnumerable<T>.Previously, Empty<TResult>() would cache an empty IEnumerable<T> at the time the API was called, meaning that in some conditions in which Empty<TResult>() was called rapidly and concurrently, different instances of the type could be returned for different calls to the API.
SugestãoSuggestion Como o comportamento anterior não era determinístico, é improvável que o código dependesse dele.Because the previous behavior was non-deterministic, code is unlikely to depend on it. No entanto, na improbabilidade de que enumeráveis vazios estivessem sendo comparados e, às vezes, esperados que fosse diferentes, matrizes vazias explícitas deviam ser criadas (new T[0]) em vez de usar Empty<TResult>().However, in the unlikely case that empty enumerables are being compared and expected to sometimes be unequal, explicit empty arrays should be created (new T[0]) instead of using Empty<TResult>().
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

MEF (Managed Extensibility Framework)Managed Extensibility Framework (MEF)

Os catálogos do MEF implementam IEnumerable e, portanto, não podem mais ser usados para criar um serializadorMEF catalogs implement IEnumerable and therefore can no longer be used to create a serializer

DetalhesDetails A partir do .NET Framework 4.5, os catálogos do MEF implementam IEnumerable e, portanto, não podem mais ser usados para criar um serializador (objeto XmlSerializer).Starting with the .NET Framework 4.5, MEF catalogs implement IEnumerable and therefore can no longer be used to create a serializer (XmlSerializer object). Tentar serializar um catálogo de MEF gera uma exceção.Trying to serialize a MEF catalog throws an exception.
SugestãoSuggestion Não é mais possível usar o MEF para criar um serializadorCan no longer use MEF to create a serializer
EscopoScope PrincipalMajor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime

RedeNetworking

ContentDisposition DateTimes retorna cadeia de caracteres ligeiramente diferenteContentDisposition DateTimes returns slightly different string

DetalhesDetails As representações de cadeia de caracteres de ContentDisposition foram atualizadas, a partir da versão 4.6, para sempre representarem o componente de hora de um DateTime com dois dígitos.String representations of ContentDisposition's have been updated, beginning in 4.6, to always represent the hour component of a DateTime with two digits. Isso está em conformidade com a RFC822 e RFC2822.This is to comply with RFC822 and RFC2822. Isso faz com que ToString() retorne uma cadeia de caracteres ligeiramente diferente na versão 4.6 em cenários em que um dos elementos de tempo da disposição era anterior a 10:00 AM.This causes ToString() to return a slightly different string in 4.6 in scenarios where one of the disposition's time elements was before 10:00 AM. Observe que ContentDispositions, às vezes, são serializados por meio de conversão em cadeias de caracteres, de modo que quaisquer operações ToString(), serialização ou chamadas GetHashCode devem ser revisadas.Note that ContentDispositions are sometimes serialized via converting them to strings, so any ToString() operations, serialization, or GetHashCode calls should be reviewed.
SugestãoSuggestion Não espere que essas representações de cadeia de caracteres de ContentDispositions de diferentes versões do .NET Framework sejam corretamente comparadas umas com as outras.Do not expect that string representations of ContentDispositions from different .NET Framework versions will correctly compare to one another. Converta as cadeias de caracteres de volta em ContentDispositions, se possível, antes de realizar uma comparação.Convert the strings back to ContentDispositions, if possible, before conducting a comparison.
EscopoScope SecundárioMinor
VersãoVersion 4.64.6
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Desserialização de objetos MailMessage serializados no .NET Framework 4.5 pode falharDeserialization of MailMessage objects serialized under the .NET Framework 4.5 may fail

DetalhesDetails A partir do .NET Framework 4.5, os objetos MailMessage podem incluir caracteres não ASCII.Starting with the .NET Framework 4.5, MailMessage objects can include non-ASCII characters. No .NET Framework 4, somente caracteres ASCII têm suporte.In the .NET Framework 4, only ASCII characters are supported. Os objetos MailMessage que contêm caracteres não ASCII e são serializados no .NET Framework 4.5 ou versões posteriores não podem ser desserializados no .NET Framework 4.MailMessage objects that contain non-ASCII characters and that are serialized under the .NET Framework 4.5 or later cannot be deserialized under the .NET Framework 4.
SugestãoSuggestion Verifique se o seu código fornece tratamento de exceção ao desserializar um objeto MailMessage.Ensure that your code provides exception handling when deserializing a MailMessage object.
EscopoScope SecundárioMinor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

System.Net.PeerToPeer.Collaboration não disponível no Windows 8System.Net.PeerToPeer.Collaboration unavailable on Windows 8

DetalhesDetails O namespace System.Net.PeerToPeer.Collaboration não está disponível no Windows 8 ou superior.The System.Net.PeerToPeer.Collaboration namespace is unavailable on Windows 8 or above.
SugestãoSuggestion Os aplicativos que dão suporte ao Windows 8 ou superior devem ser atualizados para não dependerem desse namespace ou de seus membros.Apps that support Windows 8 or above must be updated to not depend on this namespace or its members.
EscopoScope PrincipalMajor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

ImprimindoPrinting

Dados gravados em PrintSystemJobInfo.JobStream devem estar no formato XPSData written to PrintSystemJobInfo.JobStream must be in XPS format

DetalhesDetails A propriedade JobStream expõe o fluxo de um trabalho de impressão.The JobStream property exposes the stream of a print job. O usuário pode enviar dados brutos para o sistema operacional subjacente que imprime os componentes gravando-os neste fluxo. A partir do .NET Framework 4.5 no Windows 8 e em versões posteriores do sistema operacional Windows, os dados gravados nesse fluxo devem estar no formato XPS como um fluxo de pacote.The user can send raw data to the underlying operating system printing components by writing to this stream.Starting with the .NET Framework 4.5 on Windows 8 and later versions of the Windows operating system, data written to this stream must be in XPS format as a package stream.
SugestãoSuggestion Para mostrar o conteúdo impresso, você tem duas opções:To output print content, you can do either of the following:
  • Use a classe XpsDocumentWriter para produzir conteúdo de impressão.Use the XpsDocumentWriter class to output print content. Essa é a alternativa recomendada.This is the recommended alternative.
  • Garanta que os dados enviados ao fluxo retornado pela propriedade JobStream estão no formato XPS como um fluxo de pacote.Ensure that the data sent to the stream returned by the JobStream property is in XPS format as a package stream.
EscopoScope SecundárioMinor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Tempo de execuçãoRuntime

Melhor validação do certificado de confiança de cadeia do WCF para autenticação de certificado do Net.TcpImproved WCF chain trust certificate validation for Net.Tcp certificate authentication

DetalhesDetails O .NET framework 4.7.2 melhorou a validação do certificado de confiança de cadeia ao usar a autenticação de certificado com a segurança de transporte com o WCF..NET Framework 4.7.2 improves chain trust certificate validation when using certificate authentication with transport security with WCF. Com essa melhoria, os certificados do cliente que são usados para autenticar um servidor precisam ser configurados para autenticação do cliente.With this improvement, client certificates that are used to authenticate to a server must be configured for client authentication. Da mesma forma, os certificados do servidor usados para autenticar um servidor precisam ser configurados para autenticação do servidor.Similarly server certificates that are for the authenticating a server must be configured for server authentication. Com essa alteração, se o certificado raiz for desabilitado, a validação da cadeia de certificados falhará.With this change, if the root certificate is disabled, the certificate chain validation fails. A mesma alteração também foi feita para o .NET Framework 3.5 e as versões posteriores por meio do pacote cumulativo de segurança do Windows.The same change was also made to .NET Framework 3.5 and later versions via Windows security roll-up. Encontre mais informações aqui. Essa alteração é habilitada por padrão e pode ser desabilitada por uma definição de configuração.You can find more information here.This change is on by default and can be turned off by a configuration setting.
SugestãoSuggestion
  • Valide se a certificação do servidor e do cliente têm o OID de EKU necessário.Validate if your server and client certification has the required EKU OID. Caso contrário, atualize a certificação.If not, update your certification.
  • Valide se o certificado raiz é inválido.Validate if your root certificate is invalid. Nesse caso, atualize o certificado raiz.If so, update the root certificate.
  • Como recusar a alteração: Caso não possa atualizar o certificado, solucione temporariamente a alteração da falha com as definições de configuração a seguir. No entanto, se você recusar a alteração, isso deixará seu sistema vulnerável ao problema de segurança.How to opt out of the change: If you can't update the certificate, you can work around the breaking change temporarily with the following configration setting, However, opting out of the change will leave your system vulnerable to the security issue.
<appSettings>
<add key="wcf:useLegacyCertificateUsagePolicy" value="true" />
</appSettings>
EscopoScope SecundárioMinor
VersãoVersion 4.7.24.7.2
TipoType Tempo de execuçãoRuntime

SegurançaSecurity

RSACng.VerifyHash agora retorna False para qualquer falha de verificaçãoRSACng.VerifyHash now returns False for any verification failure

DetalhesDetails A partir do .NET Framework 4.6.2, esse método retornará False se a assinatura em si estiver incorretamente formatada.Starting with the .NET Framework 4.6.2, this method returns False if the signature itself is badly formatted. Agora, ele retornará false para qualquer falha de verificação. No .NET Framework 4.6 e 4.6.1, o método gera CryptographicException se a assinatura em si está incorretamente formatada.It now returns false for any verification failure.In the .NET Framework 4.6 and 4.6.1, the method throws a CryptographicException if the signature itself is badly formatted.
SugestãoSuggestion Qualquer código cuja execução dependa da identificação de CryptographicException deverá ser executado se a validação falhar e o método retornar False.Any code whose execution depends on handling the CryptographicException should instead execute if validation fails and the method returns False.
EscopoScope SecundárioMinor
VersionVersion 4.6.24.6.2
DigiteType RuntimeRuntime
APIs afetadasAffected APIs

Alterações de falha de SignedXml e EncryptedXmlSignedXml and EncryptedXml Breaking Changes

DetalhesDetails No .NET Framework 4.6.2, correções de segurança em SignedXml e EncryptedXml levam a comportamentos de tempo de execução diferentes.In .NET Framework 4.6.2, Security fixes in SignedXml and EncryptedXml lead to different run-time behaviors. Por exemplo,For example,
  • Se um documento tiver vários elementos com o mesmo atributo id e uma assinatura tiver como destino um desses elementos como a raiz da assinatura, o documento agora será considerado inválido.If a document has multiple elements with the same id attribute and a signature targets one of those elements as the root of the signature, the document will now be considered invalid.
  • Documentos que usam algoritmos de transformação XPath não canônicos nas referências agora são considerados inválidos.Documents using non-canonical XPath transform algorithms in references are now considered invalid.
  • Documentos que usam algoritmos de transformação XSLT não canônicos nas referências agora são considerados inválidos.Documents using non-canonical XSLT transform algorithms in references are now consider invalid.
  • Nenhum programa que usar assinaturas desanexadas de recursos externos poderá fazer isso.Any program making use of external resource detached signatures will be unable to do so.
SugestãoSuggestion Talvez os desenvolvedores queiram revisar o uso de XmlDsigXsltTransform e XmlDsigXsltTransform, bem como dos tipos derivados de Transform, uma vez que o receptor de um documento poderá não conseguir processá-lo.Developers might want to review the usage of XmlDsigXsltTransform and XmlDsigXsltTransform, as well as types derived from Transform since a document receiver may not be able to process it.
EscopoScope SecundárioMinor
VersãoVersion 4.6.24.6.2
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

SerializaçãoSerialization

BinaryFormatter pode não conseguir localizar o tipo do contexto LoadFromBinaryFormatter can fail to find type from LoadFrom context

DetalhesDetails A partir do .NET Framework 4.5, várias alterações de XmlSerializer podem causar diferenças na desserialização ao usar BinaryFormatter para desserializar tipos que foram carregados no contexto LoadFrom.As of .NET Framework 4.5, a number of XmlSerializer changes may cause differences in deserialization when using BinaryFormatter to deserialize types that had been loaded in the LoadFrom context. Essas alterações se devem a novas maneiras como XmlSerializer agora carrega um tipo, o que causa um comportamento diferente quando um BinaryFormatter tenta desserializar esse tipo posteriormente.These changes are due to the new ways XmlSerializer now loads a type which causes different behavior when a BinaryFormatter attempts to deserialize to that type later on. O associador de serialização padrão não pesquisa automaticamente o contexto LoadFrom, embora isso possa ter funcionado em algumas circunstâncias com base no comportamento antigo do XmlSerializer.The default serialization binder does not automatically search the LoadFrom context, although it may have worked in some circumstances based on the old behavior of XmlSerializer. Devido às alterações, quando um tipo está sendo carregado de um assembly carregado em um contexto diferente, um FileNotFoundException pode ser acionado.Due to the changes, when a type is being loaded from an assembly loaded in a different context, a FileNotFoundException may be thrown.
SugestãoSuggestion Se essa exceção for observada, a propriedade Binder do BinaryFormatter poderá ser definida como um associador personalizado que encontrará o tipo correto.If this exception is seen, the Binder property of the BinaryFormatter can be set to a custom binder that will find the correct type.
var formatter = new BinaryFormatter { Binder = new TypeFinderBinder() }
E, em seguida, o associador personalizado:And then the custom binder:
public class TypeFinderBinder : SerializationBinder
{
private static readonly string s_assemblyName = Assembly.GetExecutingAssembly().FullName;

public override Type BindToType(string assemblyName, string typeName)
{
return Type.GetType(String.Format(CultureInfo.InvariantCulture, "{0}, {1}", typeName, s_assemblyName));
}
}
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

A mensagem de exceção foi alterada para a falha na serialização DataContract no caso de um tipo desconhecidoException message has changed for failed DataContract serialization in case of an unknown type

DetalhesDetails A partir do .NET Framework 4.6, a mensagem de exceção gerada se a serialização ou desserialização de DataContractSerializer ou DataContractJsonSerializer falhar por causa de "tipos conhecidos" ausentes foi esclarecida.Beginning in the .NET Framework 4.6, the exception message given if a DataContractSerializer or DataContractJsonSerializer fails to serialize or deserialize due to missing 'known types' has been clarified.
SugestãoSuggestion Os aplicativos não devem depender de mensagens de exceção específicas.Apps should not depend on specific exception messages. Se um aplicativo depender dessa mensagem, atualize-o para que ele espere a nova mensagem ou, preferencialmente, altere-o para depender somente do tipo de exceção.If an app depends on this message, either update it to expect the new message or (preferably) change it to depend only on the exception type.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.64.6
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

NetDataContractSerializer falha ao desserializar um ConcurrentDictionary serializado com uma versão diferente do .NETNetDataContractSerializer fails to deserialize a ConcurrentDictionary serialized with a different .NET version

DetalhesDetails Por design, o NetDataContractSerializer poderá ser usado somente se as extremidades de serialização e desserialização compartilharem os mesmos tipos CLR.By design, the NetDataContractSerializer can be used only if both the serializing and deserializing ends share the same CLR types. Portanto, não há garantia de que um objeto serializado com uma versão do .NET Framework poderá ser desserializado com uma versão diferente.ConcurrentDictionary<TKey,TValue>Therefore, it is not guaranteed that an object serialized with one version of the .NET Framework can be deserialized by a different version.ConcurrentDictionary<TKey,TValue> é um tipo que não será desserializado corretamente se for serializado com o .NET Framework 4.5 ou anterior e for desserializado com o .NET Framework 4.5.1 ou posterior.is a type that is known to not to deserialize correctly if serialized with the .NET Framework 4.5 or earlier and deserialized with the .NET Framework 4.5.1 or later.
SugestãoSuggestion Há uma série de possíveis soluções alternativas para esse problema:There are a number of possible work-arounds for this issue:
EscopoScope SecundárioMinor
VersãoVersion 4.5.14.5.1
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

SoapFormatter não pode desserializar Hashtable e objetos de coleção ordenados semelhantesSoapFormatter cannot deserialize Hashtable and similar ordered collection objects

DetalhesDetails O SoapFormatter não garante que objetos serializados em uma versão do .NET Framework serão desserializados com êxito em uma versão diferente.The SoapFormatter does not guarantee that objects serialized under one .NET Framework version will successfully deserialize under a different version. Especificamente, algumas coleções ordenadas (como Hashtable) tiveram membros adicionados entre a 4.0 e a 4.5, portanto, os objetos desses tipos não poderão ser desserializados com o .NET Framework 4.0 se tiverem sido serializados com o .NET Framework 4.5.Specifically, some ordered collections (like Hashtable) added members between 4.0 and 4.5 such that objects of these types cannot deserialize with .NET Framework 4.0 if they were serialized with .NET Framework 4.5. Observe que se os dados serializados forem serializados e desserializados com a mesma versão do .NET Framework, nenhum problema ocorrerá.Note that if the serialized data is both serialized and deserialized with the same .NET Framework version, no issue will occur.
SugestãoSuggestion A serialização SoapFormatter deve ser substituída pela serialização BinaryFormatter ou NetDataContractSerializer para resistir às alterações do .NET Framework.SoapFormatter serialization should be replaced with BinaryFormatter serialization or NetDataContractSerializer to be resilient to .NET Framework changes.
EscopoScope SecundárioMinor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

XmlSerializer falha durante a serialização de um tipo que oculta um membro acessível com um inacessívelXmlSerializer fails while serializing a type that hides an accessible member with an inaccessible one

DetalhesDetails Ao serializar um tipo derivado, o XmlSerializer pode falhar se o tipo contiver um campo ou propriedade inacessível que oculta (por meio da palavra-chave "new") um campo ou propriedade do mesmo nome que estava acessível anteriormente (público, por exemplo) no tipo base.When serializing a derived type, the XmlSerializer can fail if the type contains an inaccessible field or property that hides (via the 'new' keyword) a field or property of the same name that was previously accessible (public, for example) on the base type.
SugestãoSuggestion Esse problema pode ser resolvido tornando o novo membro oculto acessível para o XmlSerializer (marcando-o como público, por exemplo). Como alternativa, a seguinte configuração será revertida para o comportamento XmlSerializer no 4.0, o que corrigirá o problema:This problem can be solved by making the new, hiding member accessible to the XmlSerializer (by marking it public, for example).Alternatively, the following config setting will revert to 4.0 XmlSerializer behavior, which will fix the problem:
<system.xml.serialization>
<xmlSerializer useLegacySerializerGeneration="true" />
</system.xml.serialization>
EscopoScope SecundárioMinor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Instalação e ImplantaçãoSetup and Deployment

Alterações de controle de versão de produto no .NET Framework 4.6 e versões posterioresProduct versioning changes in the .NET Framework 4.6 and later versions

DetalhesDetails O controle de versão do produto foi alterado nas versões anteriores do .NET Framework, especialmente do .NET Framework 4, 4.5, 4.5.1 e 4.5.2.Product versioning has changed from the previous releases of the .NET Framework, and particularly from the .NET Framework 4, 4.5, 4.5.1, and 4.5.2. Veja a seguir as alterações em detalhes:The following are the detailed changes:
  • O valor da entrada Version na chave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full foi alterado para 4.6.xxxxx para o .NET Framework 4.6 e suas versões pontuais, e para 4.7.xxxxx para o .NET Framework 4.7 e 4.7.1.The value of the Version entry in the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full key has changed to 4.6.xxxxx for the .NET Framework 4.6 and its point releases, and to 4.7.xxxxx for the .NET Framework 4.7 and 4.7.1. No .NET Framework 4.5, 4.5.1 e 4.5.2, ele tinha o formato 4.5.xxxxx.In the .NET Framework 4.5, 4.5.1, and 4.5.2, it had the format 4.5.xxxxx.
  • O controle de versão de arquivo e produto para arquivos do .NET Framework foi alterado do esquema de controle de versão anterior de 4.0.30319.x para 4.6.X.0 para o .NET Framework 4.6 e suas versões pontuais, e para 4.7.X.0 para o .NET Framework 4.7 e 4.7.1.The file and product versioning for .NET Framework files has changed from the earlier versioning scheme of 4.0.30319.x to 4.6.X.0 for the .NET Framework 4.6 and its point releases, and to 4.7.X.0 for the .NET Framework 4.7 and 4.7.1. Você pode ver esses novos valores quando exibe as Propriedades do arquivo depois de clicar com o botão direito do mouse em um arquivo.You can see these new values when you view the file's Properties after right-clicking on a file.
  • Os atributos AssemblyFileVersionAttribute e AssemblyInformationalVersionAttribute para assemblies gerenciados têm valores de Versão no formato 4.6.X.0 para o .NET Framework 4.6 e suas versões pontuais, e 4.7.X.0 para o .NET Framework 4.7 e 4.7.1.The AssemblyFileVersionAttribute and AssemblyInformationalVersionAttribute attributes for managed assemblies have Version values in the form 4.6.X.0 for the .NET Framework 4.6 and its point releases, and 4.7.X.0 for the .NET Framework 4.7 and 4.7.1.
  • No .NET Framework 4.6, 4.6.1, 4.6.2, 4.7 e 4.7.1, a propriedade Environment.Version retorna a cadeia de caracteres de versão fixa 4.0.30319.42000.In the .NET Framework 4.6, 4.6.1, 4.6.2, 4.7, and 4.7.1, the Environment.Version property returns the fixed version string 4.0.30319.42000. No .NET Framework 4, 4.5, 4.5.1 e 4.5.2, ela retorna as cadeias de caracteres de versão no formato 4.0.30319.xxxxx (por exemplo, "4.0.30319.18010").In the .NET Framework 4, 4.5, 4.5.1, and 4.5.2, it returns version strings in the format 4.0.30319.xxxxx (for example, "4.0.30319.18010"). Não é recomendável criar nova dependência de código de aplicativo na propriedade Environment.Version.Note that we do not recommend application code taking any new dependency on the Environment.Version property.
Para obter mais informações, confira Como: Determinar quais versões do .NET Framework estão instaladas.For more information, see How to: Determine which .NET Framework Versions Are Installed.
SugestãoSuggestion Em geral, os aplicativos devem depender das técnicas recomendadas para detecção de itens como a versão de tempo de execução do .NET Framework e o diretório de instalação:In general, applications should depend on the recommended techniques for detecting such things as the runtime version of the .NET Framework and the installation directory:
[!IMPORTANT] O nome da subchave é NET Framework Setup, e não .NET Framework Setup.The subkey name is NET Framework Setup, not .NET Framework Setup.
  • Para determinar o caminho do diretório do Common Language Runtime do .NET Framework, chame o método RuntimeEnvironment.GetRuntimeDirectory().To determine the directory path to the .NET Framework common language runtime, call the RuntimeEnvironment.GetRuntimeDirectory() method.
  • Para obter a versão do CLR, chame o método RuntimeEnvironment.GetSystemVersion().To get the CLR version, call the RuntimeEnvironment.GetSystemVersion() method. Para o .NET Framework 4 e suas versões pontuais (o .NET Framework 4.5, 4.5.1, 4.5.2 e o .NET Framework 4.6, 4.6.1, 4.6.2, 4.7 e 4.7.1), ele retorna a cadeia de caracteres v4.0.30319.For the .NET Framework 4 and its point releases (the .NET Framework 4.5, 4.5.1, 4.5.2, and .NET Framework 4.6, 4.6.1, 4.6.2, 4.7, and 4.7.1), it returns the string v4.0.30319.
EscopoScope SecundárioMinor
VersãoVersion 4.64.6
TipoType Tempo de execuçãoRuntime

.NET Framework 4.6 não usa uma versão 4.5.x.x ao se registrar no registroThe .NET Framework 4.6 does not use a 4.5.x.x version when registering itself in the registry

DetalhesDetails Como é de se esperar, a chave de versão definida no registro (em HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full) do .NET Framework 4.6 começa com "4.6", e não "4.5".As one might expect, the version key set in the registry (at HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full) for the .NET Framework 4.6 begins with '4.6', not '4.5'. Os aplicativos que dependem dessas chaves do Registro para saber quais versões do .NET Framework estão instaladas em um computador precisam ser atualizados para compreenderem que 4.6 é uma nova versão possível, compatível com as versões 4.5.x anteriores.Apps that depend on these registry keys to know which .NET Framework versions are installed on a machine should be updated to understand that 4.6 is a new possible version, and one that is compatible with previous 4.5.x releases.
SugestãoSuggestion Atualize os aplicativos que estão investigando uma instalação do .NET Framework 4.5 procurando por chaves do Registro 4.5 que também aceitam 4.6.Update apps probing for a .NET Framework 4.5 install by looking for 4.5 registry keys to also accept 4.6.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.64.6
TipoType Tempo de execuçãoRuntime

FerramentasTools

Contract.Invariant ou Contract.Requires<TException> não consideram String.IsNullOrEmpty puroContract.Invariant or Contract.Requires<TException> do not consider String.IsNullOrEmpty to be pure

DetalhesDetails Para aplicativos direcionados ao .NET Framework 4.6.1, se o contrato invariável de Contract.Invariant ou o contrato de pré-condição de Requires chamar o método String.IsNullOrEmpty, o regravador emitirá o aviso do compilador CC1036: "Chamada detectada ao método 'System.String.IsNullOrWhteSpace(System.String)' sem [Pure] no método." Esse é um aviso do compilador, e não um erro do compilador.For apps that target the .NET Framework 4.6.1, if the invariant contract for Contract.Invariant or the precondition contract for Requires calls the String.IsNullOrEmpty method, the rewriter emits compiler warning CC1036: "Detected call to method 'System.String.IsNullOrWhteSpace(System.String)' without [Pure] in method." This is a compiler warning rather than a compiler error.
SugestãoSuggestion Esse comportamento foi abordado em Problema nº 339 no GitHub.This behavior was addressed in GitHub Issue #339. Para eliminar esse aviso, você pode baixar e compilar uma versão atualizada do código-fonte para a ferramenta de Contratos de Código no GitHub.To eliminate this warning, you can download and compile an updated version of the source code for the Code Contracts tool from GitHub. As informações para download são encontradas no fim da página.Download information is found at the bottom of the page.
EscopoScope SecundárioMinor
VersãoVersion 4.6.14.6.1
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Aplicativos WebWeb Applications

A configuração de aplicativo "dataAnnotations:dataTypeAttribute:disableRegEx" é habilitada por padrão no .NET Framework 4.7.2"dataAnnotations:dataTypeAttribute:disableRegEx" app setting is on by default in .NET Framework 4.7.2

DetalhesDetails No .NET Framework 4.6.1, foi introduzida uma configuração de aplicativo ("dataAnnotations:dataTypeAttribute:disableRegEx") que permite que os usuários desabilitem o uso de expressões regulares em atributos de tipo de dados (como System.ComponentModel.DataAnnotations.EmailAddressAttribute, System.ComponentModel.DataAnnotations.UrlAttribute e System.ComponentModel.DataAnnotations.PhoneAttribute).In .NET Framework 4.6.1, an app setting ("dataAnnotations:dataTypeAttribute:disableRegEx") was introduced that allows users to disable the use of regular expressions in data type attributes (such as System.ComponentModel.DataAnnotations.EmailAddressAttribute, System.ComponentModel.DataAnnotations.UrlAttribute, and System.ComponentModel.DataAnnotations.PhoneAttribute). Isso ajuda a reduzir vulnerabilidades de segurança, por exemplo, impedindo que um ataque de negação de serviço use expressões regulares específicas.This helps to reduce security vulnerability such as avoiding the possibility of a Denial of Service attack using specific regular expressions.
No .NET Framework 4.6.1, essa configuração de aplicativo para desabilitar o uso de expressões regulares era definida como false por padrão.In .NET Framework 4.6.1, this app setting to disable RegEx usage was set to false by default. A partir do .NET Framework 4.7.2, essa opção de configuração é definida como true por padrão para reduzir ainda mais a vulnerabilidades seguras para aplicativos Web direcionados .NET Framework 4.7.2 e superiores.Starting with .NET Framework 4.7.2, this config switch is set to true by default to further reduce secure vulnerability for web applications that target .NET Framework 4.7.2 and above.
SugestãoSuggestion Se observar que as expressões regulares em seu aplicativo Web não funcionam após atualizar para o .NET Framework 4.7.2, você poderá atualizar o valor da "dataAnnotations:dataTypeAttribute:disableRegEx" configuração false para voltar ao comportamento anterior.If you find that regular expressions in your web application do not work after upgrading to .NET Framework 4.7.2, you can update the value of the "dataAnnotations:dataTypeAttribute:disableRegEx" setting to false to revert to the previous behavior.
<configuration>
<appSettings>
...
<add key="dataAnnotations:dataTypeAttribute:disableRegEx" value="false"/>
...
</appSettings>
</configuration>
EscopoScope SecundárioMinor
VersionVersion 4.7.24.7.2
DigiteType RuntimeRuntime

Controles de host do navegador gerenciado do .NET Framework 1.1 e 2.0 estão bloqueadosManaged browser hosting controls from the .NET Framework 1.1 and 2.0 are blocked

DetalhesDetails Hospedar esses controles é bloqueado no Internet Explorer.Hosting these controls is blocked in Internet Explorer.
SugestãoSuggestion O Internet Explorer falhará ao iniciar um aplicativo que usa o navegador gerenciado que hospeda controles.Internet Explorer will fail to launch an application that uses managed browser hosting controls. O comportamento anterior pode ser restaurado definindo o valor EnableIEHosting da subchave do registro HKLM/SOFTWARE/MICROSOFT/.NETFramework para 1 para sistemas x86 e para processos de 32 bits em sistemas de x64, e definindo o valor EnableIEHosting da subchave do registro HKLM/SOFTWARE/Wow6432Node/Microsoft/.NETFramework para 1 para processos de 64 bits em sistemas de x64.The previous behavior can be restored by setting the EnableIEHosting value of the registry subkey HKLM/SOFTWARE/MICROSOFT/.NETFramework to 1 for x86 systems and for 32-bit processes on x64 systems, and by setting the EnableIEHosting value of the registry subkey HKLM/SOFTWARE/Wow6432Node/Microsoft/.NETFramework to 1 for 64-bit processes on x64 systems.
EscopoScope SecundárioMinor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime

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

Códigos de erro de maxRequestLength ou maxReceivedMessageSize são diferentesError codes for maxRequestLength or maxReceivedMessageSize are different

DetalhesDetails Mensagens nos serviços Web WCF hospedadas no IIS (Serviços de Informações da Internet) ou no ASP.NET Development Server que excedam maxRequestLength (no ASP.NET) ou maxReceivedMessageSize (no WCF) têm códigos de erro diferentes. O código de status HTTP foi alterado de 400 (Solicitação Incorreta) para 413 (Entidade de Solicitação Muito Longa), e as mensagens que excederam as configurações de maxRequestLength ou maxReceivedMessageSize lançarão uma exceção ProtocolException.Messages in WCF web services hosted in Internet Information Services (IIS) or ASP.NET Development Server that exceed maxRequestLength (in ASP.NET) or maxReceivedMessageSize (in WCF) have different error codeThe HTTP status code has changed from 400 (Bad Request) to 413 (Request Entity Too Large), and messages that exceed either the maxRequestLength or the maxReceivedMessageSize setting throw a ProtocolException exception. Isso inclui os casos em que o modo de transferência é Streamed.This includes cases in which the transfer mode is Streamed.
SugestãoSuggestion Essa alteração facilita a depuração nos casos em que o comprimento da mensagem excede os limites permitidos pelo ASP.NET ou WCF. É necessário modificar os códigos que executam o processamento baseado em um código de status HTTP 400.This change facilitates debugging in cases where the message length exceeds the limits allowed by ASP.NET or WCF.You must modify any code that performs processing based on an HTTP 400 status code.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime

MinFreeMemoryPercentageToActiveService agora é respeitadoMinFreeMemoryPercentageToActiveService is now respected

DetalhesDetails Essa configuração estabelece a memória mínima que deve estar disponível no servidor para que um serviço WCF possa ser ativado.This setting establishes the minimum memory that must be available on the server before a WCF service can be activated. Ela foi projetada para evitar exceções OutOfMemoryException.It is designed to prevent OutOfMemoryException exceptions. No .NET Framework 4.5, essa configuração não tinha nenhum efeito.In the .NET Framework 4.5, this setting had no effect. No .NET Framework 4.5.1, essa configuração é observada.In the .NET Framework 4.5.1, the setting is observed.
SugestãoSuggestion Ocorrerá uma exceção se a memória livre disponível no servidor Web for menor que a porcentagem definida pela definição de configuração.An exception occurs if the free memory available on the web server is less than the percentage defined by the configuration setting. Alguns serviços WCF iniciados com êxito e executados em um ambiente de memória restrito agora podem falhar.Some WCF services that successfully started and ran in a constrained memory environment may now fail.
EscopoScope SecundárioMinor
VersãoVersion 4.5.14.5.1
TipoType Tempo de execuçãoRuntime

Remoção de Ssl3 de TransportDefaults do WCFRemove Ssl3 from the WCF TransportDefaults

DetalhesDetails Ao usar NetTcp com segurança de transporte e um tipo de credencial de certificado, o SSL 3 não é mais um protocolo padrão usado para negociar uma conexão segura.When using NetTcp with transport security and a credential type of certificate, the SSL 3 protocol is no longer a default protocol used for negotiating a secure connection. Na maioria dos casos, não deve haver impacto nos aplicativos existentes, pois o TLS 1.0 sempre esteve incluído na lista de protocolos para NetTcp.In most cases there should be no impact to existing apps as TLS 1.0 has always been included in the protocol list for NetTcp. Todos os clientes existentes devem ser capazes de negociar uma conexão usando, no mínimo, o TLS 1.0.All existing clients should be able to negotiate a connection using at least TLS1.0.
SugestãoSuggestion Se Ssl3 for exigido, use um dos seguintes mecanismos de configuração para adicioná-lo à lista de protocolos negociados.If Ssl3 is required, use one of the following configuration mechanisms to add Ssl3 to the list of negotiated protocols.
  • SslProtocols
  • SslProtocols
  • <
  • [<sslStreamSecurity> section of <customBinding>]~/docs/framework/configure-apps/file-schema/wcf/sslstreamsecurity.md)[<sslStreamSecurity> section of <customBinding>]~/docs/framework/configure-apps/file-schema/wcf/sslstreamsecurity.md)
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.6.24.6.2
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

O objeto System.ServiceModel.Web.WebServiceHost não adiciona mais um ponto de extremidade padrãoSystem.ServiceModel.Web.WebServiceHost object no longer adds a default endpoint

DetalhesDetails O objeto WebServiceHost não adicionará um ponto de extremidade padrão se um ponto de extremidade explícito tiver sido adicionado pelo código do aplicativo.The WebServiceHost object no longer adds a default endpoint if an explicit endpoint has been added by application code.
SugestãoSuggestion Se os usuários forem esperar para poderem se conectar a um ponto de extremidade padrão e outros pontos de extremidade explícitos forem adicionados ao WebServiceHost, os pontos de extremidade padrão também deverão ser explicitamente adicionados (usando AddDefaultEndpoints()).If users will expect to be able to connect to a default endpoint and other explicit endpoints have been added to the WebServiceHost, default endpoints should also be added explicitly (using AddDefaultEndpoints()).
EscopoScope SecundárioMinor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

O método Replace nas URLs do OData é desabilitado por padrãoThe Replace method in OData URLs is disabled by default

DetalhesDetails A partir do .NET Framework 4.5, o método Replace em URLs do OData é desabilitado por padrão.Beginning in the .NET Framework 4.5, the Replace method in OData URLs is disabled by default. Quando o Replace do OData está desabilitado (agora por padrão), qualquer solicitação de usuário, incluindo funções de substituição (que são incomuns), falha.When OData Replace is disabled (now by default), any user requests including replace functions (which are uncommon) will fail.
SugestãoSuggestion Se o método de substituição for necessário (o que é incomum), ele poderá ser reabilitado por meio das configurações (ReplaceFunction).If the replace method is required (which is uncommon), it can be re-enabled through a config settings (ReplaceFunction). No entanto, um método de substituição habilitado pode dar abertura para vulnerabilidades de segurança, devendo ser usado somente depois de análise cuidadosa.However, an enabled replace method can open security vulnerabilities and should only be used after careful review.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

AddressHeaderCollection do WCF agora gera ArgumentException se um elemento addressHeader for nuloWCF AddressHeaderCollection now throws an ArgumentException if an addressHeader element is null

DetalhesDetails A partir do .NET Framework 4.7.1, o construtor AddressHeaderCollection(IEnumerable<AddressHeader>) gera ArgumentException se um elemento for null.Starting with the .NET Framework 4.7.1, the AddressHeaderCollection(IEnumerable<AddressHeader>) constructor throws an ArgumentException if one of the elements is null. No .NET Framework 4.7 e versões anteriores, nenhuma exceção é gerada.In the .NET Framework 4.7 and earlier versions, no exception is thrown.
SugestãoSuggestion Se houver problemas de compatibilidade com essa alteração no .NET Framework 4.7.1 ou uma versão anterior, será possível recusá-la adicionando a seguinte linha à seção <runtime> do arquivo app.config:If you encounter compatibility issues with this change on the .NET Framework 4.7.1 or a later version, you can opt-out of it by adding the following line to the <runtime> section of the app.config file::
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableAddressHeaderCollectionValidation=true" />
</runtime>
</configuration>
EscopoScope SecundárioMinor
VersãoVersion 4.7.14.7.1
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

O valor padrão MsmqSecureHashAlgorithm do WCF agora é SHA256WCF MsmqSecureHashAlgorithm default value is now SHA256

DetalhesDetails A partir do .NET Framework 4.7.1, o algoritmo de assinatura da mensagem padrão no WCF para mensagens Msmq é SHA256.Starting with the .NET Framework 4.7.1, the default message signing algorithm in WCF for Msmq messages is SHA256. No .NET Framework 4.7 e versões anteriores, o algoritmo de assinatura da mensagem padrão é SHA1.In the .NET Framework 4.7 and earlier versions, the default message signing algorithm is SHA1.
SugestãoSuggestion Se houver problemas de compatibilidade com essa alteração no .NET Framework 4.7.1 ou uma versão posterior, será possível recusá-la adicionando a seguinte linha à seção <runtime> do arquivo app.config:If you run into compatibility issues with this change on the .NET Framework 4.7.1 or later, you can opt-out the change by adding the following line to the <runtime>section of your app.config file:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.UseSha1InMsmqEncryptionAlgorithm=true" />
</runtime>
</configuration>
EscopoScope SecundárioMinor
VersãoVersion 4.7.14.7.1
TipoType Tempo de execuçãoRuntime

PipeConnection.GetHashAlgorithm do WCF agora usa o SHA256WCF PipeConnection.GetHashAlgorithm now uses SHA256

DetalhesDetails A partir do .NET Framework 4.7.1, o Windows Communication Foundation usa o hash SHA256 para gerar nomes aleatórios para pipes nomeados.Starting with the .NET Framework 4.7.1, Windows Communication Foundation uses a SHA256 hash to generate random names for named pipes. No .NET Framework 4.7 e nas versões anteriores, ele usa o hash SHA1.In the .NET Framework 4.7 and earlier versions, it used a SHA1 hash.
SugestãoSuggestion Se houver problemas de compatibilidade com essa alteração no .NET Framework 4.7.1 ou uma versão posterior, é possível recusá-la adicionando a seguinte linha à seção <runtime> do arquivo app.config:If you run into compatibility issue with this change on the .NET Framework 4.7.1 or later, you can opt-out it by adding the following line to the <runtime> section of your app.config file:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.UseSha1InPipeConnectionGetHashAlgorithm=true" />
</runtime>
</configuration>
EscopoScope SecundárioMinor
VersãoVersion 4.7.14.7.1
TipoType Tempo de execuçãoRuntime

Serviços WCF que usam NETTCP com a segurança SSL e autenticação de certificado MD5WCF services that use NETTCP with SSL security and MD5 certificate authentication

DetalhesDetails O .NET Framework 4.6 adiciona o TLS 1.1 e o TLS 1.2 à lista padrão de protocolos SSL do WCF.The .NET Framework 4.6 adds TLS 1.1 and TLS 1.2 to the WCF SSL default protocol list. Quando os computadores cliente e servidor têm o .NET Framework 4.6 ou versões posteriores instaladas, o TLS 1.2 é usado para negociação. O TLS 1.2 não é compatível com a autenticação do certificado MD5.When both client and server machines have the .NET Framework 4.6 or later installed, TLS 1.2 is used for negotiation.TLS 1.2 does not support MD5 certificate authentication. Consequentemente, se um cliente usar um certificado MD5, o cliente WCF falhará ao se conectar ao serviço WCF.As a result, if a customer uses an MD5 certificate, the WCF client will fail to connect to the WCF service.
SugestãoSuggestion Você pode contornar esse problema para que um cliente WCF possa se conectar a um servidor WCF seguindo um destes procedimentos:You can work around this issue so that a WCF client can connect to a WCF server by doing any of the following:
  • Atualize o certificado para não usar o algoritmo MD5.Update the certificate to not use the MD5 algorithm. Esta é a solução recomendada.This is the recommended solution.
  • Se a associação não tiver sido configurada dinamicamente no código-fonte, atualize o arquivo de configuração de aplicativo para usar o TLS 1.1 ou uma versão anterior do protocolo.If the binding is not dynamically configured in source code, update the application's configuration file to use TLS 1.1 or an earlier version of the protocol. Isso permite que você continue usando um certificado com o algoritmo de hash MD5.This allows you to continue to use a certificate with the MD5 hash algorithm.
[!WARNING] Essa solução alternativa não é recomendada, pois um certificado com o algoritmo de hash MD5 é considerado inseguro.This workaround is not recommended, since a certificate with the MD5 hash algorithm is considered insecure.
O arquivo de configuração que se segue demonstra isso:The following configuration file does this:
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding>
<security mode= "None/Transport/Message/TransportWithMessageCredential" >
<transport clientCredentialType="None/Windows/Certificate"
protectionLevel="None/Sign/EncryptAndSign"
sslProtocols="Ssl3/Tls1/Tls11">
</transport>
</security>
</binding>
</netTcpBinding>
</bindings>
</system.ServiceModel>
</configuration>
[!WARNING] Essa solução alternativa não é recomendada, pois um certificado com o algoritmo de hash MD5 é considerado inseguro.This workaround is not recommended, since a certificate with the MD5 hash algorithm is considered insecure.
EscopoScope SecundárioMinor
VersãoVersion 4.64.6
TipoType Tempo de execuçãoRuntime

Windows FormsWindows Forms

PreviewLostKeyboardFocus será chamado repetidamente se seu manipulador mostrar uma caixa de mensagem do Windows FormsPreviewLostKeyboardFocus is called repeatedly if its handler shows a Windows Forms message box

DetalhesDetails A partir do .NET Framework 4.5, chamar MessageBox.Show de um manipulador PreviewLostKeyboardFocus fará com que o manipulador seja acionado novamente quando a caixa de mensagem for fechada, possivelmente resultando em um loop infinito de caixas de mensagem.Beginning in the .NET Framework 4.5, calling MessageBox.Show from a PreviewLostKeyboardFocus handler will cause the handler to re-fire when the message box is closed, potentially resulting in an infinite loop of message boxes.
SugestãoSuggestion Há duas opções para contornar esse problema:There are two options to work around this issue:
  1. Ele pode ser evitado chamando MessageBox.Show em vez de MessageBox.Show.It may be avoided by calling MessageBox.Show instead of MessageBox.Show.
  2. Ele pode ser evitado mostrando a caixa de mensagem de um manipulador de eventos UIElement.LostKeyboardFocus (em oposição a um manipulador de eventos PreviewLostKeyboardFocus).It may be avoided by showing the message box from a UIElement.LostKeyboardFocus event handler (as opposed to a PreviewLostKeyboardFocus event handler).
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

A propriedade CheckForOverflowUnderflow do WinForm agora é true para System.DrawingWinForm's CheckForOverflowUnderflow property is now true for System.Drawing

DetalhesDetails A propriedade CheckForOverflowUnderflow do o assembly System.Drawing.dll está definida como true.The CheckForOverflowUnderflow property for the System.Drawing.dll assembly is set to true.
SugestãoSuggestion Anteriormente, quando os estouros ocorriam, o resultado teria sido truncado silenciosamente.Previously when overflows occurred, the result would be silently truncated. Agora, uma exceção OverflowException é gerada.Now an OverflowException exception is thrown.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime

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

Pop-ups encadeados com StaysOpen=FalseChained Popups with StaysOpen=False

DetalhesDetails Um pop-up com StaysOpen=False deve fechar quando você clica fora dele.A Popup with StaysOpen=False is supposed to close when you click outside the Popup. Quando dois ou mais pop-ups do tipo estão encadeados (por exemplo, quando um contém o outro), há muitos problemas, incluindo:When two or more such Popups are chained (i.e. one contains another), there were many problems, including:
  • Abra dois níveis, clique fora do P2, mas dentro do P1.Open two levels, click outside P2 but inside P1. Nada acontecerá.Nothing happens.
  • Abra dois níveis, clique fora do P1.Open two levels, click outside P1. Ambos pop-ups serão fechados.Both popups close.
  • Abra e feche dois níveis.Open and close two levels. Em seguida, tente abrir novamente o P2.Then try to open P2 again. Nada acontecerá.Nothing happens.
  • Tente abrir três níveis.Try to open three levels. Não é possível fazer isso.You can't. Nada acontecerá ou os primeiros dois níveis fecharão, dependendo de onde você clicar. Agora, esses casos (e outras variantes) funcionam conforme o esperado.(Either nothing happens or the first two levels close, depending on where you click.) These cases (and other variants) now work as expected.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.7.14.7.1
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Alterar a propriedade IsEnabled do pai de um controle TextBlock afeta os controles filhoChanging the IsEnabled property of the parent of a TextBlock control affects any child controls

DetalhesDetails A partir do .NET Framework 4.6.2, alterar a propriedade IsEnabled do pai de um controle TextBlock afetará os controles filho (como hiperlinks e botões) do controle TextBlock. No .NET Framework 4.6.1 e versões anteriores, os controles dentro de TextBlock nem sempre refletiam o estado da propriedade IsEnabled do pai TextBlock.Starting with the .NET Framework 4.6.2, changing the IsEnabled property of the parent of a TextBlock control affects any child controls (such as hyperlinks and buttons) of the TextBlock control.In the .NET Framework 4.6.1 and earlier versions, controls inside a TextBlock did not always reflect the state of the IsEnabled property of the TextBlock parent.
SugestãoSuggestion nenhuma.None. Essa alteração está em conformidade com o comportamento esperado para controles dentro de um controle TextBlock.This change conforms to the expected behavior for controls inside a TextBlock control.
EscopoScope SecundárioMinor
VersãoVersion 4.6.24.6.2
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

FlowDocument pode mostrar uma linha extra de textoFlowDocument may show an extra line of text

DetalhesDetails Em alguns casos, um elemento FlowDocument exibirá uma linha de texto extra ao ser executado no .NET Framework 4.5, em comparação a como ele foi exibido quando executado no .NET Framework 4.0.In some cases, a FlowDocument element will display an extra line of text when running on the .NET Framework 4.5 compared to how it displayed when run on the .NET Framework 4.0. Não conhecemos casos em que a alteração fez com que qualquer texto fosse exibido de forma inadequada ou ilegível, mas textos omitidos de uma exibição de FlowDocument podem aparecer.There are no known cases of the change causing any text to be displayed poorly or illegibly, but it could cause text to appear that previously was omitted from a FlowDocument's view.
SugestãoSuggestion Em alguns casos, diminuir a propriedade PageHeight do elemento de exibição em 1 pode restaurar o número anterior de linhas exibidas.In some cases, decreasing the display element's PageHeight property by one can restore the previous number of displayed lines.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

GlyphRun.ComputeInkBoundingBox() e FormattedText.Extent retornam valores diferentes começando no .NET Framework 4.5GlyphRun.ComputeInkBoundingBox() and FormattedText.Extent return different values beginning in .NET Framework 4.5

DetalhesDetails Foram feitas melhorias em ComputeInkBoundingBox() e Extent do .NET Framework 4.5 para resolver problemas em que as caixas eram muito pequenas para o glifos contidos em alguns casos no .NET Framework 4.0.Improvements were made to ComputeInkBoundingBox() and Extent in the .NET Framework 4.5 to address issues where the boxes were too small for the contained glyphs in some cases in the .NET Framework 4.0. Como resultado, algumas caixas delimitadoras serão maiores a partir do .NET Framework 4.5, resultando em diferenças sutis no layout da interface do usuário.As a result of this, some bounding boxes will be larger beginning in the .NET Framework 4.5, resulting in subtle differences in UI layout.
SugestãoSuggestion Lembre-se de que alguns tamanhos de caixa delimitadora do glifo aumentaram.Be aware that some glyph bounding box sizes have increased. Essas alterações geralmente aprimorarão a apresentação e os testes de caixa de clique, mas se o comportamento anterior (anterior ao .NET 4.5) for desejado, ele poderá ser aceito com a adição da seguinte entrada ao arquivo app.config:These changes will usually improve presentation and hit box testing, but if the older (pre-.NET 4.5) behavior is desired, it can be opted into by adding the following entry to the app.config file:
<appsettings>
<add key="IncludeAllInkInBoundingBox" value="false">
</appsettings>
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Rolagem horizontal e virtualizaçãoHorizontal scrolling and virtualization

DetalhesDetails Essa alteração se aplica a um ItemsControl que faz sua própria virtualização na direção ortogonal para a direção de rolagem principal (o principal exemplo é DataGrid com EnableColumnVirtualization="True").This change applies to an ItemsControl that does its own virtualization in the direction orthogonal to the main scrolling direction (the chief example is DataGrid with EnableColumnVirtualization="True"). O resultado de certas operações de rolagem horizontal foi alterado para produzir resultados mais intuitivos e análogos aos resultados de operações verticais comparáveis.The outcome of certain horizontal scrolling operations has been changed to produce results that are more intuitive and more analogous to the results of comparable vertical operations.

As operações específicas incluem "Rolar Aqui" e "Borda Direita" para usar os nomes dos menus obtidos clicando com o botão direito do mouse em uma barra de rolagem horizontal.The operations include "Scroll Here" and "Right Edge", to use the names from the menu obtained by right-clicking a horizontal scrollbar. Ambas calculam um deslocamento candidato e chamam SetHorizontalOffset(Double).Both of these compute a candidate offset and call SetHorizontalOffset(Double).

Depois de rolar para o novo deslocamento, a definição de "aqui" ou de "borda direita" poderá mudar, pois um conteúdo com a virtualização removida recentemente alterou o valor de ExtentWidth.After scrolling to the new offset, the notion of "here" or "right edge" may have changed because newly de-virtualized content has changed the value of ExtentWidth.

Antes do .NET Framework 4.6.2, a operação de rolagem simplesmente usa o deslocamento candidato, embora ele talvez não seja mais "aqui" ou na "borda direita".Prior to .NET Framework 4.6.2, the scroll operation simply uses the candidate offset, even though it may not be "here" or at the "right edge" any more. Isso resulta em efeitos como o "salto" de rolagem, melhor ilustrado pelo exemplo.This results in effects like "bouncing" the scroll thumb, best illustrated by example. Suponha que um DataGrid tenha ExtentWidth = 1000 e Width = 200.Suppose a DataGrid has ExtentWidth=1000 and Width=200. Uma rolagem para "Borda Direita" usa o deslocamento de candidato 1000-200 = 800.A scroll to "Right Edge" uses candidate offset 1000 - 200 = 800. Durante a rolagem até esse deslocamento, a virtualização de novas colunas é eliminada. Vamos supor que elas sejam muito largas, então o ExtentWidth muda para 2000.While scrolling to that offset, new columns are de- virtualized; let's suppose they are very wide, so that the ExtentWidth changes to 2000. A rolagem termina com HorizontalOffset=800 e o elevador "retorna" para perto do meio da barra de rolagem, precisamente em 800/2000 = 40%.The scroll ends with HorizontalOffset=800, and the thumb "bounces" back to near the middle of the scrollbar - precisely at 800/2000 = 40%.

A alteração é para recalcular um novo deslocamento candidato quando essa situação ocorre e tentar novamente.The change is to recompute a new candidate offset when this situation occurs, and try again. (A rolagem vertical já funciona assim.)(This is how vertical scrolling works already.)

A alteração proporciona uma experiência mais previsível e intuitiva para o usuário final, mas também pode afetar qualquer aplicativo que dependa do valor exato de HorizontalOffset após uma rolagem horizontal, seja ela invocada pelo usuário final ou por uma chamada explícita para SetHorizontalOffset(Double).The change produces a more predictable and intuitive experience for the end user, but it could also affect any app that depends on the exact value of HorizontalOffset after a horizontal scroll, whether invoked by the end user or by an explicit call to SetHorizontalOffset(Double).

SugestãoSuggestion Um aplicativo que usa um valor previsto para HorizontalOffset deve ser alterado para obter o valor real (e o valor de ExtentWidth) após qualquer rolagem horizontal que poderia alterar ExtentWidth devido à eliminação da virtualização.An app that uses a predicted value for HorizontalOffset should be changed to fetch the actual value (and the value of ExtentWidth) after any horizontal scroll that could change ExtentWidth due to de-virtualization.
EscopoScope SecundárioMinor
VersãoVersion 4.6.24.6.2
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Melhoria no comportamento das dicas de tecla no WPFKeytips behavior improved in WPF

DetalhesDetails O comportamento das dicas de tecla foi modificado para manter a paridade com o comportamento no Microsoft Word e no Windows Explorer.Keytips behavior has been modified to bring parity with behavior on Microsoft Word and Windows Explorer. Ao verificar se o estado da dica de tecla está habilitado ou não no caso de uma SystemKey (especificamente, Key ou F11) que está sendo pressionada, o WPF trata corretamente as teclas de dica de tecla.By checking whether keytip state is enabled or not in the case of a SystemKey (in particular, Key or F11) being pressed, WPF handles keytip keys appropriately. As dicas de tecla agora descartam um menu, mesmo quando ele é aberto pelo mouse.Keytips now dismiss a menu even when it is opened by mouse.
SugestãoSuggestion N/DN/A
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.7.24.7.2
TipoType Tempo de execuçãoRuntime

Novos valores de enumeração em PageRangeSelection do WPFNew enum values in WPF's PageRangeSelection

DetalhesDetails Os dois novos membros (CurrentPage e SelectedPages) foram adicionados à enumeração PageRangeSelection.Two new members (CurrentPage and SelectedPages) have been added to the PageRangeSelection enum.
SugestãoSuggestion Na maioria das vezes, essas mudanças não afetarão o código do usuário.In most cases, these changes won't impact user code. O código que depende de um número específico de elementos existentes nas chamadas GetNames(Type) ou GetValues(Type) no tipo PageRangeSelection deve ser modificado.Code that depends on a particular number of elements existing in GetNames(Type) or GetValues(Type) calls on the PageRangeSelection type should be modified, though.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

PreviewLostKeyboardFocus será chamado repetidamente se seu manipulador mostrar uma caixa de mensagem do Windows FormsPreviewLostKeyboardFocus is called repeatedly if its handler shows a Windows Forms message box

DetalhesDetails A partir do .NET Framework 4.5, chamar MessageBox.Show de um manipulador PreviewLostKeyboardFocus fará com que o manipulador seja acionado novamente quando a caixa de mensagem for fechada, possivelmente resultando em um loop infinito de caixas de mensagem.Beginning in the .NET Framework 4.5, calling MessageBox.Show from a PreviewLostKeyboardFocus handler will cause the handler to re-fire when the message box is closed, potentially resulting in an infinite loop of message boxes.
SugestãoSuggestion Há duas opções para contornar esse problema:There are two options to work around this issue:
  1. Ele pode ser evitado chamando MessageBox.Show em vez de MessageBox.Show.It may be avoided by calling MessageBox.Show instead of MessageBox.Show.
  2. Ele pode ser evitado mostrando a caixa de mensagem de um manipulador de eventos UIElement.LostKeyboardFocus (em oposição a um manipulador de eventos PreviewLostKeyboardFocus).It may be avoided by showing the message box from a UIElement.LostKeyboardFocus event handler (as opposed to a PreviewLostKeyboardFocus event handler).
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Elementos DataTemplate do WPF agora são visíveis à UIAWPF DataTemplate elements are now visible to UIA

DetalhesDetails Anteriormente, os elementos DataTemplate eram invisíveis à Automação da Interface do Usuário.Previously, DataTemplate elements were invisible to UI Automation. A partir da versão 4.5, a Automação da Interface do Usuário detectar esses elementos.Beginning in 4.5, UI Automation will detect these elements. Isso é útil em muitos casos, mas pode arruinar os testes que dependem das árvores UIA que não contêm elementos DataTemplate.This is useful in many cases, but can break tests that depend on UIA trees not containing DataTemplate elements.
SugestãoSuggestion Os testes de Automação da Interface do Usuário para esse aplicativo talvez precisem ser atualizados para contabilizar a árvore UIA agora, incluindo elementos DataTemplate anteriormente invisíveis.UI Automation tests for this app may need updated to account for the UIA tree now including previously invisible DataTemplate elements. Por exemplo, os testes que esperam que alguns elementos fiquem próximos uns dos outros agora podem precisar esperar elementos UIA anteriormente invisíveis entre eles.For example, tests that expect some elements to be next to each other may now need to expect previously invisible UIA elements in between. Ou os testes que dependem de determinadas contagens ou de índices para elementos UIA talvez precisem ser atualizados com novos valores.Or tests that rely on certain counts or indexes for UIA elements may need updated with new values.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

DispatcherSynchronizationContext.CreateCopy do WPF agora retorna uma nova cópia em vez da instância atualWPF DispatcherSynchronizationContext.CreateCopy now returns a new copy instead of the current instance

DetalhesDetails No .NET Framework 4, CreateCopy() retornava uma referência à instância atual, basicamente como uma otimização de desempenho.In the .NET Framework 4, CreateCopy() returned a reference to the current instance, primarily as a performance optimization. No .NET Framework 4.5, ele retorna uma nova instância que possibilita, pela primeira vez, concluir que referências iguais indicam que o thread em execução está no contexto de sincronização correto.In the .NET Framework 4.5, it returns a new instance which makes it possible for the first time to conclude that equal references indicate the executing thread is in the correct synchronization context. É provável que o código que verifica a identidade dessas referências seja afetado, mas, por causa da alteração, o código que chama CreateCopy() deve ser testado como parte da migração para o .NET Framework 4.5 ou mais recente.It is unlikely that code that checks the identity of these references will be affected, but because of the change, code that calls CreateCopy() should be tested as part of migration to the .NET Framework 4.5 or newer.
SugestãoSuggestion Lembre-se de que CreateCopy() agora retornará um novo objeto SynchronizationContext.Be aware that CreateCopy() will now return a new SynchronizationContext object. Anteriormente, o código que usava a equivalência de referências gerada dessa maneira não estava de fato verificado se ela estava no contexto apropriado, mas isso foi corrigido no .NET Framework 4.5 ou posteriores.Previously, code that used equivalence of references generated this way was not actually checking whether it was in the proper context, but does when built against .NET Framework 4.5 or later. Embora não haja probabilidade de causar problemas, praticar os caminhos de código afetados deve ser suficiente para determinar se isso impõe algum problema.While unlikely to cause issues, exercising the affected code paths should be enough to determine if this poses any problem.
EscopoScope SecundárioMinor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

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

Verificação ortográfica do WPF em controles habilitados por texto não funcionará no Windows 10 para idiomas que não estão na lista de idiomas de entrada do sistema operacionalWPF spell checking in text-enabled controls will not work in Windows 10 for languages not in the OS's input language list

DetalhesDetails Ao ser executado no Windows 10, o verificador ortográfico pode não funcionar em controles habilitados por texto do WPF, pois as funcionalidades da plataforma de verificação ortográfica estão disponíveis somente para os idiomas presentes na lista de idiomas de entrada. No Windows 10, quando um idioma é adicionado à lista de teclados disponíveis, o Windows baixa e instala automaticamente um pacote FOD (Recurso sob Demanda) que oferece as funcionalidades de verificação ortográfica.When running on Windows 10, the spell checker may not work for WPF text-enabled controls because platform spell-checking capabilities are available only for languages present in the input languages list.In Windows 10, when a language is added to the list of available keyboards, Windows automatically downloads and installs a corresponding Feature on Demand (FOD) package that provides spell-checking capabilities. Ao adicionar o idioma à lista de idiomas de entrada, o verificador ortográfico terá suporte.By adding the language to the input languages list, the spell checker will be supported.
SugestãoSuggestion Lembre-se de que o idioma ou texto a ser verificado ortograficamente precisa ser adicionado como idioma de entrada para a verificação ortográfica funcionar no Windows 10.Be aware that the language or text to be spell-checked must be added as an input language for spell-checking to work in Windows 10.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.64.6
TipoType Tempo de execuçãoRuntime

O padrão da Caixa de Texto do WPF é o limite de 100 na ação desfazerWPF TextBox defaults to undo limit of 100

DetalhesDetails No .NET Framework 4.5, o limite padrão de desfazer para uma caixa de texto do WPF é 100 (em vez de ser ilimitado como no .NET Framework 4.0)In .NET Framework 4.5, the default undo limit for a WPF textbox is 100 (as opposed to being unlimited in .NET Framework 4.0)
SugestãoSuggestion Se um limite de 100 da ação desfazer for muito baixo, o limite poderá ser definido explicitamente com UndoLimit.If an undo limit of 100 is too low, the limit can be set explicitly with UndoLimit
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

O texto selecionado TextBox do WPF aparece em cor diferente quando a caixa de texto está inativaWPF TextBox selected text appears a different color when the text box is inactive

DetalhesDetails No .NET Framework 4.5, quando um controle de caixa de texto do WPF estiver inativo (não tem o foco), o texto selecionado dentro da caixa terá uma cor diferente de quando o controle estiver ativo.In .NET Framework 4.5, when a WPF text box control is inactive (it doesn't have focus), the selected text inside the box will appear a different color than when the control is active.
SugestãoSuggestion O comportamento anterior (.NET Framework 4.0) poderá ser restaurado definindo a propriedade AreInactiveSelectionHighlightBrushKeysSupported como false.The previous (.NET Framework 4.0) behavior may be restored by setting the AreInactiveSelectionHighlightBrushKeysSupported property to false.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

TreeViewItem do WPF deve ser usado em um TreeViewWPF TreeViewItem must be used within a TreeView

DetalhesDetails Foi introduzida na versão 4.5 uma alteração que restringe o uso de elementos TreeViewItem fora de um TreeView.A change was introduced in 4.5 that restricts usage of TreeViewItem elements outside of a TreeView. Isso se manifesta sob as seguintes condições:This manifests under the following conditions:
  • O pai visual de TreeViewItem não é um painel.TreeViewItem's visual parent is not a panel. (Um TreeViewItem gerado para um TreeView terá um painel como pai)(A TreeViewItem generated for a TreeView will have a panel as its parent)
  • O TreeViewItem é descendente de um VirtualizingStackPanel que atua como o "host de itens" de um controle de lista (ListBox, DataGrid, ListView etc.).The TreeViewItem is a descendant of a VirtualizingStackPanel acting as the "items host" for a list control (ListBox, DataGrid, ListView, etc.). A virtualização não precisa ser habilitada.Virtualization doesn't need to be enabled.
  • O VirtualizingStackPanel é a rolagem de itens (ScrollUnit="Item").The VirtualizingStackPanel is item-scrolling (ScrollUnit="Item").
  • Alguém chama VirtualizingStackPanel.MakeVisible(v) para rolar um elemento v no modo de exibição.Someone calls VirtualizingStackPanel.MakeVisible(v) to scroll an element v into view. Isso pode ser feito explícita ou implicitamente de várias maneiras; talvez a maneira mais comum seja simplesmente clicar em v para fornecer a ele o foco do teclado.This can be done explicitly, or implicitly in a number of ways; perhaps the most common way is simply clicking on v to give it the keyboard focus.
  • A cadeia de pais visuais de v para o VirtualizingStackPanel passa pelo TreeViewItem.The visual-parent chain from v to the VirtualizingStackPanel passes through the TreeViewItem.
Em outras palavras, isso é visto quando um TreeViewItem é usado fora de um TreeView e o usuário clica em um descendente do TreeViewItem para colocá-lo no modo de exibição.In other words, this is seen when a TreeViewItem is used outside of a TreeView, and the user clicks on a descendant of the TreeViewItem to bring it into view. Se o TreeViewItem não tiver descendentes focalizáveis, você nunca verá esse problema.If the TreeViewItem has no focusable descendants, you'll never see this issue. Um exemplo de situação em que isso acontece é quando um TreeViewItem é a raiz de um DataTemplate.An example of a situation where this is hit is when a TreeViewItem is the root of a DataTemplate. Quando esse problema for atingido, haverá uma InvalidCastException que ocorrerá dentro da estrutura do WPF.When this issue is hit, there is an InvalidCastException that occurs within the WPF framework.
SugestãoSuggestion Um hotfix será disponibilizado para isso.A hotfix will be made available for this.
EscopoScope SecundárioMinor
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime

Janelas do WPF são renderizadas sem distorção ao se estender para fora de um único monitorWPF windows are rendered without clipping when extending outside a single monitor

DetalhesDetails No .NET Framework 4.6 em execução no Windows 8 e superior, a janela inteira é renderizada sem distorção quando ela se estende para fora da exibição única em um cenário de vários monitores.In the .NET Framework 4.6 running on Windows 8 and above, the entire window is rendered without clipping when it extends outside of single display in a multi-monitor scenario. Isso é diferente de versões anteriores do .NET Framework, que distorceriam janelas do WPF que se estendiam para fora de uma única exibição.This is different from previous versions of the .NET Framework which would clip WPF windows that extended beyond a single display.
SugestãoSuggestion Esse comportamento (com distorção ou não) pode ser definido explicitamente usando o elemento <EnableMultiMonitorDisplayClipping> em <appSettings> no arquivo de configuração do aplicativo ou definindo a propriedade EnableMultiMonitorDisplayClipping durante a inicialização do aplicativo.This behavior (whether to clip or not) can be explicitly set using the <EnableMultiMonitorDisplayClipping> element in <appSettings> in an application's configuration file, or by setting the EnableMultiMonitorDisplayClipping property at app startup.
EscopoScope SecundárioMinor
VersãoVersion 4.64.6
TipoType Tempo de execuçãoRuntime

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

System.Activities agora é APTCASystem.Activities is now APTCA

DetalhesDetails O assembly é marcado com o atributo AllowPartiallyTrustedCallersAttribute.The assembly is marked with the AllowPartiallyTrustedCallersAttribute attribute.
SugestãoSuggestion Classes derivadas não podem ser marcadas com SecurityCriticalAttribute.Derived classes cannot be marked with the SecurityCriticalAttribute. Anteriormente, os tipos derivados precisavam ser marcados com o SecurityCriticalAttribute.Previously, derived types had to be marked with the SecurityCriticalAttribute. No entanto, essa mudança não deve ter um impacto real.However, this change should have no real impact.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime

O WF agora serializa Expressions.Literal<T>DateTimes de modo diferente (interrompe analisadores XAML personalizados)WF serializes Expressions.Literal<T> DateTimes differently now (breaks custom XAML parsers)

DetalhesDetails O objeto ValueSerializer associado converterá um objeto DateTime ou DateTimeOffset cujos componentes Second e Millisecond são diferentes de zero e (para um valor de DateTime) cuja propriedade Kind não é Unspecified para a sintaxe de elemento de propriedade em vez de uma cadeia de caracteres.The associated ValueSerializer object will convert a DateTime or DateTimeOffset object whose Second and Millisecond components are non-zero and (for a DateTime value) whose Kind property is not Unspecified to property element syntax instead of a string. Essa alteração permite que os valores DateTime e DateTimeOffset completem um ciclo.This change allows DateTime and DateTimeOffset values to be round-tripped. Os analisadores XAML personalizados que assumem que a entrada XAML está na sintaxe de atributo não funcionará corretamente.Custom XAML parsers that assume that input XAML is in the attribute syntax will not function correctly.
SugestãoSuggestion Essa alteração permite que os valores DateTime e DateTimeOffset completem um ciclo.This change allows DateTime and DateTimeOffset values to be round-tripped. Os analisadores XAML personalizados que assumem que a entrada XAML está na sintaxe de atributo não funcionará corretamente.Custom XAML parsers that assume that input XAML is in the attribute syntax will not function correctly.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime

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

XML, XSLTXML, XSLT

XmlSchemaException agora define posições de linhas corretamenteXmlSchemaException now sets line positions properly

DetalhesDetails Se o valor SetLineInfo é passado para o método Load e um erro de validação ocorre, as propriedades LineNumber e LinePosition contêm agora a linha de informações.If the SetLineInfo value is passed to the Load method and a validation error occurs, the LineNumber and LinePosition properties now contain line information.
SugestãoSuggestion O código de tratamento de exceção que supõe que LineNumber e LinePosition não serão definidas deverá ser atualizado, uma vez que essas propriedades agora serão definidas corretamente quando SetLineInfo for usado durante o carregamento de XML.Exception-handling code that assumes LineNumber and LinePosition will not be set should be updated since these properties will now be set properly when SetLineInfo is used while loading XML.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Expansão da entidade DTD de XmlTextReader é limitada a 10.000.000 caracteresXmlTextReader DTD entity expansion is limited to 10,000,000 characters

DetalhesDetails A expansão da entidade DTD agora é limitada a 10.000.000 de caracteres.DTD entity expansion is now limited to 10,000,000 characters. O carregamento de arquivos XML sem expansão de entidade DTD ou com expansão de entidade DTD limitada não é afetado.Loading XML files without DTD entity expansion or with limited DTD entity expansion is unaffected. Arquivos com entidades DTD que se expandem para mais de 10.000.000 caracteres falham ao carregar e geram uma exceção.Files with DTD entities that expand to more than 10,000,000 characters fail to load, and now throw an exception.
SugestãoSuggestion Se o limite da expansão da entidade DTD for muito inferior a 10.000.000, o valor poderá ser substituído pela propriedade MaxCharactersFromEntities.If the limit of DTD entity expansion is too low 10,000,000, the value can be overridden with the MaxCharactersFromEntities property. Um XmlReaderSettings com o valor MaxCharactersFromEntities correto pode ser passado para o XmlReader.Create que usa XmlReaderSettings (por exemplo, Create(String, XmlReaderSettings)).An XmlReaderSettings with the proper MaxCharactersFromEntities value can be passed to XmlReader.Create that takes XmlReaderSettings (ie. Create(String, XmlReaderSettings))
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Compatibilidade com versões posteriores do XSLT agora funcionaXSLT forward compat now works

DetalhesDetails No .NET Framework 4, a compatibilidade com versões posteriores do XSLT 1.0 tinha os seguintes problemas:In the .NET Framework 4, XSLT 1.0 forward compatibility had the following issues:
  • O carregamento de uma folha de estilos falhava se sua versão era definida como 2.0 e o analisador encontrava uma compilação XSLT 1.0 não reconhecida.Loading a style sheet failed if its version was set to 2.0 and the parser encountered an unrecognized XSLT 1.0 construct.
  • A construçãoxsl:sort falhava ao classificar os dados se a versão de folha de estilo era definida como 1.1.The xsl:sort construct failed to sort data if the style sheet version was set to 1.1.
No .NET Framework 4.5, esses problemas foram corrigidos, e o modo de compatibilidade com versões posteriores do XSLT 1.0 funciona corretamente.In the .NET Framework 4.5, these issues have been fixed, and XSLT 1.0 forward compatibility mode works properly.
SugestãoSuggestion A maioria dos aplicativos não deve ser afetada, mas os dados serão classificados diferentemente em alguns casos agora que xsl:sort é respeitado.Most apps should be unaffected, however data will be sorted differently in some cases now that xsl:sort is respected. Se xsl:sort for usado em folhas de estilo 1.1, verifique se os aplicativos dependem da ordem sem classificação dos dados.If xsl:sort is used in 1.1 style sheets, confirm that apps were not depending on the unsorted order of data. Se os aplicativos dependerem do comportamento de classificação de 4.0, remova xsl:sort da folha de estilos.If apps rely on the 4.0 sorting behavior, remove xsl:sort from the style sheet.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs

Mensagem de exceção da folha de estilos XSLT alteradaXSLT style sheet exception message changed

DetalhesDetails No .NET Framework 4.5, o texto da mensagem de erro quando um arquivo XSLT é muito complexo é "A folha de estilos é muito complexa". Nas versões anteriores, a mensagem de erro era "Erro de compilação de XSLT". O código do aplicativo que depende do texto da mensagem de erro não funcionará.In the .NET Framework 4.5, the text of the error message when an XSLT file is too complex is "The style sheet is too complex." In previous versions, the error message was "XSLT compile error." Application code that depends on the text of the error message will no longer work. No entanto, os tipos de exceção permanecem os mesmos, de modo que essa modificação não deve ter um impacto real.However, the exception types remain the same, so this change should have no real impact.
SugestãoSuggestion Atualize qualquer código de aplicativo, dependendo da mensagem de exceção dessa condição de erro, para esperar a nova mensagem ou (ainda melhor) atualize o código para depender somente do tipo de exceção (XsltException), que não foi alterado.Update any app code depending on the exception message from this error condition to expect the new message, or (even better) update the code to depend only on the exception type (XsltException), which has not changed.
EscopoScope Microsoft EdgeEdge
VersãoVersion 4.54.5
TipoType Tempo de execuçãoRuntime
APIs afetadasAffected APIs