Изменение среды выполнения для миграции с .NET Framework 4.5.1 на 4.6Runtime Changes for Migration from .NET Framework 4.5.1 to 4.6

Если выполняется миграция с .NET Framework версии 4.5.1 на 4.6, просмотрите следующие разделы о проблемах совместимости приложений, которые могут повлиять на работу приложения:If you are migrating from the .NET Framework 4.5.1 to 4.6, review the following topics for application compatibility issues that may affect your app:

ASP.NETASP.NET

ASP.NET MVC теперь экранирует пробелы в строках, переданных через параметры маршрутаASP.NET MVC now escapes spaces in strings passed in via route parameters

ПодробнееDetails

Чтобы соответствовать стандарту RFC 2396, пробелы в путях маршрута теперь экранируются при заполнении параметров действий из маршрута.In order to conform to RFC 2396, spaces in route paths are now escaped when populating action parameters from a route. Таким образом, в то время как /controller/action/some data ранее соответствовал маршруту /controller/action/{data} и предоставлял some data в качестве параметра данных, теперь он будет предоставлять 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.

ПредложениеSuggestion

Код должен быть обновлен для неэкранирования строковых параметров из маршрута.Code should be updated to unescape string parameters from a route. Если необходим исходный URI, доступ к нему можно получить с помощью API RequestUri.OriginalString.If the original URI is needed, it can be accessed with the RequestUri.OriginalString API.

nameName ЗначениеValue
ОбластьScope Дополнительный номерMinor
VersionVersion 4.5.24.5.2
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Если в GridViews для свойства AllowCustomPaging установлено значение true, может возникать событие PageIndexChanging при выходе из последней страницы представленияGridViews with AllowCustomPaging set to true may fire the PageIndexChanging event when leaving the final page of the view

ПодробнееDetails

В результате ошибки в .NET Framework 4.5 иногда событие System.Web.UI.WebControls.GridView.PageIndexChanging не срабатывает для System.Web.UI.WebControls.GridView со свойством System.Web.UI.WebControls.GridView.AllowCustomPaging.A bug in the .NET Framework 4.5 causes System.Web.UI.WebControls.GridView.PageIndexChanging to sometimes not fire for System.Web.UI.WebControls.GridViews that have enabled System.Web.UI.WebControls.GridView.AllowCustomPaging.

ПредложениеSuggestion

Эта проблема была устранена в .NET Framework 4.6 и может быть решена путем обновления до этой версии платформы .NET Framework.This issue has been fixed in the .NET Framework 4.6 and may be addressed by upgrading to that version of the .NET Framework. Чтобы обойти эту проблему, приложение может иметь явный BindGrid в любом Page_Load, которое вызывает эти условия (System.Web.UI.WebControls.GridView находится на последней странице, а LastSystem.Web.UI.WebControls.GridView.PageSize отличается от System.Web.UI.WebControls.GridView.PageSize).As a work-around, the app can do an explicit BindGrid on any Page_Load that would hit these conditions (the System.Web.UI.WebControls.GridView is on the last page and LastSystem.Web.UI.WebControls.GridView.PageSize is different from System.Web.UI.WebControls.GridView.PageSize). Кроме того, приложение можно изменить, чтобы разрешить разбивку на страницы (вместо пользовательского разбиения по страницам), поскольку в этом случае проблемы не возникают.Alternatively, the app can be modified to allow paging (instead of custom paging), as that scenario does not demonstrate the problem.

nameName ЗначениеValue
ОбластьScope Дополнительный номерMinor
VersionVersion 4.54.5
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Свойству EnableViewStateMac больше невозможно задавать значение falseNo longer able to set EnableViewStateMac to false

ПодробнееDetails

ASP.NET теперь не позволяет разработчикам указывать <pages enableViewStateMac="false"/> или <@Page EnableViewStateMac="false" %>.ASP.NET no longer allows developers to specify <pages enableViewStateMac="false"/> or <@Page EnableViewStateMac="false" %>. Код проверки подлинности сообщения (MAC) состояния просмотра теперь принудительно применяется для всех запросов со встроенным состоянием просмотра.The view state message authentication code (MAC) is now enforced for all requests with embedded view state. Затрагиваются только те приложения, в которых для свойства EnableViewStateMac явно задано значение false.Only apps that explicitly set the EnableViewStateMac property to false are affected.

ПредложениеSuggestion

Следует считать, что свойство EnableViewStateMac имеет значение true, и возникающие ошибки MAC должны быть устранены (как описано в этом руководстве, содержащем несколько решений в зависимости от причины ошибки 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).

nameName ЗначениеValue
ОбластьScope ЗначительноMajor
VersionVersion 4.5.24.5.2
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Невозможно обнаружить с помощью анализа API.Not detectable via API analysis.

Профилирование приложений ASP.NET MVC4 может привести к неустранимой ошибке подсистемы выполненияProfiling ASP.NET MVC4 apps can lead to Fatal Execution Engine Error

ПодробнееDetails

Профилирование с использованием сборок NGEN /Profile может привести к сбою при запуске профилируемых приложений ASP.NET MVC4 с неустранимой ошибкой подсистемы выполненияProfilers using NGEN /Profile assemblies may crash profiled ASP.NET MVC4 applications on startup with a 'Fatal Execution Engine Exception'

ПредложениеSuggestion

Эта проблема решена в .NET Framework 4.5.2.This issue is fixed in the .NET Framework 4.5.2. Также можно избежать этой проблемы, указав COR_PRF_DISABLE_ALL_NGEN_IMAGES в маске события профилировщика.Alternatively, the profiler may avoid this issue by specifying COR_PRF_DISABLE_ALL_NGEN_IMAGES in its event mask.

nameName ЗначениеValue
ОбластьScope Пограничный случайEdge
VersionVersion 4.54.5
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Невозможно обнаружить с помощью анализа API.Not detectable via API analysis.

ЯдроCore

Объект ConcurrentDictionary, сериализованный в .NET Framework 4.5 с помощью NetDataContractSerializer, нельзя десериализовать в .NET Framework 4.5.1 или 4.5.2A ConcurrentDictionary serialized in .NET Framework 4.5 with NetDataContractSerializer cannot be deserialized by .NET Framework 4.5.1 or 4.5.2

