Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описываются проблемы миграции между .NET Framework версии 3.5 с пакетом обновления 1 и .NET Framework версии 4, включая исправления, изменения соответствия стандартам и безопасности, а также изменения на основе отзывов клиентов. Большинство этих изменений не требуют каких-либо изменений программирования в приложениях. Для тех ситуаций, которые могут требовать изменений, см. столбец "Рекомендуемые изменения" в таблице. Важные изменения разбиваются по областям, например ASP.NET и Windows Presentation Foundation (WPF).
Общие сведения о проблемах в этой статье см. в руководстве по миграции в .NET Framework 4.
Дополнительные сведения о новых функциях см. в статье "Новые возможности" в .NET Framework 4.
ASP.NET и Интернет
Пространства имен: System.Web, System.Web.Mobile, System.Web.Security, System.Web.UI.WebControls
Сборка: System.Web (в System.Web.dll)
| Функция | Различия от 3.5 SP1 | Рекомендуемые изменения |
|---|---|---|
| Файлы определения браузера | Файлы определения браузера были обновлены, чтобы включить сведения о новых и обновленных браузерах и устройствах. Были удалены старые браузеры и устройства, такие как Netscape Navigator, и добавлены новые браузеры и устройства, такие как Google Chrome и Apple iPhone. Если приложение содержит пользовательские определения браузера, наследуемые от одного из определений браузера, которые были удалены, появится сообщение об ошибке. Объект HttpBrowserCapabilities (который предоставляется свойством страницы Request.Browse ), управляется файлами определения браузера. Поэтому сведения, возвращаемые путем доступа к свойству этого объекта в ASP.NET 4, могут отличаться от сведений, возвращаемых в более ранней версии ASP.NET. |
Если приложение использует старые файлы определения браузера, их можно скопировать из следующей папки: Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers Скопируйте файлы в соответствующую папку \CONFIG\Browsers для ASP.NET 4. После копирования файлов запустите программу командной строки Aspnet_regbrowsers.exe . Дополнительные сведения см. на https://www.asp.net/mobile веб-сайте. |
| Дочерние приложения, работающие в смешанных версиях ASP.NET | ASP.NET 4 приложения, настроенные как дочерние приложения, запускающие более ранние версии ASP.NET, могут не запускаться из-за ошибок конфигурации или компиляции. Определенная ошибка зависит от того, работает ли приложение в IIS 6.0 или в IIS 7 или IIS 7.5. | Вы можете внести изменения в файлы конфигурации затронутых приложений, чтобы система конфигурации правильно распознала приложение ASP.NET 4. Сведения об изменениях, которые необходимо внести, см. в разделе "Дочерние приложения ASP.NET 4 не удаётся запустить, если находятся под управлением приложений ASP.NET 2.0 или ASP.NET 3.5" в документе Критические изменения ASP.NET 4 на веб-сайте ASP.NET. |
| Изменения ClientID | Новый clientIDMode параметр в ASP.NET 4 позволяет указать, как ASP.NET создает id атрибут для ЭЛЕМЕНТОВ HTML. В предыдущих версиях ASP.NET поведение по умолчанию эквивалентно параметру AutoIDclientIDMode. Теперь параметр Predictableпо умолчанию. Дополнительные сведения см. в разделе Идентификация веб-серверных элементов управления ASP.NET. |
Если вы используете Visual Studio для обновления приложения с ASP.NET 2.0 или ASP.NET 3.5, средство автоматически добавляет параметр в файл Web.config, который сохраняет поведение предыдущих версий .NET Framework. Однако при обновлении приложения путем изменения пула приложений в IIS на целевую платформу .NET Framework 4 ASP.NET использует новый режим по умолчанию. Чтобы отключить новый режим идентификатора клиента, добавьте следующий параметр в файл Web.config:<pages clientIDMode="AutoID" /> |
| Безопасность доступа к коду (CAS) | ASP.NET функции 2.0 NET, добавленные в ASP.NET 3.5, используют модель безопасности доступа к коду .NET Framework 1.1 и .NET Framework 2.0. Однако реализация CAS в ASP.NET 4 была существенно изменена. В результате ASP.NET приложения с частичным доверием, зависящие от доверенного кода, который запускается в глобальном кэше сборок, могут завершиться сбоем из-за различных исключений безопасности. Приложения с частичным доверием, основанные на обширных изменениях политики CAS компьютера, также могут завершаться ошибкой и вызывать исключения безопасности. | Вы можете вернуть приложение ASP.NET 4 с частичным доверием к поведению ASP.NET 1.1 и 2.0, используя новый атрибут legacyCasModel в элементе конфигурации trust, как показано в следующем примере:<trust level= "Medium" legacyCasModel="true" />Важно: возврат к старой модели CAS может представлять снижение безопасности. Дополнительные сведения о новой модели безопасности доступа к коду ASP.NET 4 см. в разделе "Безопасность доступа к коду" в ASP.NET 4 приложениях. |
| Файлы конфигурации | Корневые файлы конфигурации (файл machine.config и корневой Web.config-файл) для .NET Framework и ASP.NET 4 были обновлены, чтобы включить большую часть сведений о конфигурации, которые были найдены в файлах приложения Web.config в ASP.NET 3.5. Из-за сложности управляемых систем конфигурации IIS 7 и IIS 7.5, выполнение приложений ASP.NET 3.5 под ASP.NET 4 и на IIS 7 и IIS 7.5 может привести к ошибкам ASP.NET или ошибкам IIS. | Обновление ASP.NET приложений версии 3.5 до ASP.NET 4 с помощью средств обновления проекта в Visual Studio. Visual Studio 2010 автоматически изменяет файл Web.config приложения ASP.NET 3.5, чтобы он содержал соответствующие параметры для ASP.NET 4. Однако можно запускать ASP.NET приложения 3.5 с помощью .NET Framework 4 без повторной компиляции. В этом случае перед запуском приложения в .NET Framework 4 и на IIS 7 или IIS 7.5 может потребоваться вручную изменить файл Web.config приложения. Конкретное изменение зависит от сочетания программного обеспечения, с которым вы работаете, включая выпуски пакета обновления (SP). Сведения о возможных сочетаниях программного обеспечения, затронутых этим изменением, и о том, как устранить проблемы с определенными сочетаниями, см. в разделе "Ошибки конфигурации, связанные с новой ASP.NET 4 корневой конфигурации" в документе ASP.NET 4 критические изменения на веб-сайте ASP.NET. |
| Визуализация элементов управления | В предыдущих версиях ASP.NET некоторые элементы управления выдали разметку, которую не удалось отключить. По умолчанию этот тип разметки больше не создается в ASP.NET 4. Изменения отрисовки влияют на следующие элементы управления: * Элементы управления Image и ImageButton больше не отображают атрибут border="0".* Класс BaseValidator и элементы управления проверки, производные от него, больше не отображают красный текст по умолчанию.* Элемент управления HtmlForm не выводит параметр name.* Элемент управления Table больше не отображает атрибут border="0".Элементы управления, не предназначенные для ввода пользователем (например, Label элемент управления) больше не отображают disabled="disabled" атрибут, если их Enabled свойство задано false (или если они наследуют этот параметр от элемента управления контейнерами). |
Если вы используете Visual Studio для обновления приложения с ASP.NET 2.0 или ASP.NET 3.5, средство автоматически добавляет параметр в файл Web.config, который сохраняет устаревшую отрисовку. Однако при обновлении приложения путем изменения пула приложений в IIS на целевую платформу .NET Framework 4 ASP.NET по умолчанию используется новый режим отрисовки. Чтобы отключить новый режим отрисовки, добавьте следующий параметр в файл Web.config:<pages controlRenderingCompatibilityVersion="3.5" /> |
| Обработчики событий в документах по умолчанию | ASP.NET 4 отображает значение атрибута form HTML-элемента action в виде пустой строки при выполнении запроса к URL-адресу без расширения, который имеет документ по умолчанию, сопоставленный с ним. В более ранних версиях ASP.NET запрос к http://contoso.com приводил к запросу страницы Default.aspx. В этом документе откроется открывающий form тег, как показано в следующем примере:<form action="Default.aspx" />В ASP.NET 4 запрос http://contoso.com также приводит к запросу на Default.aspx, но ASP.NET теперь отображает тег открытия form HTML, как показано в следующем примере:<form action="" />action Если атрибут является пустой строкой, объект IIS DefaultDocumentModule создает дочерний запрос для Default.aspx. В большинстве случаев этот дочерний запрос не влияет на код приложения, и страница Default.aspx выполняется обычно. Однако потенциальное взаимодействие между управляемым кодом и интегрированным режимом IIS 7.5 может привести к тому, что управляемые .aspx страницы перестают работать должным образом во время дочернего запроса. Если возникают следующие условия, дочерний запрос к документу по умолчанию .aspx приведет к ошибке или непредвиденному поведению:* Страница .aspx отправляется в браузер, при этом атрибут form элемента action установлен в значение "".* Форма размещается обратно в ASP.NET. * Управляемый модуль HTTP считывает часть содержимого сущности, например Request.Form или Request.Params. Это приводит к тому, что текст сущности запроса POST будет считываться в управляемую память. В результате тело сущности больше недоступно для любых модулей исходного кода, работающих в режиме интеграции в IIS 7 или IIS 7.5.* Объект IIS DefaultDocumentModule в конечном итоге запускается и создает дочерний запрос к документу Default.aspx. Тем не менее, поскольку тело сущности уже было прочитано фрагментом управляемого кода, текст сущности недоступен для отправки дочернему запросу.* При запуске конвейера HTTP для дочернего запроса обработчик для .aspx файлов выполняется во время этапа выполнения обработчика. Так как тело сущности отсутствует, переменные формы и состояние представления отсутствуют. Поэтому для обработчика страницы .aspx нет информации, чтобы определить, какое событие (если таковой) следует вызвать. В результате ни один из обработчиков событий постбэка для затронутой .aspx страницы не выполняется. |
Сведения о способах решения проблем, которые могут возникнуть в результате этого изменения, см. в статье "Обработчики событий могут не вызываться в документе по умолчанию в режиме интеграции IIS 7 или IIS 7.5" в документе ASP.NET 4 критические изменения на веб-сайте ASP.NET. |
| Алгоритм хэширования | ASP.NET использует алгоритмы шифрования и хэширования для защиты данных, таких как файлы cookie проверки подлинности форм и состояние просмотра. По умолчанию ASP.NET 4 использует HMACSHA256 алгоритм для хэш-операций с файлами cookie и состояния просмотра. Более ранние версии ASP.NET использовали старый HMACSHA1 алгоритм. | Если вы запускаете приложения, которые смешивают ASP.NET 2.0 и ASP.NET 4, где такие данные, как файлы cookie проверки подлинности форм, должны работать в версиях .NET Framework, настройте веб-приложение ASP.NET 4, чтобы использовать старый HMACSHA1 алгоритм, добавив следующий параметр в файл Web.config:<machineKey validation="SHA1" /> |
| Управление размещением в Internet Explorer | Вы больше не можете размещать элементы управления Windows Forms в Internet Explorer, так как есть лучшие решения для размещения элементов управления в Интернете. Поэтому сборки IEHost.dll и IEExec.exe были удалены из .NET Framework. | Для разработки пользовательских элементов управления в веб-приложениях можно использовать следующие технологии: * Вы можете создать приложение Silverlight и настроить его для запуска за пределами браузера. Дополнительные сведения см. в разделе "Поддержка вне браузера". * Вы можете создать приложение браузера XAML (XBAP), чтобы воспользоваться преимуществами возможностей WPF (требуется .NET Framework на клиентских компьютерах). Для получения дополнительных сведений см. обзор приложений браузера WPF XAML. |
| Методы HtmlEncode и UrlEncode | Методы классов HtmlEncode и UrlEncode были обновлены для кодирования одинарной кавычки (') следующим образом:* Метод HtmlEncode кодирует экземпляры одной кавычки как '* Метод UrlEncode кодирует экземпляры одной кавычки как %27 |
Проверьте код для мест, где вы используете HtmlEncode и UrlEncode методы, и убедитесь, что изменение в кодировке не приводит к изменению, которое повлияет на ваше приложение. |
| Ошибки HttpException в приложениях ASP.NET 2.0 | После включения ASP.NET 4 в службах IIS 6 приложения ASP.NET 2.0, работающие на IIS 6 (на Windows Server 2003 или Windows Server 2003 R2), могут возникать ошибки, такие как: System.Web.HttpException: Path '/[yourApplicationRoot]/eurl.axd/[Value]' was not found. |
* Если для запуска веб-сайта не требуется ASP.NET 4, перенастройте сайт для использования ASP.NET 2.0. -или- * Если для запуска веб-сайта требуется ASP.NET 4, переместите все дочерние виртуальные каталоги ASP.NET 2.0 на другой веб-сайт, на котором используется ASP.NET 2.0. -или- * Отключите URL-адреса без расширения. Дополнительные сведения см. в документе "Фундаментальные изменения в ASP.NET 4", статье "Приложения ASP.NET 2.0 могут создавать ошибки HttpException, ссылающиеся на eurl.axd", на веб-сайте ASP.NET. |
| Типы членства | Некоторые типы (например, MembershipProvider), используемые в учетных записях ASP.NET, были перемещены из System.Web.dll в сборку System.Web.ApplicationServices.dll. Типы были перемещены для разрешения зависимостей архитектурного слоя между типами в клиенте и расширенных SKU .NET Framework. | Библиотеки классов, которые были обновлены с более ранних версий ASP.NET, и которые используют типы членства, которые были перемещены, могут не компилироваться при использовании в проекте ASP.NET 4. В этом случае добавьте ссылку в проект библиотеки классов к System.Web.ApplicationServices.dll. |
| Изменения в элементе управления меню |
Menu Изменения элемента управления приводят к следующему поведению: * Если для MenuRenderingMode установлено List, или если для MenuRenderingMode установлено Default и для ControlRenderingCompatibilityVersion установлено 4.0 или более позднюю версию, свойство PopOutImageUrl не действует.* Если путь, заданный в StaticPopOutImageUrl свойствах, DynamicPopOutImageUrl содержит обратную косую черту (\), изображения не отображаются. (В более ранних версиях ASP.NET путь может включать обратную косую черту.) |
* Вместо настройки PopOutImageUrl свойства для отдельных элементов меню задайте StaticPopOutImageUrl или DynamicPopOutImageUrl родительский Menu элемент управления. -или- Установите MenuRenderingMode в Table, или установите MenuRenderingMode в Default и ControlRenderingCompatibilityVersion в 3.5. Эти параметры заставляют элемент управления Menu использовать HTML-раскладку на основе таблиц, как в более ранних версиях ASP.NET.* Если путь в свойстве StaticPopOutImageUrl или DynamicPopOutImageUrl содержит обратную косую черту (\), замените её на символ косой черты (/). |
| Мобильная сборка в файле Web.config | В предыдущих версиях ASP.NET ссылка на сборку System.Web.Mobile.dll была включена в корневой файл Web.config в разделе assemblies, расположенном под system.web/compilation. Чтобы повысить производительность, ссылка на эту сборку была удалена.Примечание. Сборка System.Web.Mobile.dll и мобильные элементы управления ASP.NET включены в ASP.NET 4, но они устарели. |
Если вы хотите использовать типы из этой сборки, добавьте ссылку на сборку в корневом Web.config файле или в файле Web.config приложения. |
| Кэширование выходных данных | Ошибка в ASP.NET 1.0 привела к тому, что кэшированные страницы, указавшие Location="ServerAndClient" в качестве параметра кэша, выпускали заголовок HTTP Vary:* в ответе. Это повлияло на то, что клиентские браузеры никогда не кэшируют страницу локально. В ASP.NET 1.1 был добавлен метод SetOmitVaryStar, который можно вызвать, чтобы подавить заголовок Vary:*. Однако отчеты об ошибках показывают, что разработчики не знают о существующем SetOmitVaryStar поведении.В ASP.NET 4 заголовок HTTP больше не отправляется в ответах, указывающих следующую директиву: <%@ OutputCache Location="ServerAndClient" %>В результате SetOmitVaryStar метод больше не нужен для подавления заголовка Vary:* . В приложениях, указывающих "ServerAndClient" для атрибута Location , страницы будут кэшироваться в браузере, не требуя вызова SetOmitVaryStar. |
Если страницы в приложении должны излучать Vary:*, вызовите метод AppendHeader, как показано в следующем примере:System.Web.HttpResponse.AppendHeader("Vary","*");Кроме того, можно изменить значение атрибута кэширования Location выходных данных на Server. |
| Синтаксический анализ страниц | Средство синтаксического анализа страниц для веб-страниц ASP.NET (.aspx файлы) и пользовательских элементов управления (ASCX-файлы) является более строгим в ASP.NET 4, чем в более ранних версиях ASP.NET, и он помечает больше разметки как недопустимую, чем в более ранних версиях. | Проверьте сообщения об ошибках, создаваемые при запуске страницы, и исправьте ошибки, которые приводят к недопустимой разметке. |
| Типы паспортов | Поддержка Passport, встроенная в ASP.NET 2.0, устарела и не поддерживается из-за изменений в Passport (теперь live ID SDK). В результате типы, связанные с Паспорта в System.Web.Security, теперь помечены атрибутом ObsoleteAttribute. |
Измените любой код, использующий типы Passport в System.Web.Security пространстве имен (например, PassportIdentity), чтобы использовать пакет SDK для Windows Live ID. |
| Сведения PathInfo в свойстве FilePath | ASP.NET 4 больше не включает PathInfo значение в возвращаемые значения из таких свойств, как FilePath, AppRelativeCurrentExecutionFilePathи CurrentExecutionFilePath. Вместо этого PathInfo информация доступна в PathInfo. Например, представьте следующий фрагмент URL-адреса:/testapp/Action.mvc/SomeActionВ более ранних версиях ASP.NET HttpRequest свойства имеют следующие значения: * FilePath: /testapp/Action.mvc/SomeAction* PathInfo: (пусто) В ASP.NET 4 HttpRequest свойства вместо этого имеют следующие значения: * FilePath: /testapp/Action.mvc* PathInfo: SomeAction |
Изучите код для мест, где используется свойства класса для возврата сведений HttpRequest о пути; измените код, чтобы отразить изменения в том, как возвращаются сведения о пути. |
| Проверка запроса | Для улучшения валидации запросов ASP.NET, валидация выполняется раньше в жизненном цикле запросов. В результате проверка запросов выполняется для запросов, которые не предназначены для .aspx файлов, таких как вызовы веб-службы и пользовательские обработчики. Проверка запросов также будет активной при выполнении пользовательских модулей HTTP в конвейере обработки запросов. В результате этого изменения запросы ресурсов, отличных от .aspx файлов, могут вызывать ошибки проверки запроса. Пользовательский код, который выполняется в конвейере запросов (например, пользовательские модули HTTP), также может вызывать ошибки проверки запросов. |
При необходимости можно вернуть старое поведение, когда только страницы .aspx инициируют проверку запроса, используя следующий параметр в файле веб-конфигурации:<httpRuntime requestValidationMode="2.0" />Предупреждение. Если вы вернетесь к старому поведению, убедитесь, что весь код в существующих обработчиках, модулях и другом пользовательском коде выполняет проверки потенциально небезопасных входных данных HTTP, которые могут быть векторами атак XSS. |
| Маршрутизация | Если вы создаете веб-сайт файловой системы в Visual Studio 2010, а веб-сайт находится в папке, содержащей точку (.) в имени папки, маршрутизация URL-адресов не будет работать надежно. Ошибка HTTP 404 возвращается из некоторых виртуальных путей. Это происходит, так как Visual Studio 2010 запускает сервер разработки Visual Studio, используя неправильный путь для корневого виртуального каталога. | * На странице свойств файлового веб-сайта измените Virtual Path атрибут на "/".-или- * Создайте проект веб-приложения вместо проекта веб-сайта. Проекты веб-приложений не имеют этой проблемы, и маршрутизация URL-адресов работает, даже если папка проекта имеет точку в его имени. -или- * Создайте веб-сайт, основанный на HTTP, размещенный в службах IIS. Веб-сайты, размещенные в IIS, могут иметь точки как в виртуальном пути, так и в папке проекта. |
| Сайты SharePoint | Если вы пытаетесь запустить веб-сайт ASP.NET 4, развернутый как дочерний веб-сайт SharePoint, содержащий настраиваемый уровень WSS_Minimalчастичного доверия, появится следующая ошибка:Could not find permission set named 'ASP.Net'. |
В настоящее время версии SharePoint несовместимы с ASP.NET. В результате не следует пытаться запустить веб-сайт ASP.NET 4 в качестве дочернего веб-сайта SharePoint. |
| Стандарты XHTML 1.1 | Чтобы включить соответствие XHTML 1.1 для новых веб-сайтов, элементы управления ASP.NET в .NET Framework 4 будут создавать HTML-код, соответствующий XHTML 1.1. Этот рендеринг включен с помощью следующей опции в файле Web.config внутри элемента <system.Web>.<pages controlRenderingCompatibilityVersion="4.0"/>Этот параметр по умолчанию имеет значение 4.0. Для обеспечения совместимости веб-проектов, обновленных с Visual Studio 2008, включен параметр 3.5. |
Нет. |
Ядро
Общие функции
| Функция | Различия от 3.5 SP1 | Рекомендуемые изменения |
|---|---|---|
| CardSpace | Windows CardSpace больше не входит в .NET Framework; он предоставляется отдельно. | Скачайте Windows CardSpace из Центра загрузки Майкрософт. |
| Файлы конфигурации | Исправление было сделано в том, как .NET Framework обращается к файлам конфигурации приложения. | Если файл конфигурации приложения называется application-name.config, переименуйте его в application-name.exe.config. Например, переименуйте MyApp.config в MyApp.exe.config. |
| Компилятор кода C# | Классы Compiler, CompilerErrorи ErrorLevel классы, которые находились в Microsoft.CSharp пространстве имен, больше не доступны, и их сборка (cscompmgd.dll) больше не включается в .NET Framework. |
Используйте класс CodeDomProvider и другие классы в пространстве имен System.CodeDom.Compiler. Дополнительные сведения см. в разделе "Использование CodeDOM". |
| Размещение (неуправляемый API) | Для улучшения возможностей хостинга некоторые API активации хостинга устарели. Функции параллельного выполнения позволяют приложению загружать и запускать несколько версий .NET Framework в одном процессе. Например, можно запускать приложения, загружающие надстройки (или компоненты), основанные на .NET Framework 2.0 с пакетом обновления 1 (SP1) и надстройках, основанных на .NET Framework 4 в том же процессе. Старые компоненты продолжают использовать старую версию .NET Framework, а новые компоненты используют новую версию .NET Framework. | Используйте конфигурации, описанные в In-Process параллельном выполнении. |
| Новая модель безопасности | Политика безопасности доступа к коду отключена и заменена упрощенной моделью, как описано в разделе "Изменения безопасности" в .NET Framework 4. | Если вы зависите от CAS в ваших приложениях, могут потребоваться изменения. Дополнительные сведения см. в разделе " Совместимость политики безопасности доступа к коду" и "Миграция". |
Дата и время
Пространство имен: System
Сборка: mscorlib (в mscorlib.dll)
| Функция | Различия от 3.5 SP1 | Рекомендуемые изменения |
|---|---|---|
| Летнее время | Чтобы обеспечить соответствие системным часам, свойства времени (например Local , и Now) теперь используют правила операционной системы вместо других данных .NET Framework для операций с дневным временем. | Нет. |
| Форматирование строк | Для поддержки форматирования с учетом языковых и региональных параметров структура включает новые перегрузки методов TimeSpan, ToString и Parse, а также новые методы TryParse и ParseExact. |
Нет. |
Глобализация
Список новых нейтральных и специфических культур см. в разделе "Новые возможности глобализации и локализации".
Пространство имен: System.Globalization
Сборка: mscorlib (в mscorlib.dll)
| Функция | Различия от 3.5 SP1 | Рекомендуемые изменения |
|---|---|---|
| Названия культур | Следующие изменения в именах влияют на немецкую, дивехи и африканскую культуры: * CurrencyEnglishName: Имя валюты для немецкой (Швейцария) (de-CH) культуры изменилось с «sFr.» на «Fr». * LongDatePattern: Шаблон длинного формата даты для культуры дивехи (Мальдивы) (dv-MV) изменился с "dd/MMMM/yyyy" на "dd/MM/yyyy". * PMDesignator: Обозначение времени для культуры Afrikaans (Южная Африка) (af-ZA) изменилось с "nm" на "PM". |
Обратите внимание на изменения названий культур. |
| Параметр LCID | Чтобы обеспечить соответствие ожидаемому поведению в параметрах сервера автоматизации, CLR больше не передает параметр текущей культуры для LCID неуправляемым приложениям на основе COM. Вместо этого он передает 1033 (en-us) для культуры. |
Изменения не требуются, кроме родных приложений, требующих указанной культуры. |
| Устаревшие типы культур | Типы культуры CultureTypes и CultureTypes теперь устарели. Для обеспечения обратной совместимости CultureTypes теперь возвращает нейтральные и определенные культуры, которые были включены в предыдущую версию .NET Framework, и CultureTypes теперь возвращает пустой список. |
Используйте другие значения перечисления CultureTypes . |
| Получение культурных параметров | Начиная с Windows 7, .NET Framework 4 извлекает культурную информацию из операционной системы вместо хранения данных. Кроме того, платформа .NET Framework синхронизируется с Windows для сортировки и обработки данных. | Нет. |
| Стандарты Юникода 5.1 | Платформа .NET Framework теперь поддерживает все символы Юникода 5.1— добавление примерно 1400 символов. К дополнительным символам относятся новые символы, стрелки, диакритические знаки, знаки препинания, математические символы, черты CJK и иероглифы, дополнительные числовые символы малаялам и телугу, а также различные символы Мьянмы, латинские, арабские, греческие, монгольские и кириллические. Следующие новые письменности поддерживаются в Юникоде 5.1: сунданская, лепча, ол чики, вай, саураштра, кая-ли, реджанг, гурмукхи, одия, тамильская, телугу, малаялам и чам. | Нет. |
Исключения
Пространства имен: System, System.Runtime.ExceptionServices
Сборка: mscorlib (в mscorlib.dll)
| Функция | Различия от 3.5 SP1 | Рекомендуемые изменения |
|---|---|---|
| Исключения для поврежденного состояния процесса | Среда CLR больше не предоставляет исключения для поврежденного состояния процесса обработчикам исключений в управляемом коде. | Эти исключения указывают на то, что состояние процесса повреждено. Не рекомендуется запускать приложение в этом состоянии. Дополнительные сведения см. в разделе HandleProcessCorruptedStateExceptionsAttribute, а также в статье «Обработка поврежденных исключений состояния» в журнале MSDN. |
| Исключения подсистемы выполнения | ExecutionEngineException в настоящее время устарел, так как отлавливаемое исключение позволяет нестабильному процессу продолжать работу. Это изменение повышает предсказуемость и надежность во время выполнения. | Используйте InvalidOperationException для оповещения о состоянии. |
Отражение
Пространство имен: System.Reflection
Сборка: mscorlib (в mscorlib.dll)
| Функция | Различия от 3.5 SP1 | Рекомендуемые изменения |
|---|---|---|
| Хэш-алгоритмы сборки | Свойство HashAlgorithm теперь возвращает AssemblyHashAlgorithm, так как среда выполнения не знает алгоритм хэширования указанной сборки, если сборка не загружена. (Это относится к использованию свойства в указанной сборке, например, возвращаемой методом GetReferencedAssemblies .) | Нет. |
| Загрузка сборок | Чтобы предотвратить избыточное загрузку сборок и сохранить виртуальное адресное пространство, среда CLR теперь загружает сборки только с помощью функции Win32 MapViewOfFile . Она больше не вызывает функцию LoadLibrary .Это изменение влияет на диагностические приложения следующим образом: * ProcessModuleCollection больше не будет содержать модули из библиотеки классов (.dll файл), полученные при вызове Process.GetCurrentProcess().Modules.* Приложения Win32, использующие функцию EnumProcessModules , не увидят список всех управляемых модулей. |
Нет. |
| Объявление типа | Теперь DeclaringType свойство правильно возвращает значение NULL, если тип не имеет декларативного типа. | Нет. |
| делегаты | Теперь делегат выбрасывает ArgumentNullException вместо NullReferenceException, когда передано значение null конструктору делегата. | Убедитесь, что любая обработка исключений захватывает ArgumentNullException. |
| Изменение расположения глобального кэша сборок | Для сборок .NET Framework 4 глобальный кэш сборок был перемещен из каталога Windows (%WINDIR%) в подкаталог Microsoft.Net (%WINDIR%\Microsoft.Net). Сборки из более ранних версий остаются в более старом каталоге. Неуправляемое перечисление ASM_CACHE_FLAGS содержит новый флаг ASM_CACHE_ROOT_EX. Этот флаг получает расположение кэша для сборок .NET Framework 4, которые можно получить с помощью функции GetCachePath . |
Нет, если приложения не используют явные пути к сборкам, что не рекомендуется. |
| Средство глобального кэша сборок | СредствоGacutil.exe (средство глобального кэша сборок) больше не поддерживает средство просмотра подключаемых модулей оболочки. | Нет. |
Совместимость
Пространство имен: System.Runtime.InteropServices
Сборка: mscorlib (в mscorlib.dll)
| Функция | Различия от 3.5 SP1 | Рекомендуемые изменения |
|---|---|---|
| Длина буфера (неуправляемый API) | Чтобы сохранить память, функциональность параметра для pBufferLengthOffset метода ICorProfilerInfo2::GetStringLayout была изменена, чтобы соответствовать параметру pStringLengthOffset . Оба параметра теперь указывают на расположение смещения длины строки. Длина буфера удалена из представления строкового класса. |
Удалите любую зависимость от длины буфера. |
| Отладка JIT | Чтобы упростить настройку для JIT-отладки, отладчик .NET Framework теперь использует только раздел реестра AeDebug, который управляет поведением JIT-отладки для исходного кода. Это изменение приводит к следующему: * Вы больше не можете зарегистрировать два разных отладчика для управляемого и машинного кода. * Вы больше не можете запустить отладчик автоматически для неинтерактивного процесса, но вы можете предложить пользователю интерактивный процесс. * Вы больше не получаете уведомления, когда отладчик не запускается, или когда нет зарегистрированного отладчика, который должен быть запущен. * Политики автоматического запуска, зависящие от интерактивности приложения, больше не поддерживаются. |
Настройте операции отладки по мере необходимости. |
| Вызов платформы | Чтобы повысить производительность взаимодействия с неуправляемыми кодами, неправильные соглашения о вызовах на платформе теперь приводят к сбою приложения. В предыдущих версиях уровень маршаллинга разрешал эти ошибки в стеке. | Отладка приложений в Microsoft Visual Studio оповещает об этих ошибках, чтобы их можно было исправить. Если у вас есть двоичные файлы, которые не могут быть обновлены, можно включить <элемент NetFx40_PInvokeStackResilience> в файл конфигурации приложения, чтобы разрешить устранение ошибок вызова в стеке, как и в более ранних версиях. Однако это может повлиять на производительность приложения. |
| Удаленные интерфейсы (неуправляемый API) | Чтобы избежать путаницы разработчика, были удалены следующие интерфейсы, так как они не предоставляли никаких полезных сценариев среды выполнения, и среда CLR не предоставляла и не принимала никаких реализаций: * INativeImageINativeImageDependency * INativeImageInstallInfo * INativeImageEvaluate * INativeImageConverter * ICorModule * IMetaDataConverter |
Нет. |
Данные
В этом разделе описываются проблемы миграции с использованием наборов данных и клиентов SQL, Entity Framework, LINQ to SQL и серверов данных WCF (ранее известных как службы данных ADO.NET).
Набор данных и клиент SQL
В следующей таблице описываются улучшения функций, которые ранее имели ограничения или другие проблемы.
Пространства имен: System.Data, System.Data.Objects.DataClasses, System.Data.SqlClient
Сборки: System.Data (в System.Data.dll), System.Data.Entity (в System.Data.Entity.dll)
| Функция | Различия от 3.5 SP1 |
|---|---|
| Сценарии POCO | Интерфейс IRelatedEnd имеет новые методы, которые улучшают его удобство использования в сценариях простого объекта CLR (POCO). Эти новые методы принимают Object вместо IEntityWithRelationships сущности в качестве параметра. |
| Редактирование строк | Метод IndexOf , реализованный классом DataView , теперь правильно возвращает значение строки, редактируемой вместо возврата -1. |
| События | Событие PropertyChanged теперь возникает, когда строка находится в измененном состоянии, и вызывается метод RejectChanges. Это изменение упрощает создание элементов управления пользовательского DataSet интерфейса, которые предоставляют содержимое объекта. |
| Исключения | Теперь метод Prepare выбрасывает исключение InvalidOperationException, если соединение не установлено или не открыто, а не NullReferenceException. |
| Представления карт | Ошибки сопоставления представлений запросов теперь перехватываются во время разработки вместо создания NullReferenceException во время выполнения. Проверка сопоставления теперь перехватывает ошибку, в которой два набора сопоставлений в концептуальной схеме (CSDL) сопоставляются с тем же столбцом. |
| Транзакции | Если приложение пытается выполнить инструкцию на соединении после завершения транзакции (включая прерывание или откат), теперь выбрасывается исключение InvalidOperationException. Предыдущие версии не вызывают исключения и позволяют выполнять дополнительные команды, даже если транзакция была прервана. |
Entity Framework (Энтити Фреймворк)
В следующей таблице описываются улучшения функций, которые ранее имели ограничения или другие проблемы.
Пространства имен: System.Data, System.Data.Objects, System.Data.Objects.DataClasses
Сборки: System.Data.Entity (в System.Data.Entity.dll)
| Функция | Различия от 3.5 SP1 |
|---|---|
| Объекты сущностей | Теперь существует четность между методом Detach и состоянием объекта сущности при вызове SaveChanges метода. Эта улучшенная согласованность предотвращает создание непредвиденных исключений. |
| Entity SQL | Правила были улучшены для разрешения идентификаторов в Entity SQL. Средство синтаксического анализа Entity SQL улучшило логику для разрешения многопартийных идентификаторов. |
| Структурные заметки | Платформа Entity Framework теперь распознает структурные заметки. |
| Запросы | В запросах были сделаны следующие улучшения:GroupBy* Запрос, использующий пустой ключ для пустой коллекции, не возвращает строки, независимо от наличия дополнительных выборов в запросе.* Созданный в LINQ SQL и запросы Entity-SQL теперь по умолчанию обрабатывают строковые параметры как не-Юникодные значения. |
LINQ to SQL
В следующей таблице описываются улучшения функций, которые ранее имели ограничения или другие проблемы.
Пространство имен: System.Data.Linq
Сборка: System.Data.Linq (в System.Data.Linq.dll)
| Функция | Различия от 3.5 SP1 |
|---|---|
| События | Теперь EntitySet<TEntity> коллекция вызывает ListChanged событие для операций добавления и удаления, если EntitySet<TEntity> выгружен, а также вызывает событие при загрузке коллекции. |
| Запросы |
Skip(0) больше не игнорируется в запросах LINQ to SQL. В результате запросы, имеющие этот метод, могут вести себя по-разному. Например, в некоторых случаях требуется OrderBy предложение с Skip(0), и запрос теперь вызовет NotSupportedException исключение, если OrderBy предложение не было включено. |
Службы данных WCF
В следующей таблице описываются улучшения функций, которые ранее имели ограничения или другие проблемы.
Пространства имен: System.Data.Services, System.Data.Services.Client, System.Data.Services.Common, System.Data.Services.Providers
Сборки: System.Data.Services (в System.Data.Services.dll), System.Data.Services.Client (в System.Data.Services.Client.dll)
| Функция | Различия от 3.5 SP1 |
|---|---|
| Группированное двоичное содержимое | Службы данных WCF теперь поддерживают пакетное двоичное содержимое в запросах и ответах. |
| Перехватчики изменений | Перехватчики изменений теперь задействуются для обработка запроса на удаление. Перехватчик изменений — это метод, который выполняется каждый раз, когда запрос получен сервером для изменения объекта в наборе объектов. Он выполняется перед выполнением входящего запроса. Перехватчик изменений предоставляет доступ к изменяемой сущности и операции, выполняемой на нем. |
| Исключения | Следующие условия теперь вызывают более полезные исключения вместо NullReferenceException: * Время TimeoutException ожидания вызова службы данных. * При возникновении плохого запроса к сервису данных. В приложениях необходимо изменить обработку исключений, чтобы перехватывать новые исключения. |
| Заголовки | В заголовках были добавлены следующие улучшения: * Службы данных WCF теперь правильно отклоняют eTag заголовок, имеющий неопределенное значение.* Службы данных WCF теперь возвращают ошибку и не выполняют запрос на удаление ссылки, если if-* заголовок находится в запросе.* Службы данных WCF теперь возвращают клиенту ошибку в формате (Atom, JSON), указанном клиентом в заголовке Accept. |
| Средство чтения JSON | Средство чтения объектов в формате JavaScript Object Notation (JSON) теперь правильно сообщает об ошибке при чтении символа экранирования обратной косой чертой ("\") при обработке JSON-данных, отправляемых в службу данных WCF. |
| Объединения | В перечислении MergeOption были сделаны следующие улучшения: * Опция MergeOption слияния больше не изменяет сущность на клиенте в результате последующего ответа от службы данных. * Теперь параметр MergeOption согласован между динамическими обновлениями SQL и хранимыми процедурами. |
| Запросы | Теперь метод OnStartProcessingRequest вызывается перед обработкой запроса к службам данных. Это позволяет запросу правильно работать для ServiceOperation служб. |
| Потоки | Службы данных WCF больше не закрывают базовый поток для операций чтения и записи. |
| URI | Исправлено экранирование URI клиентом служб данных WCF. |
Windows Communication Foundation (WCF)
В следующей таблице описываются улучшения функций, которые ранее имели ограничения или другие проблемы.
| Функция | Различия от 3.5 SP1 |
|---|---|
| Файлы конфигурации | Чтобы включить наследование поведения в иерархии файлов конфигурации, WCF теперь поддерживает объединение между файлами конфигурации. Модель наследования конфигурации теперь развернута, чтобы пользователи определили поведение, которое будет применяться ко всем службам, работающим на компьютере. Вы можете столкнуться с изменениями поведения, если есть поведение с одинаковым именем на разных уровнях иерархии. |
| Размещение служб | Вы больше не можете указать <serviceHostingEnvironment> элемент конфигурации на уровне обслуживания, добавив атрибут allowDefinition="MachineToApplication" в определение элемента.Указание <serviceHostingEnvironment> элемента на уровне обслуживания технически неверно и вызывает несогласованное поведение. |
Windows Presentation Foundation (WPF)
Приложения
Пространства имен: System.Windows, System.Windows.Controls
Сборки: PresentationFramework (в PresentationFramework.dll)
| Функция | Различия от 3.5 SP1 | Рекомендуемые изменения |
|---|---|---|
| Обработка исключений | Чтобы обнаруживать ошибки на более ранних этапах, WPF вызывает TargetInvocationException исключение и задает InnerException свойство критическим исключениям, таким как NullReferenceException, OutOfMemoryException, StackOverflowException и SecurityException, вместо перехвата исходного исключения. | Нет. |
| Связанные ресурсы | Чтобы упростить связывание, файлы ресурсов (например, изображения), расположенные в расположении, отличном от структуры папок проекта, используют полный путь к файлу ресурсов, а не только его имя файла в качестве идентификатора ресурса при создании приложения. Приложение сможет найти файлы во время выполнения. | Нет. |
| Приложения с частичным доверием | Из соображений безопасности, в приложениях для Windows, которые запускаются в режиме частичного доверия и содержат элемент управления WebBrowser или элемент управления Frame, содержащий HTML, будет вызываться SecurityException, когда создается элемент управления. В приложениях браузера возникает исключение и отображается сообщение, если выполнены все следующие условия: * Приложение работает в Firefox. * Приложение работает в частичном доверии в зоне Интернета из ненадежных сайтов. * Приложение содержит WebBrowser элемент управления или Frame элемент управления, содержащий HTML. Приложения, выполняемые с доверенных сайтов или из зоны интрасети, не будут затронуты. |
В приложениях браузера вы можете упростить это изменение, выполнив одно из следующих действий: * Запустите приложение браузера в полном доверии. Клиентам следует добавить сайт приложения в зону надежных сайтов. |
| Словари ресурсов | Чтобы улучшить тематические словари ресурсов и предотвратить их изменение, неподвижные ресурсы, определенные в словаре ресурсов и объединенные в тематический словарь, теперь всегда помечены как замороженные и неизменяемые. Это ожидаемое поведение для замораживаемых ресурсов. | Приложения, которые изменяют ресурс, определенный в объединенном словаре уровня темы, должны клонировать ресурс и изменить клонированную копию. Ресурс можно также пометить x:Shared="false", чтобы при каждом запросе создавалась новая копия ResourceDictionary. |
| Windows 7 | Чтобы улучшить работу приложений WPF в Windows 7, были сделаны следующие улучшения, чтобы исправить поведение окна: * Состояния закреплений и жестов теперь работают должным образом на основе взаимодействия с пользователем. * Команды Каскадное расположение окон, Показать окна в виде стопки и Показать окна рядом теперь имеют правильное поведение и обновляют соответствующие свойства. * Свойства Top, Left, Width и Height для развернутого или свернутого окна теперь содержат правильное положение для восстановления окна вместо других значений в зависимости от монитора. |
Нет. |
| Стиль и прозрачность Windows | Возникает InvalidOperationException, если вы пытаетесь установить WindowStyle в значение, отличное от WindowStyle, когда AllowsTransparency равно true и WindowState равно WindowState. |
Если вы должны изменить WindowStyle, когда AllowsTransparency равно true, вы можете вызвать функцию Win32 SetWindowLongPtr. |
| Просмотрщик XPS | WPF не включает пакет Microsoft XML Paper Essentials Pack (XPSEP). XPSEP входит в состав Windows 7 и Windows Vista. На компьютере под управлением Windows XP без установленной .NET Framework 3.5 SP1 печать через API WPF, отличные от указанных в PrintDialog, будет зависеть от WINSPOOL. Некоторые возможности принтера не будут сообщаться, а некоторые параметры принтера не будут применяться во время печати. |
При необходимости установите пакет Microsoft XML Paper Specification Essentials. |
Элементы управления
Пространства имен: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input
Сборки: PresentationFramework (в PresentationFramework.dll), PresentationCore (в PresentationCore.dll), WindowsBase (в WindowsBase.dll)
| Функция | Различия от 3.5 SP1 | Рекомендуемые изменения |
|---|---|---|
| Диалоговое окно | Чтобы повысить надежность, метод ShowDialog вызывается в том же потоке, который создал управляющий элемент FileDialog. | Обязательно создайте элемент управления FileDialog и вызовите метод ShowDialog в том же потоке. |
| Плавающие окна | Чтобы исправить логику восстановления фокуса, которая неправильно повторно активирует плавающее окно (из-за чего оно выглядит как модальное диалоговое окно), теперь восстановление фокуса не производится, если кандидат не является дочерним элементом окна. | Нет. |
| Элементы в коллекциях | При перемещении или добавлении элемента в коллекцию он отображается в том же относительном расположении в CollectionView, если CollectionView не отсортирован. Это обеспечивает соответствие между положением элемента в коллекции и в связанном CollectionView объекте. | Используйте метод ContainerFromItem или IndexOf для поиска расположения элемента в CollectionView, вместо того чтобы полагаться на фиксированное положение элемента. |
| Макеты | Чтобы устранить ненужные повторные макеты, изменение ShowsNavigationUI больше не приводит к недействительности макета и не вызывает повторное обновление макета. | Если вы ожидаете, что изменение ShowsNavigationUI приведет к перепроходу макета, вызовите InvalidateVisual после задания свойства. |
| меню | Чтобы включить текст ClearType во всплывающих меню, изменения были внесены в класс ControlTemplate, а также в элемент управления MenuItem и другие элементы управления. | Приложения не должны полагаться на визуальную структуру шаблонов элементов управления. Только именованные части ControlTemplate являются частью общедоступного контракта. Если приложение должно найти определенный объект в ControlTemplate, выполните поиск в визуальном дереве по определенному типу вместо того, чтобы полагаться на фиксированное местоположение объекта в дереве. |
| Навигация | Если Frame напрямую переходит к расположению, IsNavigationInitiator свойство устанавливается true после начальной навигации. Это изменение предотвращает создание дополнительных событий во время сценариев запуска. |
Нет. |
| Всплывающие окна | Теперь CustomPopupPlacementCallback делегат может вызываться несколько раз во время передачи макета вместо одного раза. | Если делегат CustomPopupPlacementCallback вычисляет позицию Popup на основе её предыдущей позиции, пересчитывайте позицию только в том случае, если значения параметров popupSize, targetSize или offset изменяются. |
| Значения свойств | Теперь SetCurrentValue метод позволяет задать для свойства эффективное значение, хотя он продолжает уважать любую привязку, стиль или триггер, влияющий на свойство. | Авторы элементов управления должны использовать SetCurrentValue всякий раз, когда значение свойства изменяется в качестве побочных эффектов некоторых других действий, включая манипуляцию пользователем. |
| Текстовые поля | По соображениям безопасности методы Copy и Cut незаметно завершаются ошибкой, если они вызываются в условиях ограниченного доверия. Кроме того, программное выполнение свойства Copy или Cut элемента управления, наследуемого от TextBoxBase, будет заблокировано в частичном доверии. Однако команды копирования и вырезания, инициированные пользователем, такие как нажатие кнопки, свойство которой Command привязано к одной из этих команд, будет работать. Стандартное копирование и вырезание через сочетания клавиш и контекстное меню по-прежнему будут работать как прежде в режиме частичного доверия. |
Привяжите команду Copy или Cut к действию, инициированному пользователем, например, нажатием кнопки. |
Графика
Пространства имен: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input, System.Windows.Media.Effects
Сборки: PresentationFramework (в PresentationFramework.dll), PresentationCore (в PresentationCore.dll), WindowsBase (в WindowsBase.dll)
| Функция | Различия от 3.5 SP1 | Рекомендуемые изменения |
|---|---|---|
| Эффекты растрового изображения | Чтобы повысить производительность, класс BitmapEffect и классы, наследующие от класса BitmapEffect, хотя и присутствуют, всё же отключены. Эффект будет отображаться с помощью конвейера визуализации с аппаратным ускорением, если выполняются следующие условия. Приложение использует DropShadowBitmapEffect или BlurBitmapEffect, у которого свойство радиуса установлено меньше 100 DIU. * Видеоадаптер на компьютере, на котором запущено приложение, поддерживает шейдер пикселей 2.0. Если эти условия не выполнены, объект BitmapEffect не будет оказывать влияния. Кроме того, Visual Studio выдает предупреждение компилятора при обнаружении BitmapEffect объекта или подкласса. Метод PushEffect помечен как устаревший. |
Отмените использование устаревших BitmapEffect и производных классов и вместо этого используйте новые классы, производные от Effect: BlurEffect, DropShadowEffectи ShaderEffect. Вы также можете создать собственные эффекты, наследуя от ShaderEffect класса. |
| Кадры растрового изображения | Клонированные BitmapFrame объекты теперь получают DownloadProgressDownloadCompletedи DownloadFailed события. Это позволяет изображениям, загруженным из Интернета, применяться к элементу Image управления через Style для корректной работы. Вы увидите изменение поведения только в том случае, если все приведенные ниже утверждения истинны. * Вы подписаны на событие DownloadProgress, DownloadCompleted или DownloadFailed. * Источник BitmapFrame из Интернета. * BitmapFrame клонируется, пока скачивание в процессе. |
Проверьте отправителя в обработчике событий и выполните действия, только если отправитель является исходным BitmapFrame. |
| Декодирование изображений | Чтобы IOException обрабатывался в случае, если изображения не могут декодироваться, класс BitmapSource вызовет событие DecodeFailed, если изображение не декодируется. | Удалите любую обработку исключений для IOException, и используйте событие DecodeFailed для проверки сбоя декодирования. |
Ввод
Пространства имен: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input
Сборки: PresentationFramework (в PresentationFramework.dll), PresentationCore (в PresentationCore.dll), WindowsBase (в WindowsBase.dll)
| Функция | Различия от 3.5 SP1 | Рекомендуемые изменения |
|---|---|---|
| Привязка экземпляров команд | Чтобы обеспечить механизм привязки экземпляров команд, основанных на модели представления, к жестам ввода, основанным на представлении, InputBinding класс теперь наследует от Freezable вместо DependencyObject. Следующие свойства теперь являются свойствами зависимостей: * Command * CommandParameter * CommandTarget Это изменение приводит к следующему: * Объект InputBinding теперь заморожен, если он зарегистрирован, а не остается изменяемым. Невозможно получить доступ к объектам InputBinding уровня экземпляра из нескольких потоков из-за ограничений класса DependencyObject. * Вы не можете изменить входные привязки уровня класса после их регистрации из-за ограничений Freezable класса. * Невозможно указать входные привязки для экземпляров команд, созданных в модели представления. |
Создайте отдельные экземпляры InputBinding класса в отдельных потоках, если привязки должны быть изменяемыми или заморозить их в противном случае. Не изменяйте статический уровень InputBinding класса после регистрации. |
| Приложения браузера | Приложения браузера WPF (. XBAP) теперь обрабатывает ключевые события так же, как автономные приложения WPF, чтобы объекты получали перенаправленные ключевые события в правильном порядке. | Нет. |
| Сочетания мертвых ключей | WPF скрывает мертвые ключи, которые не создают видимый символ, но вместо этого указывает, что ключ должен быть объединен со следующим ключом буквы для создания одного символа. Ключевые входные события, такие как KeyDownEvent событие, сообщают, когда ключ является мертвым ключом, задав Key свойству Key значение. Обычно это ожидаемое поведение, так как приложения обычно не намерены реагировать на ввод клавиатуры, который создает объединенный символ. | Приложения, которые ожидают считывать ключи, которые были частью объединенных символов, могут получить скрытый в настоящий момент ключ, используя свойство DeadCharProcessedKey. |
| Диспетчер фокусировок |
FocusManager.GetFocusedElement(DependencyObject) Когда методу передан элемент с присоединенным свойством IsFocusScope, метод возвращает элемент, который является последним элементом, на котором был фокус клавиатуры в области этого фокуса, если и только если возвращаемый элемент принадлежит тому же true объекту, что и элемент, передаваемый методу. |
Нет. |
Автоматизация пользовательского интерфейса
Пространство имен: System.Windows, System.Windows.Automation.Peers, System.Windows.Automation.Provider, System.Windows.Controls, System.Windows.Data, System.Windows.Input
Сборки: PresentationFramework (в PresentationFramework.dll), PresentationCore (в PresentationCore.dll), UIAutomationProvider (в UIAutomationProvider.dll), WindowsBase (в WindowsBase.dll)
| Функция | Различия от 3.5 SP1 | Рекомендуемые изменения |
|---|---|---|
| Иерархия классов представлений | Классы TreeViewAutomationPeer и TreeViewItemAutomationPeer наследуются от ItemsControlAutomationPeer вместо FrameworkElementAutomationPeer. | Если вы наследуете от TreeViewItemAutomationPeer классов и переопределяете GetChildrenCore метод, рассмотрите возможность возврата объекта, наследуемого от нового TreeViewDataItemAutomationPeer класса. |
| Контейнеры вне экрана | Чтобы исправить неправильное возвращаемое значение, метод IsOffscreenCore теперь правильно возвращает false для контейнеров элементов, которые прокручены за пределы видимости. Кроме того, значение метода не зависит от окклюзии другими окнами и от того, видно ли элемент на определенном мониторе. |
Нет. |
| Меню и дочерние объекты | Чтобы включить автоматизацию пользовательского интерфейса для меню, содержащих дочерние элементы, отличные от объектов MenuItem, метод GetChildrenCore теперь возвращает объект AutomationPeer, который является дочерним объектом UIElement, вместо объекта MenuItemAutomationPeer. | Нет. |
| Новые интерфейсы и сборки | Чтобы включить новые функции для автоматизации пользовательского интерфейса, были добавлены следующие интерфейсы: * IItemContainerProvider * ISynchronizedInputProvider * IVirtualizedItemProvider |
Любой проект, создающий одноранговые узлы автоматизации WPF, должен добавить явную ссылку на UIAutomationProvider.dll. |
| Пальцы | Метод GetClassNameCore возвращает значение вместо null. Таким образом, элементы управления, такие как GridSplitter, которые наследуют от класса Thumb, будут сообщать имя для автоматизации интерфейса пользователя. | Нет. |
| Виртуализированные элементы | Чтобы повысить производительность, GetChildrenCore метод возвращает только дочерние объекты, которые фактически находятся в визуальном дереве, а не все дочерние объекты независимо от того, виртуализированы ли они. | Используйте ItemContainerPattern чтобы перебрать все элементы ItemsControlAutomationPeer. |
XAML
Пространства имен: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input, System.Windows.Markup
Сборки: PresentationFramework (в PresentationFramework.dll), PresentationCore (в PresentationCore.dll), WindowsBase (в WindowsBase.dll)
| Функция | Различия от 3.5 SP1 | Рекомендуемые изменения |
|---|---|---|
| Расширение разметки | WPF теперь всегда использует значение из ProvideValue метода вместо возврата MarkupExtension объекта в определенных случаях, когда расширение разметки используется для задания свойства или создания элемента в коллекции. Расширение разметки может вернуть само себя в некоторых случаях. | Если ваше приложение обращается к ресурсу, который возвращал объект MarkupExtension в более ранних версиях, обращайтесь к объекту, возвращаемому из ProvideValue, а не к объекту MarkupExtension. |
| Атрибуты синтаксического анализа | Атрибуты в XAML теперь могут иметь только один период. Например, ниже приведены допустимые значения:<Button Background="Red"/> (без периодов)<Button Button.Background = "Red"/> (один период времени)Следующее больше не является допустимым: <Button Control.Button.Background = "Red"/> (более одного периода) |
Исправьте атрибуты XAML, имеющие несколько периодов. |
XML
Строки в этой таблице описывают улучшения функций, которые ранее имели ограничения или другие проблемы.
Схема и преобразования
Пространства имен: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath
Сборки: System.Xml (в System.Xml.dll), System.Xml.Linq (в System.Xml.Linq.dll)
| Функция | Различия от 3.5 SP1 |
|---|---|
| Схемы Chameleon | Чтобы предотвратить повреждение данных, схемы «хамелеон» теперь правильно клонируются, когда они включены вместе с несколькими другими схемами. Схемы Chameleon — это схемы, которые не имеют целевого пространства имен, и когда они включены в другой XSD, они принимают целевое пространство имен импортируемой схемы. Они часто используются для включения общих типов в схему. |
| Функции идентификатора |
Функция идентификатора XSLT теперь возвращает правильное значение вместо null, когда XmlReader объект передается в XLST. Если пользователь создал XmlReader объект из класса LINQ to XML с помощью CreateReader метода, и этот XmlReader объект был передан В XSLT, все экземпляры id функции в XSLT ранее возвращали значение NULL. Это недопустимое возвращаемое значение для id функции. |
| Атрибут пространства имен | Чтобы предотвратить повреждение данных, теперь объект XPathNavigator правильно возвращает локальное имя атрибута x:xmlns. |
| Объявления пространства имен | Объект XmlReader в поддереве больше не создает повторяющиеся объявления пространства имен в одном XML-элементе. |
| Проверка схемы | Чтобы предотвратить ошибочную проверку схемы, XmlSchemaSet класс позволяет скомпилировать схемы XSD правильно и согласованно. Эти схемы могут включать другие схемы; например, A.xsd может включать B.xsd, который может включать C.xsd. Компиляция любого из этих элементов приводит к тому, что этот граф зависимостей будет пройден. |
| Функции скрипта | Функция function-available больше не возвращает неверное значение false, когда функция действительно доступна. |
| URI | Теперь метод Load возвращает правильный базовый код ресурса (BASEURI) в запросах LINQ. |
Ратификация
Пространства имен: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath
Сборки: System.Xml (в System.Xml.dll), System.Xml.Linq (в System.Xml.Linq.dll)
| Функция | Различия от 3.5 SP1 |
|---|---|
| Резолверы пространств имен | Метод ReadContentAs больше не игнорирует резолвер IXmlNamespaceResolver, переданный в него. В предыдущих версиях указанный сопоставитель пространства имен был проигнорирован и XmlReader использовался вместо него. |
| Пробелы | Чтобы предотвратить потерю данных при создании средства чтения, метод Create больше не удаляет значительные пробелы. Проверка XML распознает режим смешанного содержимого, где текст может быть перемешан с разметкой XML. В смешанном режиме все пробелы являются значительными и должны учитываться. |
Создание
Пространства имен: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath
Сборки: System.Xml (в System.Xml.dll), System.Xml.Linq (в System.Xml.Linq.dll)
| Функция | Различия от 3.5 SP1 |
|---|---|
| Ссылки на сущности | Чтобы предотвратить повреждение данных, ссылки на сущности больше не идентицируются дважды в XML-атрибутах. Если пользователь пытался написать сущность в атрибут xmlns или в атрибут xml:lang или xml:space с помощью метода WriteEntityRef, сущность была преобразована в сущность дважды в выходных данных, что привело к повреждению данных. |
| Новая обработка строк | Чтобы предотвратить повреждение данных, XmlWriter объекты соблюдают NewLineHandling параметр. |