Изменение среды выполнения для миграции с .NET Framework 4.5.1 на 4.6Runtime Changes for Migration from .NET Framework 4.5.1 to 4.6
- (4.0 | 4.5)
- (4.0 | 4.5.1)
- (4.0 | 4.5.2)
- (4.0 | 4.6)
- (4.0 | 4.6.1)
- (4.0 | 4.6.2)
- (4.0 | 4.7)
- (4.0 | 4.7.1)
- (4.0 | 4.7.2)
- (4.0 | 4.8)
- (4.5 | 4.5.1)
- (4.5 | 4.5.2)
- (4.5 | 4.6)
- (4.5 | 4.6.1)
- (4.5 | 4.6.2)
- (4.5 | 4.7)
- (4.5 | 4.7.1)
- (4.5 | 4.7.2)
- (4.5 | 4.8)
- (4.5.1 | 4.5.2)
- (4.5.1 | 4.6)
- (4.5.1 | 4.6.1)
- (4.5.1 | 4.6.2)
- (4.5.1 | 4.7)
- (4.5.1 | 4.7.1)
- (4.5.1 | 4.7.2)
- (4.5.1 | 4.8)
- (4.5.2 | 4.6)
- (4.5.2 | 4.6.1)
- (4.5.2 | 4.6.2)
- (4.5.2 | 4.7)
- (4.5.2 | 4.7.1)
- (4.5.2 | 4.7.2)
- (4.5.2 | 4.8)
- (4.6 | 4.6.1)
- (4.6 | 4.6.2)
- (4.6 | 4.7)
- (4.6 | 4.7.1)
- (4.6 | 4.7.2)
- (4.6 | 4.8)
- (4.6.1 | 4.6.2)
- (4.6.1 | 4.7)
- (4.6.1 | 4.7.1)
- (4.6.1 | 4.7.2)
- (4.6.1 | 4.8)
- (4.6.2 | 4.7)
- (4.6.2 | 4.7.1)
- (4.6.2 | 4.7.2)
- (4.6.2 | 4.8)
- (4.7 | 4.7.1)
- (4.7 | 4.7.2)
- (4.7 | 4.8)
- (4.7.1 | 4.7.2)
- (4.7.1 | 4.8)
- (4.7.2 | 4.8)
Если выполняется миграция с .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
- Attribute.GetCustomAttribute(MemberInfo, Type)
- Attribute.GetCustomAttribute(MemberInfo, Type, Boolean)
- Attribute.GetCustomAttributes(MemberInfo)
- Attribute.GetCustomAttributes(MemberInfo, Boolean)
- Attribute.GetCustomAttributes(MemberInfo, Type)
- Attribute.GetCustomAttributes(MemberInfo, Type, Boolean)
- CustomAttributeExtensions.GetCustomAttribute(MemberInfo, Type)
- CustomAttributeExtensions.GetCustomAttribute(MemberInfo, Type, Boolean)
- CustomAttributeExtensions.GetCustomAttribute<T>(MemberInfo)
- CustomAttributeExtensions.GetCustomAttribute<T>(MemberInfo, Boolean)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo, Boolean)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo, Type)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo, Type, Boolean)
- CustomAttributeExtensions.GetCustomAttributes<T>(MemberInfo)
- CustomAttributeExtensions.GetCustomAttributes<T>(MemberInfo, Boolean)
Профилировщики не перечисляют 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:
- System.Reflection.Assembly
- System.Reflection.MemberInfo (и его производные типы, включая System.Reflection.FieldInfo, System.Reflection.MethodInfo, System.Type и System.Reflection.TypeInfo)System.Reflection.MemberInfo (and its derived types, including System.Reflection.FieldInfo, System.Reflection.MethodInfo, System.Type, and System.Reflection.TypeInfo)
- System.Reflection.MethodBody
- System.Reflection.Module
- System.Reflection.ParameterInfo
Вызовы 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
- System.Reflection.Assembly
- System.Reflection.FieldInfo
- System.Reflection.MemberInfo
- System.Reflection.MethodBody
- System.Reflection.MethodInfo
- System.Reflection.Module
- System.Reflection.ParameterInfo
- System.Reflection.TypeInfo
- System.Type
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
- DataContractJsonSerializer(Type)
- DataContractJsonSerializer(Type, IEnumerable<Type>)
- DataContractJsonSerializer(Type, DataContractJsonSerializerSettings)
- DataContractJsonSerializer(Type, String)
- DataContractJsonSerializer(Type, String, IEnumerable<Type>)
- DataContractJsonSerializer(Type, XmlDictionaryString)
- DataContractJsonSerializer(Type, XmlDictionaryString, IEnumerable<Type>)
- DataContractJsonSerializer(Type, IEnumerable<Type>, Int32, Boolean, IDataContractSurrogate, Boolean)
- DataContractJsonSerializer(Type, String, IEnumerable<Type>, Int32, Boolean, IDataContractSurrogate, Boolean)
- DataContractJsonSerializer(Type, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, IDataContractSurrogate, Boolean)
- DataContractSerializer(Type)
- DataContractSerializer(Type, DataContractSerializerSettings)
- DataContractSerializer(Type, IEnumerable<Type>)
- DataContractSerializer(Type, String, String)
- DataContractSerializer(Type, String, String, IEnumerable<Type>)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>)
- DataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)
- DataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)
- DataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)
- DataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)
Установка и развертывание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 theVersion
entry in theHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full
key has changed to4.6.xxxxx
for the .NET Framework 4.6 and its point releases, and to4.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 format4.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 string4.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 format4.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.
Предложение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:
- Чтобы определить версию среды выполнения .NET Framework, см. статью Практическое руководство. Определение установленных версий платформы .NET Framework.To detect the runtime version of the .NET Framework, see How to: Determine Which .NET Framework Versions Are Installed.
- Чтобы определить путь установки платформы .NET Framework, используйте значение записи
InstallPath
в ключеHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full
.To determine the installation path for the .NET Framework, use the value of theInstallPath
entry in theHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full
key.
[!IMPORTANT] Имя подраздела —NET Framework Setup
, а не.NET Framework Setup
.The subkey name isNET 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.MaxCharactersFromEntities устанавливается значение 10 миллионов при инициализации XmlReaderSettings.XmlReaderSettings.MaxCharactersFromEntities is set to 10 million when XmlReaderSettings is initialized.
- По умолчанию свойству XmlReaderSettings.XmlResolver присваивается значение
null
.XmlReaderSettings.XmlResolver is set tonull
by default.
Примечание
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.