ПодробнееDetails

Из-за внутренних изменений типа объекты ConcurrentDictionary<TKey,TValue>, сериализованные в .NET Framework 4.5 с помощью System.Runtime.Serialization.NetDataContractSerializer, не могут быть десериализованы в .NET Framework 4.5.1 или .NET Framework 4.5.2. Обратите внимание, что сериализация в .NET Framework 4.5.x с последующей десериализацией в .NET Framework 4.5 будет работать нормально.Due to internal changes to the type, ConcurrentDictionary<TKey,TValue> objects that are serialized with the .NET Framework 4.5 using the System.Runtime.Serialization.NetDataContractSerializer cannot be deserialized in the .NET Framework 4.5.1 or in the .NET Framework 4.5.2.Note that moving in the other direction (serializing with the .NET Framework 4.5.x and deserializing with the .NET Framework 4.5) works. Аналогичным образом, сериализация в версиях 4.x работает в .NET Framework 4.6. Сериализация и десериализация в одной версии платформы .NET Framework не затрагивается.Similarly, all 4.x cross-version serialization works with the .NET Framework 4.6.Serializing and deserializing with a single version of the .NET Framework is not affected.

ПредложениеSuggestion

Если требуется выполнить сериализацию и десериализацию объектов System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> между версиями .NET Framework 4.5 и .NET Framework 4.5.1/4.5.2, следует использовать альтернативный сериализатор, например System.Runtime.Serialization.DataContractSerializer или System.Runtime.Serialization.Formatters.Binary.BinaryFormatter, вместо System.Runtime.Serialization.NetDataContractSerializer. Кроме того, поскольку эта проблема была устранена в .NET Framework 4.6, она может быть решена путем обновления до этой версии платформы .NET Framework.If it is necessary to serialize and deserialize a System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> between the .NET Framework 4.5 and .NET Framework 4.5.1/4.5.2, an alternate serializer like the System.Runtime.Serialization.DataContractSerializer or System.Runtime.Serialization.Formatters.Binary.BinaryFormatter serializer should be used instead of the System.Runtime.Serialization.NetDataContractSerializer.Alternatively, because this issue is addressed in the .NET Framework 4.6, it may be solved by upgrading to that version of the .NET Framework.

ИмяName ЗначениеValue
ОбластьScope Дополнительный номерMinor
VersionVersion 4.5.14.5.1
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Невозможно обнаружить с помощью анализа API.Not detectable via API analysis.

AppDomainSetup.DynamicBase больше не задается случайно с помощью UseRandomizedStringHashAlgorithmAppDomainSetup.DynamicBase is no longer randomized by UseRandomizedStringHashAlgorithm

ПодробнееDetails

В версиях до .NET Framework 4.6 значение DynamicBase задавалось случайным образом между доменами приложений или между процессами, если в файле конфигурации приложения был включен UseRandomizedStringHashAlgorithm.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. Начиная с версии .NET Framework 4.6, DynamicBase будет возвращать постоянный результат между различными выполняющимися экземплярами приложения и между различными доменами приложений.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. Динамические основания при этом по-прежнему будут различаться для разных приложений. Это изменение исключает только случайный элемент именования для различных экземпляров одного приложения.Dynamic bases will still differ for different apps; this change only removes the random naming element for different instances of the same app.

ПредложениеSuggestion

Обратите внимание, что включение UseRandomizedStringHashAlgorithm не приведет к случайной установке DynamicBase.Be aware that enabling UseRandomizedStringHashAlgorithm will not result in DynamicBase being randomized. Если требуется случайное основание, для его получения необходимо использовать код приложения, а не этот API.If a random base is needed, it must be produced in your app's code rather than via this API.

nameName ЗначениеValue
ОбластьScope Пограничный случайEdge
VersionVersion 4.64.6
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Вызов Attribute.GetCustomAttributes в свойстве индексатора больше не вызывает исключение AmbiguousMatchException, если тип индекса может разрешить неоднозначностьCalling Attribute.GetCustomAttributes on an indexer property no longer throws AmbiguousMatchException if the ambiguity can be resolved by index's type

ПодробнееDetails

В версиях .NET Framework, более ранних, чем 4.6, вызов GetCustomAttribute(s) в свойстве индексатора, которое отличалось от другого свойства только по типу индекса, приведет к System.Reflection.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 System.Reflection.AmbiguousMatchException. Начиная с .NET Framework 4.6, атрибуты свойства возвращаются правильно.Beginning in the .NET Framework 4.6, the property's attributes will be correctly returned.

ПредложениеSuggestion

Имейте в виду, что теперь GetCustomAttribute(s) будут использоваться чаще.Be aware that GetCustomAttribute(s) will work more frequently now. Если приложение ранее зависело от System.Reflection.AmbiguousMatchException, теперь для явного поиска нескольких индексаторов следует использовать отражение.If an app was previously relying on the System.Reflection.AmbiguousMatchException, reflection should now be used to explicitly look for multiple indexers, instead.

nameName ЗначениеValue
ОбластьScope Пограничный случайEdge
VersionVersion 4.64.6
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Профилировщики не перечисляют COR_PRF_GC_ROOT_HANDLECOR_PRF_GC_ROOT_HANDLEs are not being enumerated by profilers

ПодробнееDetails

В .NET Framework 4.5.1 API профилирования RootReferences2() по ошибке никогда не возвращает COR_PRF_GC_ROOT_HANDLE (вместо этого возвращается COR_PRF_GC_ROOT_OTHER).In the .NET Framework v4.5.1, the profiling API RootReferences2() is incorrectly never returning COR_PRF_GC_ROOT_HANDLE (they are returned as COR_PRF_GC_ROOT_OTHER instead). Эта проблема решена в .NET Framework 4.6.This issue is fixed beginning in the .NET Framework 4.6.

ПредложениеSuggestion

Эта проблема была устранена в .NET Framework 4.6 и может быть решена путем обновления до этой версии платформы .NET Framework.This issue has been fixed in the .NET Framework 4.6 and may be addressed by upgrading to that version of the .NET Framework.

nameName ЗначениеValue
ОбластьScope Дополнительный номерMinor
VersionVersion 4.5.14.5.1
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Невозможно обнаружить с помощью анализа API.Not detectable via API analysis.

EventListeners трассировки событий Windows не выполняют запись событий от поставщиков с явными ключевыми словами (например, от поставщика TPL)ETW EventListeners do not capture events from providers with explicit keywords (like the TPL provider)

ПодробнееDetails

EventListeners трассировки событий Windows с пустой маской ключевого слова неправильно записывают события от поставщиков с явными ключевыми словами.ETW EventListeners with a blank keyword mask do not properly capture events from providers with explicit keywords. В платформе .NET Framework 4.5 поставщик TPL начал предоставлять явные ключевые слова и привел к возникновению этой проблемы.In the .NET Framework 4.5, the TPL provider began providing explicit keywords and triggered this issue. В .NET Framework 4.6 EventListeners были обновлены, чтобы больше не вызывать эту проблему.In the .NET Framework 4.6, EventListeners have been updated to no longer have this issue.

ПредложениеSuggestion

Чтобы обойти эту проблему, замените вызовы EnableEvents(EventSource, EventLevel) вызовами к перегрузке EnableEvents, которая явно задает маску "любые ключевые слова": EnableEvents(eventSource, level, unchecked((EventKeywords)0xFFFFffffFFFFffff)). Кроме того, эта проблема была устранена в .NET Framework 4.6 и может быть решена путем обновления до этой версии платформы .NET Framework.To work around this problem, replace calls to EnableEvents(EventSource, EventLevel) with calls to the EnableEvents overload that explicitly specifies the "any keywords" mask to use: EnableEvents(eventSource, level, unchecked((EventKeywords)0xFFFFffffFFFFffff)).Alternatively, this issue has been fixed in the .NET Framework 4.6 and may be addressed by upgrading to that version of the .NET Framework.

nameName ЗначениеValue
ОбластьScope Пограничный случайEdge
VersionVersion 4.54.5
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Теперь в персидском календаре используется алгоритм солнечного календаря хиджрыPersian calendar now uses the Hijri solar algorithm

ПодробнееDetails

Начиная с .NET Framework 4.6 класс System.Globalization.PersianCalendar использует алгоритм солнечного календаря хиджры.Starting with the .NET Framework 4.6, the System.Globalization.PersianCalendar class uses the Hijri solar algorithm. Начиная с .NET Framework 4.6 при преобразовании дат между System.Globalization.PersianCalendar и другими календарями может быть получен немного другой результат для дат, ранее 1800 г. или позднее 2023 г. (по григорианскому календарю). Кроме того, PersianCalendar.MinSupportedDateTime теперь March 22, 0622 вместо March 21, 0622.Converting dates between the System.Globalization.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.

ПредложениеSuggestion

Имейте в виду, что при использовании персидского календаря в .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. Кроме того, даты, сериализуемые между процессами, которые могут выполняться в различных версиях .NET Framework, не следует хранить в виде строк дат персидского календаря (поскольку эти значения могут быть разными).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).

nameName ЗначениеValue
ОбластьScope Дополнительный номерMinor
VersionVersion 4.64.6
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Объекты отражения больше невозможно передавать из управляемого кода во внепроцессные клиенты DCOMReflection objects can no longer be passed from managed code to out-of-process DCOM clients

ПодробнееDetails

Объекты отражения больше невозможно передавать из управляемого кода во внепроцессные клиенты DCOM.Reflection objects can no longer be passed from managed code to out-of-process DCOM clients. Затронуты следующие типы:The following types are affected:

Вызовы IMarshal объекта возвращают E_NOINTERFACE.Calls to IMarshal for the object return E_NOINTERFACE.

ПредложениеSuggestion

Обновите код маршалинга для работы с объектами без отражения.Update marshaling code to work with non-reflection objects.

ИмяName ЗначениеValue
ОбластьScope Дополнительный номерMinor
VersionVersion 4.64.6
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

TargetFrameworkName для домена приложения по умолчанию больше не принимает значение NULL по умолчанию, если оно не заданоTargetFrameworkName for default app domain no longer defaults to null if not set

ПодробнееDetails

Свойство System.AppDomainSetup.TargetFrameworkName имело ранее значение NULL в домене приложения по умолчанию, если оно не было задано явно.The System.AppDomainSetup.TargetFrameworkName was previously null in the default app domain, unless it was explicitly set. Начиная с версии 4.6, свойство System.AppDomainSetup.TargetFrameworkName для домена приложения по умолчанию будет иметь значение по умолчанию, полученное из свойства TargetFrameworkAttribute (если оно доступно).Beginning in 4.6, the System.AppDomainSetup.TargetFrameworkName property for the default app domain will have a default value derived from the TargetFrameworkAttribute (if one is present). Домены приложений не по умолчанию будут по-прежнему наследовать свойство System.AppDomainSetup.TargetFrameworkName от домена приложения по умолчанию (который не будет по умолчанию иметь значение NULL в 4.6), если оно явно не переопределено.Non-default app domains will continue to inherit their System.AppDomainSetup.TargetFrameworkName from the default app domain (which will not default to null in 4.6) unless it is explicitly overridden.

ПредложениеSuggestion

Следует обновить код так, чтобы он не зависел от TargetFrameworkName, принимающего п умолчанию значение NULL.Code should be updated to not depend on TargetFrameworkName defaulting to null. Если требуется, чтобы свойство продолжало принимать значение NULL, ему можно явно присвоить это значение.If it is required that this property continue to evaluate to null, it can be explicitly set to that value.

nameName ЗначениеValue
ОбластьScope Пограничный случайEdge
VersionVersion 4.64.6
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Теперь метод X509Certificate2.ToString(Boolean) не создает исключение, когда .NET не удается обработать сертификатX509Certificate2.ToString(Boolean) does not throw now when .NET cannot handle the certificate

ПодробнееDetails

В .NET Framework 4.5.2 и более ранних версиях этот метод создавал исключение, если значение true передавалось в параметр verbose и были установлены сертификаты, не поддерживаемые .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. Теперь метод будет выполняться успешно и возвращать допустимую строку, в которой пропущены недоступные части сертификата.Now, the method will succeed and return a valid string that omits the inaccessible portions of the certificate.

ПредложениеSuggestion

Любой код, зависящий от X509Certificate2.ToString(Boolean), следует обновить для ожидания того, что в некоторых случаях, когда ранее API возвращал исключение, в возвращаемой строке могут отсутствовать некоторые данные сертификата (например, открытый ключ, закрытый ключ и расширения).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.

nameName ЗначениеValue
ОбластьScope Пограничный случайEdge
VersionVersion 4.64.6
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

ДанныеData

Попытка подключения TCP/IP к базе данных SQL Server, которая сопоставляется с localhost, завершается ошибкойAttempting a TCP/IP connection to a SQL Server database that resolves to localhost fails

ПодробнееDetails

В .NET Framework 4.6 и 4.6.1 попытка подключения TCP/IP к базе данных SQL Server, которая сопоставляется с localhost, завершается ошибкой: "При установлении подключения к SQL Server произошла ошибка сети или ошибка экземпляра.In the .NET Framework 4.6 and 4.6.1, attempting a TCP/IP connection to a SQL Server database that resolves to localhost fails with the error, "A network-related or instance-specific error occurred while establishing a connection to SQL Server. Сервер не найден или недоступен.The server was not found or was not accessible. Проверьте правильность имени экземпляра и настройку сервера SQL Server для удаленных подключений.Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (поставщик: сетевые интерфейсы SQL, ошибка: 26 — ошибка при обнаружении указанного сервера или экземпляра)"(provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)"

ПредложениеSuggestion

Эта проблема устранена, и восстановлено прежнее поведение в .NET Framework 4.6.2.This issue has been addressed and the previous behavior restored in the .NET Framework 4.6.2. Для подключения к базе данных SQL Server, которой сопоставляется localhost, выполните обновление до .NET Framework 4.6.2.To connect to a SQL Server database that resolves to localhost, upgrade to the .NET Framework 4.6.2.

nameName ЗначениеValue
ОбластьScope Дополнительный номерMinor
VersionVersion 4.64.6
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Невозможно обнаружить с помощью анализа API.Not detectable via API analysis.

SqlConnection.Open завершается ошибкой в Windows 7 при наличии базовых поставщиков услуг или многоуровневых поставщиков услуг Winsock, не относящихся к IFSSqlConnection.Open fails on Windows 7 with non-IFS Winsock BSP or LSP present

ПодробнееDetails

Open() и OpenAsync(CancellationToken) завершаются сбоем в .NET Framework 4.5 в Windows 7 при наличии на компьютере базовых поставщиков услуг или многоуровневых поставщиков услуг Winsock, не относящихся к IFS. Чтобы определить, установлен ли базовый или многоуровневый поставщик услуг, не относящийся к IFS, выполните команду netsh WinSock Show Catalog и проверьте все возвращаемые ей элементы Winsock Catalog Provider Entry.Open() and OpenAsync(CancellationToken) fail in the .NET Framework 4.5 if running on a Windows 7 machine with a non-IFS Winsock BSP or LSP are present on the computer.To determine whether a non-IFS BSP or LSP is installed, use the netsh WinSock Show Catalog command, and examine every Winsock Catalog Provider Entry item that is returned. Если в качестве значения флагов службы задано 0x20000 бит, поставщик использует маркеры IFS и будет работать правильно.If the Service Flags value has the 0x20000 bit set, the provider uses IFS handles and will work correctly. Если флаг 0x20000 бит снят (значение не задано), это поставщик BSP или LSP, не относящийся к IFS.If the 0x20000 bit is clear (not set), it is a non-IFS BSP or LSP.

ПредложениеSuggestion

Это ошибка исправлена в .NET Framework 4.5.2, поэтому ее можно избежать путем обновления .NET Framework.This bug has been fixed in the .NET Framework 4.5.2, so it can be avoided by upgrading the .NET Framework. Кроме того, ее можно избежать, удалив все установленные поставщики LSP Winsock, не относящиеся к IFS.Alternatively, it can be avoided by removing any installed non-IFS Winsock LSPs.

nameName ЗначениеValue
ОбластьScope Дополнительный номерMinor
VersionVersion 4.54.5
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

ОтладчикDebugger

Значения NULL операции объединения отображаются в отладчике с запаздыванием на один шагNull coalescer values are not visible in debugger until one step later

ПодробнееDetails

Из-за ошибки в .NET Framework 4.5 значения, заданные с использованием операции объединения NULL, не отображаются в отладчике немедленно после выполнения операции присваивания в 64-разрядной версии платформы.A bug in the .NET Framework 4.5 causes values set via a null coalescing operation to not be visible in the debugger immediately after the assignment operation is executed when running on the 64-bit version of the Framework.

ПредложениеSuggestion

После выполнения одного дополнительного шага в отладчике локальные значения или значения поля корректно обновляются.Stepping one additional time in the debugger will cause the local/field's value to be correctly updated. Эта проблема также была устранена в .NET Framework 4.6 и может быть решена путем обновления до этой версии платформы.Also, this issue has been fixed in the .NET Framework 4.6; upgrading to that version of the Framework should solve the issue.

nameName ЗначениеValue
ОбластьScope Пограничный случайEdge
VersionVersion 4.54.5
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Невозможно обнаружить с помощью анализа API.Not detectable via API analysis.

Entity FrameworkEntity Framework

EF более не создает исключения для представлений QueryView с определенными характеристикамиEF no longer throws for QueryViews with specific characteristics

ПодробнееDetails

Entity Framework больше не создает исключение System.StackOverflowException, если приложение выполняет запрос, включающий представление QueryView со свойством навигации 0..1, которое пытается включить связанные объекты в запрос.Entity Framework no longer throws a System.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. Например, это могло быть сделано путем вызова .Include(e => e.RelatedNavProp).For example, by calling .Include(e => e.RelatedNavProp).

ПредложениеSuggestion

Это изменение влияет только на код, использующий представления QueryView с отношениями 1-0..1 при выполнении запросов, вызывающих метод .Include.This change only affects code that uses QueryViews with 1-0..1 relationships when running queries that call .Include. Эта функция повышает надежность и должна быть прозрачна почти для всех приложений.It improves reliability and should be transparent to almost all apps. Тем не менее, если она вызывает непредвиденное поведение, ее можно отключить, добавив следующую запись в раздел <appSettings> файла конфигурации приложения: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" />

nameName ЗначениеValue
ОбластьScope Пограничный случайEdge
VersionVersion 4.5.24.5.2
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Невозможно обнаружить с помощью анализа API.Not detectable via API analysis.

Согласие на прерывание для возврата от генерируемого в версии 4.5 кода SQL к более простому коду, генерируемому в версии 4.0Opt-in break to revert from different 4.5 SQL generation to simpler 4.0 SQL generation

ПодробнееDetails

Запросы, создающие операторы JOIN и содержащие вызов к операции ограничения без предварительного использования OrderBy, теперь создают более простой код SQL.Queries that produce JOIN statements and contain a call to a limiting operation without first using OrderBy now produce simpler SQL. После обновления до .NET Framework 4.5 эти запросы создают более сложный код SQL, чем предыдущие версии.After upgrading to .NET Framework 4.5, these queries produced more complicated SQL than previous versions.

ПредложениеSuggestion

Эта функция отключена по умолчанию.This feature is disabled by default. Если Entity Framework создает лишние операторы JOIN, что ведет к ухудшению производительности, можно включить эту функцию, добавив следующую запись в раздел <appSettings> файла конфигурации приложения (app.config):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" />

nameName ЗначениеValue
ОбластьScope ПрозрачныйTransparent
VersionVersion 4.5.24.5.2
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Невозможно обнаружить с помощью анализа API.Not detectable via API analysis.

СетиNetworking

ContentDisposition DateTime возвращает немного другую строкуContentDisposition DateTimes returns slightly different string

ПодробнееDetails

Строковые представления System.Net.Mime.ContentDisposition были обновлены, начиная с версии 4.6, чтобы всегда представлять компонент часа System.DateTime с использованием двух цифр.String representations of System.Net.Mime.ContentDisposition's have been updated, beginning in 4.6, to always represent the hour component of a System.DateTime with two digits. Это сделано в соответствии с RFC822 и RFC2822.This is to comply with RFC822 and RFC2822. В результате ToString() возвращает немного другую строку в 4.6 в сценариях, где один из элементов времени расположения имел значение, предшествующее 10:00.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. Обратите внимание, что ContentDispositions иногда сериализуются посредством преобразования в строки, поэтому следует проверить все операции ToString(), сериализации или вызовы GetHashCode.Note that ContentDispositions are sometimes serialized via converting them to strings, so any ToString() operations, serialization, or GetHashCode calls should be reviewed.

ПредложениеSuggestion

Не ожидается, что строковые представления ContentDispositions из разных версий .NET Framework будут правильно сравниваться друг с другом.Do not expect that string representations of ContentDispositions from different .NET Framework versions will correctly compare to one another. Если возможно, перед сравнением преобразуйте строки обратно в ContentDispositions.Convert the strings back to ContentDispositions, if possible, before conducting a comparison.

nameName ЗначениеValue
ОбластьScope Дополнительный номерMinor
VersionVersion 4.64.6
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

СериализацияSerialization

Изменилось сообщение об исключении для неудавшейся сериализации DataContract в случае неизвестного типаException message has changed for failed DataContract serialization in case of an unknown type

ПодробнееDetails

Начиная с .NET Framework 4.6 уточнено сообщение об исключении, отображающееся в случае, если System.Runtime.Serialization.DataContractSerializer или System.Runtime.Serialization.Json.DataContractJsonSerializer не может выполнить сериализацию или десериализацию из-за отсутствия "известных типов".Beginning in the .NET Framework 4.6, the exception message given if a System.Runtime.Serialization.DataContractSerializer or System.Runtime.Serialization.Json.DataContractJsonSerializer fails to serialize or deserialize due to missing 'known types' has been clarified.

ПредложениеSuggestion

Приложения не должны зависеть от конкретных сообщений об исключениях.Apps should not depend on specific exception messages. Если приложение зависит от этого сообщения, обновите его, чтобы оно ожидало новое сообщение, или (предпочтительно) измените его, чтобы оно зависело только от типа исключения.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.

nameName ЗначениеValue
ОбластьScope Пограничный случайEdge
VersionVersion 4.64.6
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Установка и развертываниеSetup and Deployment

Изменения в управлении версиями продукта в .NET Framework 4.6 и более поздних версияхProduct versioning changes in the .NET Framework 4.6 and later versions

ПодробнееDetails

Управление версиями продукта отличается от реализованного в предыдущих версиях платформы .NET Framework, в особенности начиная с .NET Framework 4, 4.5, 4.5.1 и 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. Ниже приведено подробное описание изменений.The following are the detailed changes:

  • Значение записи Version в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full изменилось на 4.6.xxxxx в .NET Framework 4.6 и ее доработанных версиях и на 4.7.xxxxx в .NET Framework 4.7 и 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. В .NET Framework 4.5, 4.5.1 и 4.5.2 использовался формат 4.5.xxxxx.In the .NET Framework 4.5, 4.5.1, and 4.5.2, it had the format 4.5.xxxxx.
  • Управление версиями файлов и продукта для файлов .NET Framework было изменено с более ранней схемы управления версиями 4.0.30319.x на 4.6.X.0 для .NET Framework 4.6 и ее доработанных выпусков, а также на 4.7.X.0 для .NET Framework 4.7 и 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. Вы можете увидеть эти новые значения в свойствах файла, щелкнув файл правой кнопкой мыши.You can see these new values when you view the file's Properties after right-clicking on a file.
  • Атрибуты AssemblyFileVersionAttribute и AssemblyInformationalVersionAttribute для управляемых сборок имеют значения версий в виде 4.6.X.0 на платформе .NET Framework 4.6 и в ее доработанных выпусках или 4.7.X.0 на платформе .NET Framework 4.7 и 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.
  • В .NET Framework 4.6, 4.6.1, 4.6.2, 4.7 и 4.7.1 свойство Environment.Version возвращает исправленную строку версии 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. В .NET Framework 4, 4.5, 4.5.1 и 4.5.2 оно возвращает строки версии в формате 4.0.30319.xxxxx (например, "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"). Обратите внимание, что создание новых зависимостей кода приложения от свойства Environment.Version не рекомендуется.Note that we do not recommend application code taking any new dependency on the Environment.Version property.
Дополнительные сведения см. в разделе Практическое руководство. Определение установленных версий платформы .NET Framework.For more information, see How to: Determine which .NET Framework Versions Are Installed.

ПредложениеSuggestion

В общем случае приложения для обнаружения таких сведений, как версия среды выполнения .NET Framework и каталог установки, должны использовать следующие рекомендуемые методы: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] Имя подраздела — NET Framework Setup, а не .NET Framework Setup.The subkey name is NET Framework Setup, not .NET Framework Setup.
  • Чтобы определить путь к каталогу общеязыковой среды выполнения .NET Framework, вызовите метод RuntimeEnvironment.GetRuntimeDirectory().To determine the directory path to the .NET Framework common language runtime, call the RuntimeEnvironment.GetRuntimeDirectory() method.
  • Чтобы получить версию среды CLR, вызовите метод RuntimeEnvironment.GetSystemVersion().To get the CLR version, call the RuntimeEnvironment.GetSystemVersion() method. Для .NET Framework 4 и ее доработанных выпусков (.NET Framework 4.5, 4.5.1, 4.5.2 и .NET Framework 4.6. 4.6.1, 4.6.2, 4.7 и 4.7.1) возвращается строка 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.

nameName ЗначениеValue
ОбластьScope Дополнительный номерMinor
VersionVersion 4.64.6
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Невозможно обнаружить с помощью анализа API.Not detectable via API analysis.

.NET Framework 4.6 не использует версию 4.5.x.x для собственной регистрации в реестреThe .NET Framework 4.6 does not use a 4.5.x.x version when registering itself in the registry

ПодробнееDetails

Ключ версии, установленный в реестре (HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full) для платформы .NET Framework 4.6, ожидаемо начинается с "4.6", а не с "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'. Приложения, которые используют эти разделы реестра для определения установленных на компьютере версий .NET Framework, следует обновить таким образом, чтобы понимать, что 4.6 — это новая возможная версия, совместимая с предыдущими выпусками 4.5.x.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.

ПредложениеSuggestion

Обновите приложения, проверяющие установку версию .NET Framework 4.5 в соответствующих разделах реестра, так, чтобы они принимали версию 4.6.Update apps probing for a .NET Framework 4.5 install by looking for 4.5 registry keys to also accept 4.6.

nameName ЗначениеValue
ОбластьScope Пограничный случайEdge
VersionVersion 4.64.6
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Невозможно обнаружить с помощью анализа API.Not detectable via API analysis.

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

Службы WCF, использующие NETTCP с уровнем безопасности SSL и проверкой подлинности на основе сертификатов MD5WCF services that use NETTCP with SSL security and MD5 certificate authentication

ПодробнееDetails

В платформе .NET Framework 4.6 в список протоколов WCF SSL по умолчанию добавляются протоколы TLS 1.1 и TLS 1.2.The .NET Framework 4.6 adds TLS 1.1 and TLS 1.2 to the WCF SSL default protocol list. Если на клиентском компьютере и на сервере установлена платформа .NET Framework 4.6 или более поздняя версия, для согласования используется протокол TLS 1.2. Протокол TLS 1.2 не поддерживает проверку подлинности на основе сертификатов 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. Поэтому, если используется сертификат MD5, клиент WCF не сможет подключиться к службе WCF.As a result, if a customer uses an MD5 certificate, the WCF client will fail to connect to the WCF service.

ПредложениеSuggestion

Эту проблему можно решить, чтобы клиент WCF мог подключиться к серверу WCF, выполнив любое из следующих действий.You can work around this issue so that a WCF client can connect to a WCF server by doing any of the following:

  • Обновите сертификат, чтобы он не использовал алгоритм MD5.Update the certificate to not use the MD5 algorithm. Это рекомендуемое решение.This is the recommended solution.
  • Если привязка не настроена динамически в исходном коде, обновите файл конфигурации приложения, чтобы использовать TLS 1.1 или более раннюю версию протокола.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. Это позволяет продолжать использовать сертификат с хэш-алгоритмом MD5.This allows you to continue to use a certificate with the MD5 hash algorithm.

Предупреждение

Это решение не рекомендуется, поскольку сертификат с хэш-алгоритмом MD5 считается небезопасным.This workaround is not recommended, since a certificate with the MD5 hash algorithm is considered insecure.

Это выполняется в следующем файле конфигурации: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>
  • Если привязка настроена в исходном коде динамически, настройте свойство TcpTransportSecurity.SslProtocols на использование TLS 1.1 (SslProtocols.Tls11) или более ранней версии протокола в исходном коде.If the binding is dynamically configured in source code, update the TcpTransportSecurity.SslProtocols property to use TLS 1.1 (SslProtocols.Tls11 or an earlier version of the protocol in the source code.

Предупреждение

Это решение не рекомендуется, поскольку сертификат с хэш-алгоритмом MD5 считается небезопасным.This workaround is not recommended, since a certificate with the MD5 hash algorithm is considered insecure.

nameName ЗначениеValue
ОбластьScope Дополнительный номерMinor
VersionVersion 4.64.6
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Невозможно обнаружить с помощью анализа API.Not detectable via API analysis.

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

Доступ к выделенным элементам DataGrid WPF из события UnloadingRow DataGrid может привести к исключению NullReferenceExceptionAccessing a WPF DataGrid's selected items from a handler of the DataGrid's UnloadingRow event can cause a NullReferenceException

ПодробнееDetails

Из-за ошибки в .NET Framework 4.5 обработчики событий DataGrid, которые выполняют удаление строки, могут привести к созданию исключения System.NullReferenceException при попытке получить доступ к свойствам System.Windows.Controls.Primitives.Selector.SelectedItem или System.Windows.Controls.Primitives.MultiSelector.SelectedItemsDataGrid.Due to a bug in the .NET Framework 4.5, event handlers for DataGrid events involving the removal of a row can cause a System.NullReferenceException to be thrown if they access the DataGrid's System.Windows.Controls.Primitives.Selector.SelectedItem or System.Windows.Controls.Primitives.MultiSelector.SelectedItems properties.

ПредложениеSuggestion

Эта проблема была устранена в .NET Framework 4.6 и может быть решена путем обновления до этой версии платформы .NET Framework.This issue has been fixed in the .NET Framework 4.6 and may be addressed by upgrading to that version of the .NET Framework.

nameName ЗначениеValue
ОбластьScope Дополнительный номерMinor
VersionVersion 4.54.5
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Вызов метода DataGrid.CommitEdit из обработчика CellEditEnding удаляет фокусCalling DataGrid.CommitEdit from a CellEditEnding handler drops focus

ПодробнееDetails

Вызов метода CommitEdit() из одного из обработчиков событий System.Windows.Controls.DataGridSystem.Windows.Controls.DataGrid.CellEditEnding приводит к потере фокуса для System.Windows.Controls.DataGrid.Calling CommitEdit() from one of the System.Windows.Controls.DataGrid's System.Windows.Controls.DataGrid.CellEditEnding event handlers causes the System.Windows.Controls.DataGrid to lose focus.

ПредложениеSuggestion

Это ошибка исправлена в .NET Framework 4.5.2, поэтому ее можно избежать путем обновления .NET Framework.This bug has been fixed in the .NET Framework 4.5.2, so it can be avoided by upgrading the .NET Framework. Кроме того, ее можно избежать, явным образом повторно выбрав System.Windows.Controls.DataGrid после вызова System.Windows.Controls.DataGrid.CommitEdit().Alternatively, it can be avoided by explicitly re-selecting the System.Windows.Controls.DataGrid after calling System.Windows.Controls.DataGrid.CommitEdit().

nameName ЗначениеValue
ОбластьScope Пограничный случайEdge
VersionVersion 4.54.5
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Вызов Items.Refresh для ListBox, ListView или DataGrid в WPF с выбранным элементом может привести к появлению в элементе повторяющихся записейCalling Items.Refresh on a WPF ListBox, ListView, or DataGrid with items selected can cause duplicate items to appear in the element

ПодробнееDetails

В .NET Framework 4.5 вызов ListBox.Items.Refresh из кода, когда элементы выбраны в System.Windows.Controls.ListBox, может привести к дублированию выбранных элементов в списке.In the .NET Framework 4.5, calling ListBox.Items.Refresh from code while items are selected in a System.Windows.Controls.ListBox can cause the selected items to be duplicated in the list. Аналогичная проблема возникает с System.Windows.Controls.ListView и System.Windows.Controls.DataGrid.A similar issue occurs with System.Windows.Controls.ListView and System.Windows.Controls.DataGrid. Эта проблема устранена в EntityFramework 4.6.This is fixed in the .NET Framework 4.6.

ПредложениеSuggestion

Эту проблему можно решить с помощью программных средств, отменив выбор элементов до вызова метода System.Windows.Data.CollectionView.Refresh() и затем повторно выбрав их после завершения вызова.This issue may be worked around by programmatically unselecting items before System.Windows.Data.CollectionView.Refresh() is called and then re-selecting them after the call is completed. Кроме того, эта проблема была устранена в .NET Framework 4.6 и может быть решена путем обновления до этой версии платформы .NET Framework.Alternatively, this issue has been fixed in the .NET Framework 4.6 and may be addressed by upgrading to that version of the .NET Framework.

nameName ЗначениеValue
ОбластьScope Дополнительный номерMinor
VersionVersion 4.54.5
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

CoerceIsSelectionBoxHighlightedCoerceIsSelectionBoxHighlighted

ПодробнееDetails

Некоторые последовательности действий, в которых используются System.Windows.Controls.ComboBox и соответствующий источник данных, могут привести к исключению System.NullReferenceException.Certain sequences of actions involving a System.Windows.Controls.ComboBox and its data source can result in a System.NullReferenceException.

ПредложениеSuggestion

По возможности выполните обновление до .NET Framework 4.6.2.If possible, upgrade to .NET Framework 4.6.2.

nameName ЗначениеValue
ОбластьScope Дополнительный номерMinor
VersionVersion 4.64.6
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Периодически не удается выполнить прокрутку до нижнего элемента в ItemsControls (таких как ListBox и DataGrid) при использовании пользовательских DataTemplatesIntermittently unable to scroll to bottom item in ItemsControls (like ListBox and DataGrid) when using custom DataTemplates

ПодробнееDetails

В некоторых случаях ошибка в .NET Framework 4.5 приводит к тому, что ItemsControls (например, System.Windows.Controls.ListBox, System.Windows.Controls.ComboBox, System.Windows.Controls.DataGrid и т. д.) не удается выполнить прокрутку до нижнего элемента при использовании пользовательских DataTemplates.In some instances, a bug in the .NET Framework 4.5 is causing ItemsControls (like System.Windows.Controls.ListBox, System.Windows.Controls.ComboBox, System.Windows.Controls.DataGrid, etc.) to not scroll to their bottom item when using custom DataTemplates. Если попытка прокрутки предпринимается повторно (после прокрутки вверх), прокрутка будет работать.If the scrolling is attempted a second time (after scrolling back up), it will work then.

ПредложениеSuggestion

Эта проблема была устранена в .NET Framework 4.5.2 и может быть решена путем обновления до этой версии (или более поздней) платформы .NET Framework.This issue has been fixed in the .NET Framework 4.5.2 and may be addressed by upgrading to that version (or a later version) of the .NET Framework. Кроме того, пользователи по-прежнему могут перетаскивать полосы прокрутки к последним элементам в этих коллекциях, однако для успешного выполнения этой задачи это может потребоваться сделать дважды.Alternatively, users can still drag scroll bars to the final items in these collections, but may need to try twice to do so successfully.

nameName ЗначениеValue
ОбластьScope Дополнительный номерMinor
VersionVersion 4.54.5
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Невозможно обнаружить с помощью анализа API.Not detectable via API analysis.

Проблема с привязкой ListBoxItem IsSelected к ObservableCollection<T>.MoveListBoxItem IsSelected binding issue with ObservableCollection<T>.Move

ПодробнееDetails

Вызов Move(Int32, Int32) или MoveItem(Int32, Int32) для коллекции, привязанной к System.Windows.Controls.ListBox с выделенными элементами, может привести к последующему выделению или отмене выделения элементов System.Windows.Controls.ListBox.Calling Move(Int32, Int32) or MoveItem(Int32, Int32) on a collection bound to a System.Windows.Controls.ListBox with items selected can lead to erratic behavior with future selection or unselection of System.Windows.Controls.ListBox items.

ПредложениеSuggestion

Чтобы обойти эту проблему, выполните вызов System.Collections.ObjectModel.Collection<T>.Remove(T) и System.Collections.ObjectModel.Collection<T>.Insert(Int32, T) вместо Move(Int32, Int32).Calling System.Collections.ObjectModel.Collection<T>.Remove(T) and System.Collections.ObjectModel.Collection<T>.Insert(Int32, T) instead of Move(Int32, Int32) will work around this issue. Кроме того, эта проблема была устранена в .NET Framework 4.6 и может быть решена путем обновления до этой версии платформы .NET Framework.Alternatively, this issue has been fixed in the .NET Framework 4.6 and may be addressed by upgrading to that version of the .NET Framework.

nameName ЗначениеValue
ОбластьScope Дополнительный номерMinor
VersionVersion 4.54.5
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

При щелчке правой кнопкой мыши на заголовке строки WPF DataGrid изменяется выделение DataGridRight clicking on a WPF DataGrid row header changes the DataGrid selection

ПодробнееDetails

Если щелкнуть правой кнопкой мыши выделенный заголовок строки System.Windows.Controls.DataGrid при наличии нескольких выделенных строк, выделение System.Windows.Controls.DataGrid изменится таким образом, что будет выделена только эта строка.Right-clicking a selected System.Windows.Controls.DataGrid row header while multiple rows are selected results in the System.Windows.Controls.DataGrid's selection changing to only that row.

ПредложениеSuggestion

Эта проблема была устранена в .NET Framework 4.6 и может быть решена путем обновления до этой версии платформы .NET Framework.This issue has been fixed in the .NET Framework 4.6 and may be addressed by upgrading to that version of the .NET Framework.

nameName ЗначениеValue
ОбластьScope Пограничный случайEdge
VersionVersion 4.54.5
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Проверка орфографии WPF в элементах управления с поддержкой текста не будет работать в Windows 10 для языков, не указанных в списке языков ввода ОСWPF spell checking in text-enabled controls will not work in Windows 10 for languages not in the OS's input language list

ПодробнееDetails

В Windows 10 средство проверки орфографии может не работать для элементов управления WPF с поддержкой текста, поскольку возможности проверки орфографии платформы доступны только для языков из списка языков ввода. В Windows 10 при добавлении языка в список доступных клавиатур Windows автоматически загружает и устанавливает соответствующий пакет компонента по запросу (FOD), который предоставляет возможности проверки орфографии.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. При добавлении языка в список языков ввода проверка орфографии будет поддерживаться.By adding the language to the input languages list, the spell checker will be supported.

ПредложениеSuggestion

Имейте в виду, что язык или текст, проверка которого выполняется, следует добавить как язык ввода, чтобы функция проверки орфографии работала в 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.

nameName ЗначениеValue
ОбластьScope Пограничный случайEdge
VersionVersion 4.64.6
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Невозможно обнаружить с помощью анализа API.Not detectable via API analysis.

Окна WPF отображаются без обрезки, если изображение выходит за пределы одного монитораWPF windows are rendered without clipping when extending outside a single monitor

ПодробнееDetails

В .NET Framework 4.6 на компьютере под управлением Windows 8 и более поздних версий все содержимое окна выводится без обрезки, если изображение выходит за пределы одного экрана при использовании нескольких мониторов.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. Это отличается от предыдущих версий .NET Framework, где окна WPF обрезались, если выходили за пределы одного экрана.This is different from previous versions of the .NET Framework which would clip WPF windows that extended beyond a single display.

ПредложениеSuggestion

Это поведение (отсутствие или наличие обрезки) можно задать явным образом с помощью элемента <EnableMultiMonitorDisplayClipping> в <appSettings> в файле конфигурации приложения или задав свойство EnableMultiMonitorDisplayClipping при запуске приложения.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.

nameName ЗначениеValue
ОбластьScope Дополнительный номерMinor
VersionVersion 4.64.6
TypeType Среда выполненияRuntime

Затронутые APIAffected APIs

Невозможно обнаружить с помощью анализа API.Not detectable via API analysis.

XMLXML

Изменения синтаксического анализа языка XMLXML parsing changes

ИмяName ЗначениеValue
ОбластьScope Дополнительный номерMinor
VersionVersion 4.5.24.5.2
TypeType Среда выполненияRuntime

СведенияDetails

По соображениям безопасности в API синтаксического анализа языка XML были внесены следующие изменения.For security reasons, the following changes were introduced into XML parsing APIS:

Примечание

XmlReaderSettings используется всеми средствами синтаксического анализа XML, поэтому хотя это изменение помогает в случае XmlReader, оно также влияет на другие сценарии.XmlReaderSettings is used by all XML parsers, so while this change helps the XmlReader case, it also affects other scenarios.

ПредложениеSuggestion

Чтобы вернуться к предыдущему поведению, можно задать значение в реестре.To revert to the previous behavior, you can set a value in the registry. Добавьте значение DWORD с именем EnableLegacyXmlSettings в раздел реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\XML и задайте для него значение 1.Add a DWORD value named EnableLegacyXmlSettings to the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\XML registry key, and set its value to 1. Вместо этого можно также добавить значение реестра в куст HKEY_CURRENT_USER.You can also add the registry value in the HKEY_CURRENT_USER hive instead.

Затронутые APIAffected APIs

Затрагиваются также все API XML, которые прямо или косвенно зависят от XmlResolver.In addition, any XML API that depends on XmlResolver, either directly or indirectly, is affected.