Критические изменения для миграции с .NET Framework на .NET Core
Если вы переносите приложение с .NET Framework на .NET Core версий 1.0–3.1, критические изменения, перечисленные в этой статье, могут повлиять на работу приложения. Критические изменения сгруппированы по категориям, а в этих категориях — по версии .NET Core, в которых они были представлены.
Примечание.
Эта статья не является исчерпывающим списком критических изменений между .NET Framework и .NET Core. Здесь добавляются самые важные критические изменения, как только мы о них узнаем.
Основные библиотеки .NET
- Изменено значение по умолчанию для UseShellExecute
- API IDispatchImplAttribute удален
- Исключение UnauthorizedAccessException, вызванное FileSystemInfo.Attributes
- Обработка исключений с поврежденным состоянием процесса не поддерживается
- Для свойств UriBuilder больше не добавляются начальные символы
- Process.StartInfo выдает исключение InvalidOperationException для процессов, которые не были запущены
.NET 8
API IDispatchImplAttribute удален
.NET Core 2.1
Изменено значение по умолчанию для UseShellExecute
ProcessStartInfo.UseShellExecute имеет значение false
по умолчанию в .NET Core. В .NET Framework его значение по умолчанию — true
.
Описание изменения
Process.Start позволяет запускать приложение напрямую, например с помощью кода, как Process.Start("mspaint.exe")
, запускающего Paint. Это также позволяет косвенно запускать связанное приложение, если для ProcessStartInfo.UseShellExecute установлено значение true
. В .NET Framework значением по умолчанию для ProcessStartInfo.UseShellExecute является true
, что означает, что такой код как Process.Start("mytextfile.txt")
будет запускать Блокнот, если вы связали файлы .txt с этим редактором. Чтобы предотвратить косвенный запуск приложения на .NET Framework, необходимо явно установить false
на ProcessStartInfo.UseShellExecute. В .NET Core значением по умолчанию для ProcessStartInfo.UseShellExecute является значение false
. Это означает, что связанные по умолчанию приложения не запускаются при вызове Process.Start
.
Следующие свойства System.Diagnostics.ProcessStartInfo работают только в том случае, если ProcessStartInfo.UseShellExecute имеет значение true
:
- ProcessStartInfo.CreateNoWindow
- ProcessStartInfo.ErrorDialog
- ProcessStartInfo.Verb
- ProcessStartInfo.WindowStyle.
Это изменение введено в .NET Core для повышения производительности. Как правило, Process.Start используется для непосредственного запуска приложения. Запуск приложения напрямую не требует затрагивания оболочки Windows и влечет за собой соответствующие расходы на производительность. Чтобы ускорить этот вариант по умолчанию, .NET Core изменяет значение по умолчанию ProcessStartInfo.UseShellExecute на false
. При необходимости вы можете выбрать более медленный путь.
Представленные версии
2.1
Примечание.
В более ранних версиях .NET Core UseShellExecute
не был внедрен для Windows.
Рекомендуемое действие
Если приложение полагается на прежнее поведение, вызовите Process.Start(ProcessStartInfo), указав для параметра UseShellExecute значение true
в объекте ProcessStartInfo.
Категория
Основные библиотеки .NET
Затронутые API
.NET Core 1.0
Исключение UnauthorizedAccessException, вызванное FileSystemInfo.Attributes
В .NET Core UnauthorizedAccessException возникает, когда вызывающий пытается задать значение атрибута файла, но у него нет разрешений на запись.
Описание изменения
В .NET Framework ArgumentException возникает, когда вызывающий пытается задать значение атрибута файла в FileSystemInfo.Attributes, но у него нет разрешений на запись. В .NET Core вместо него возникает UnauthorizedAccessException (в .NET Core ArgumentException по-прежнему возникает, если вызывающий пытается задать недопустимый атрибут файла).
Представленные версии
1.0
Рекомендуемое действие
Изменяйте любые инструкции catch
, чтобы получить UnauthorizedAccessException вместо или в дополнение к ArgumentException по мере необходимости.
Категория
Основные библиотеки .NET
Затронутые API
Обработка исключений поврежденного состояния не поддерживается
Обработка исключений поврежденного состояния в .NET Core не поддерживается.
Описание изменения
Ранее исключения поврежденного состояния процесса могли быть перехвачены и обработаны обработчиками исключений управляемого кода, например с помощью инструкции try-catch в C#.
Начиная с .NET Core 1.0 исключения поврежденного состояния процесса не могут обрабатываться управляемым кодом. Среда CLR не доставляет исключения поврежденного состояния процесса в управляемый код.
Представленные версии
1.0
Рекомендуемое действие
Старайтесь исключить потребность в обработке исключений поврежденного состояния процесса, устраняя ситуации, которые вызывают подобные исключения. Если обработка исключений поврежденного состояния процесса совершенно необходима, напишите обработчик исключений в коде C или C++.
Категория
Основные библиотеки .NET
Затронутые API
- System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute
- Элемент legacyCorruptedStateExceptionsPolicy
Для свойств UriBuilder больше не добавляются начальные символы
UriBuilder.Fragment больше не добавляет начальный символ #
, а UriBuilder.Query больше не добавляет начальный символ ?
, если он уже существует.
Описание изменения
В .NET Framework свойства UriBuilder.Fragment и UriBuilder.Query всегда добавляют к сохраненному значению в начале символ #
или ?
соответственно. Такое поведение может привести к появлению нескольких символов #
или ?
в сохраненном значении, если строка уже содержит один из этих начальных символов. Например, значение UriBuilder.Fragment может стать ##main
.
Начиная с .NET Core 1.0 эти свойства больше не добавляют начальные символы #
или ?
к сохраненному значению, если в начале строки уже есть начальный символ.
Представленные версии
1.0
Рекомендуемое действие
При задании значений свойств больше не нужно явно удалять эти начальные символы. Это особенно полезно при добавлении значений, так как больше не нужно каждый раз удалять начальные символы #
или ?
.
Например, в следующем фрагменте кода показано различие в поведении между .NET Framework и .NET Core.
var builder = new UriBuilder();
builder.Query = "one=1";
builder.Query += "&two=2";
builder.Query += "&three=3";
builder.Query += "&four=4";
Console.WriteLine(builder.Query);
- В .NET Framework выходными данными будет
????one=1&two=2&three=3&four=4
. - В .NET Core выходными данными будет
?one=1&two=2&three=3&four=4
.
Категория
Основные библиотеки .NET
Затронутые API
Process.StartInfo выдает исключение InvalidOperationException для процессов, которые не были запущены
Чтение свойства Process.StartInfo для процессов, которые не были запущены кодом, приводит к возникновению InvalidOperationException.
Описание изменения
В .NET Framework обращение к свойству Process.StartInfo для процессов, которые не были запущены кодом, возвращает пустой объект ProcessStartInfo. Пустой объект содержит значения по умолчанию для всех его свойств, кроме EnvironmentVariables.
Начиная с .NET Core 1.0, при чтении свойства Process.StartInfo для процесса, который не был запущен (путем вызова Process.Start) возникает исключение InvalidOperationException.
Представленные версии
1.0
Рекомендуемое действие
Не обращайтесь к свойству Process.StartInfo для процессов, которые не были запущены кодом. Например, не считывайте это свойство для процессов, возвращаемых Process.GetProcesses.
Категория
Основные библиотеки .NET
Затронутые API
Шифрование
.NET Core 2.1
Логический параметр SignedCms.ComputeSignature учитывается
В .NET Core учитывается логический параметр silent
метода SignedCms.ComputeSignature(CmsSigner, Boolean). Если этот параметр имеет значение true
, запрос на ввод ПИН-кода не отображается.
Описание изменения
В .NET Framework параметр silent
метода SignedCms.ComputeSignature(CmsSigner, Boolean) игнорируется, и если поставщик этого требует, запрос на ввод ПИН-кода отображается всегда. В .NET Core параметр silent
учитывается, и если для него задано значение true
, запрос на ввод ПИН-кода никогда не отображается, даже если этого требует поставщик.
В .NET Core в версии 2.1 реализована поддержка сообщений CMS/PKCS #7.
Представленные версии
2.1
Рекомендуемое действие
Чтобы запрос на ввод ПИН-кода появлялся при необходимости, классические приложения должны вызывать SignedCms.ComputeSignature(CmsSigner, Boolean) и присваивать логическому параметру значение false
. Полученное поведение аналогично поведению .NET Framework независимо от того, отключен ли в нем тихий контекст.
Категория
Шифрование
Затронутые API
MSBuild
.NET Core 3.0
Изменение имени файла манифеста для ресурса
Начиная с .NET Core 3.0, в стандартных ситуациях MSBuild создает другие имена файлов манифеста для файлов ресурсов.
Представленные версии
3.0
Описание изменения
До версии .NET Core 3.0, если для элемента EmbeddedResource
в файле проекта не были указаны метаданные LogicalName
, ManifestResourceName
или DependentUpon
, платформа MSBuild создавала имя файла манифеста в формате <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources
. Если в файле проекта не определено значение RootNamespace
, по умолчанию используется имя проекта. Например, для файла ресурсов с именем Form1.resx в корневом каталоге проекта создавался манифест с именем MyProject.Form1.resources.
Начиная с версии .NET Core 3.0, при размещении файла ресурса в одной папке с одноименным исходным файлом, (Form1.resx и Form1.cs), MSBuild использует сведения о типе из исходного файла для создания имени файла манифеста в формате <Namespace>.<ClassName>.resources
. Пространство имен и имя класса извлекаются из первого типа в исходном файле, найденном в той же папке. Например, для файла ресурсов с именем Form1.resx, который расположен в одной папке с исходным файлом Form1.cs, создается манифест с именем MyNamespace.Form1.resources. Важно отметить, что первая часть имени файла отличается от имени в прежних версиях .NET Core (MyNamespace вместо MyProject).
Примечание.
Если для элемента EmbeddedResource
в файле проекта указаны метаданные LogicalName
, ManifestResourceName
или DependentUpon
, это изменение не применяется к соответствующему файлу ресурсов.
Это критическое изменение было введено одновременно с добавлением свойства EmbeddedResourceUseDependentUponConvention
для проектов .NET Core. По умолчанию файлы ресурсов не указаны явным образом в файле проекта .NET Core, поэтому в них нет метаданных DependentUpon
, которые позволяют задать формат именования созданного файла .resources. Если EmbeddedResourceUseDependentUponConvention
имеет значение true
(используется по умолчанию), MSBuild ищет в той же папке исходный файл и извлекает из этого файла пространство имен и имя класса. Если для EmbeddedResourceUseDependentUponConvention
задано значение false
, MSBuild создает имя манифеста по правилам для прежних версий, то есть объединяет RootNamespace
и относительный путь к файлу.
Рекомендуемое действие
В большинстве случаев разработчикам не нужно предпринимать по этому поводу никаких действий, и приложение должно работать нормально. Если же это изменение нарушит работу приложения, вы можете выполнить одно из следующих действий.
Измените код так, чтобы он ожидал новое имя манифеста.
Откажитесь от нового соглашения об именовании, указав в файле проекта параметр
EmbeddedResourceUseDependentUponConvention
со значениемfalse
.<PropertyGroup> <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention> </PropertyGroup>
Категория
MSBuild
Затронутые API
Н/П
Сеть
.NET Core 2.0;
WebClient.CancelAsync не всегда сразу отменяет запрос
Начиная с .NET Core 2.0 вызов WebClient.CancelAsync() не отменяет запрос сразу, если ответ начал поступать.
Описание изменения
Ранее вызов WebClient.CancelAsync() отменял запрос сразу. Начиная с .NET Core 2.0 вызов WebClient.CancelAsync() отменяет запрос сразу, только если ответ не начал поступать. Если ответ начал поступать, запрос отменяется только после считывания полного ответа.
Это изменение было реализовано, так как API WebClient является нерекомендуемым и заменен на HttpClient.
Представленные версии
2.0
Рекомендуемое действие
Используйте класс System.Net.Http.HttpClient вместо System.Net.WebClient, который является нерекомендуемым.
Категория
Сеть
Затронутые API
Windows Forms
Поддержка Windows Forms была добавлена в .NET Core в версии 3.0. Если вы переносите приложение Windows Forms с .NET Framework на .NET Core, критические изменения, перечисленные здесь, могут повлиять на работу приложения.
- Удаленные элементы управления
- При отображении подсказки не возникает событие CellFormatting
- Шрифт Control.DefaultFont изменен на Segoe UI 9 пт
- Модернизация FolderBrowserDialog
- Из некоторых типов Windows Forms удален атрибут SerializableAttribute
- Параметр совместимости AllowUpdateChildControlIndexForTabControls не поддерживается
- Параметр совместимости DomainUpDown.UseLegacyScrolling не поддерживается
- Параметр совместимости DoNotLoadLatestRichEditControl не поддерживается
- Параметр совместимости DoNotSupportSelectAllShortcutInMultilineTextBox не поддерживается
- Параметр совместимости DontSupportReentrantFilterMessage не поддерживается
- Параметр совместимости EnableVisualStyleValidation не поддерживается
- Параметр совместимости UseLegacyContextMenuStripSourceControlValue не поддерживается
- Параметр совместимости UseLegacyImages не поддерживается
- Шаблоны About и SplashScreen не работают для Visual Basic
- Типы из пространства имен Microsoft.VisualBasic.ApplicationServices теперь недоступны
- Типы из пространства имен Microsoft.VisualBasic.Devices теперь недоступны
- Типы из пространства имен Microsoft.VisualBasic.MyServices теперь недоступны
.NET Core 3.1.
Удаленные элементы управления
Начиная с .NET Core 3.1, некоторые элементы управления Windows Forms больше не доступны.
Описание изменения
Начиная с .NET Core 3.1, различные элементы управления Windows Forms больше не доступны. В .NET Framework 2.0 они были заменены элементами управления с улучшенной структурой и поддержкой. Нерекомендуемые элементы управления были ранее удалены из панелей элементов конструктора, но по-прежнему были доступны для использования.
Следующие типы больше не доступны.
- ContextMenu
- DataGrid
- DataGrid.HitTestType
- DataGridBoolColumn
- DataGridCell
- DataGridColumnStyle
- DataGridLineStyle
- DataGridParentRowsLabelStyle
- DataGridPreferredColumnWidthTypeConverter
- DataGridTableStyle
- DataGridTextBox
- DataGridTextBoxColumn
- GridColumnStylesCollection
- GridTablesFactory
- GridTableStylesCollection
- IDataGridEditingService
- IMenuEditorService
- MainMenu
- Menu
- Menu.MenuItemCollection
- MenuItem
- ToolBar
- ToolBarAppearance
- ToolBarButton
- ToolBar.ToolBarButtonCollection
- ToolBarButtonClickEventArgs
- ToolBarButtonStyle
- ToolBarTextAlign
Представленные версии
3.1
Рекомендуемое действие
Каждый удаленный элемент управления имеет рекомендуемую замену. См. таблицу ниже.
Удаленный элемент управления (API) | Рекомендуемая замена | Связанные удаленные интерфейсы API |
---|---|---|
ContextMenu | ContextMenuStrip | |
DataGrid | DataGridView | DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType |
MainMenu | MenuStrip | |
Меню | ToolStripDropDown, ToolStripDropDownMenu | MenuItemCollection |
MenuItem | ToolStripMenuItem | |
ToolBar | ToolStrip | ToolBarAppearance |
ToolBarButton | ToolStripButton | ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign |
Категория
Windows Forms
Затронутые API
- System.Windows.Forms.ContextMenu
- System.Windows.Forms.GridColumnStylesCollection
- System.Windows.Forms.GridTablesFactory
- System.Windows.Forms.GridTableStylesCollection
- System.Windows.Forms.IDataGridEditingService
- System.Windows.Forms.MainMenu
- System.Windows.Forms.Menu
- System.Windows.Forms.Menu.MenuItemCollection
- System.Windows.Forms.MenuItem
- System.Windows.Forms.ToolBar
- System.Windows.Forms.ToolBar.ToolBarButtonCollection
- System.Windows.Forms.ToolBarAppearance
- System.Windows.Forms.ToolBarButton
- System.Windows.Forms.ToolBarButtonClickEventArgs
- System.Windows.Forms.ToolBarButtonStyle
- System.Windows.Forms.ToolBarTextAlign
- System.Windows.Forms.DataGrid
- System.Windows.Forms.DataGrid.HitTestType
- System.Windows.Forms.DataGridBoolColumn
- System.Windows.Forms.DataGridCell
- System.Windows.Forms.DataGridColumnStyle
- System.Windows.Forms.DataGridLineStyle
- System.Windows.Forms.DataGridParentRowsLabelStyle
- System.Windows.Forms.DataGridPreferredColumnWidthTypeConverter
- System.Windows.Forms.DataGridTableStyle
- System.Windows.Forms.DataGridTextBox
- System.Windows.Forms.DataGridTextBoxColumn
- System.Windows.Forms.Design.IMenuEditorService
При отображении подсказки не возникает событие CellFormatting
DataGridView теперь отображает всплывающие подсказки для ошибок и текста в ячейке при наведении указателя мыши и при выборе с помощью клавиатуры. Если подсказка отображается, событие DataGridView.CellFormatting не возникает.
Описание изменения
До .NET Core 3.1 DataGridView, у которого для свойства ShowCellToolTips было задано значение true
, отображал подсказку для ошибок и текста в ячейке при наведении указателя мыши на эту ячейку. Подсказки не отображались при выборе ячейки с помощью клавиатуры (например, с помощью клавиши TAB, сочетаний клавиш или клавиш со стрелками). Если пользователь изменил ячейку, а затем, пока DataGridView находился в режиме редактирования, навел указатель на ячейку, для которой не задано свойство ToolTipText, возникало событие CellFormatting для форматирования текста ячейки, отображаемого в ней.
Чтобы удовлетворить требованиям стандартов специальных возможностей, начиная с .NET Core 3.1, DataGridView, у которого для свойства ShowCellToolTips задано значение true
, отображает подсказки для ошибок и текста ячейки не только при наведении указателя мыши, но и при выборе ячейки с помощью клавиатуры. Как следствие этого изменения событие CellFormattingне возникает, когда указатель наводится на ячейки, для которых не задано свойство ToolTipText, пока DataGridView находится в режиме редактирования. Событие не возникает, так как содержимое ячейки, на которую наведен указатель, выводится в виде подсказки, а не отображается в ячейке.
Представленные версии
3.1
Рекомендуемое действие
Выполните рефакторинг всего кода, зависящего от события CellFormatting, когда DataGridView находится в режиме редактирования.
Категория
Windows Forms
Затронутые API
нет
.NET Core 3.0
Шрифт элемента управления по умолчанию изменен на Segoe UI 9 пт
Описание изменения
В .NET Framework свойству Control.DefaultFont присвоено значение Microsoft Sans Serif 8 pt
. На следующем рисунке показано окно, в котором используется шрифт по умолчанию.
Начиная с .NET Core 3.0 шрифтом по умолчанию является Segoe UI 9 pt
(тот же шрифт, что и SystemFonts.MessageBoxFont). В результате этого изменения размер форм и элементов управления увеличен на 27 % с учетом увеличенного размера нового шрифта по умолчанию. Например:
Это изменение было внесено в соответствии с рекомендациями по пользовательскому интерфейсу Windows.
Представленные версии
3.0
Рекомендуемое действие
Так как размер форм и элементов управления изменился, убедитесь, что приложение отображается правильно.
Чтобы оставить исходный шрифт, задайте для формы шрифт по умолчанию: Microsoft Sans Serif 8 pt
. Например:
public MyForm()
{
InitializeComponent();
Font = new Font(new FontFamily("Microsoft Sans Serif"), 8f);
}
Категория
- Windows Forms
Затронутые API
Нет.
Модернизация FolderBrowserDialog
В приложениях Windows Forms для .NET Core в элемент управления FolderBrowserDialog внесены изменения.
Описание изменения
В Windows Forms в .NET Framework для элемента управления FolderBrowserDialog используется следующее диалоговое окно:
В .NET Core 3.0 в Windows Forms используется более новый элемент управления на основе COM, появившийся в Windows Vista:
Представленные версии
3.0
Рекомендуемое действие
Диалоговое окно будет обновлено автоматически.
Если вы хотите оставить исходное диалоговое окно, перед отображением диалогового окна задайте для свойства FolderBrowserDialog.AutoUpgradeEnabled значение false
, как показано в следующем фрагменте кода:
var dialog = new FolderBrowserDialog();
dialog.AutoUpgradeEnabled = false;
dialog.ShowDialog();
Категория
Windows Forms
Затронутые API
Из некоторых типов Windows Forms удален атрибут SerializableAttribute
Атрибут SerializableAttribute был удален из некоторых классов Windows Forms, для которых нет известных сценариев двоичной сериализации.
Описание изменения
Следующие типы помечаются в .NET Framework атрибутом SerializableAttribute, который удален в .NET Core:
System.InvariantComparer
- System.ComponentModel.Design.ExceptionCollection
- System.ComponentModel.Design.Serialization.CodeDomSerializerException
System.ComponentModel.Design.Serialization.CodeDomComponentSerializationService.CodeDomSerializationStore
- System.Drawing.Design.ToolboxItem
System.Resources.ResXNullRef
System.Resources.ResXDataNode
System.Resources.ResXFileRef
- System.Windows.Forms.Cursor
System.Windows.Forms.NativeMethods.MSOCRINFOSTRUCT
System.Windows.Forms.NativeMethods.MSG
Механизм сериализации всегда имел серьезные проблемы в плане обслуживания и безопасности. Поддержка SerializableAttribute
для типов означает, что их необходимо проверять на наличие изменений сериализации в разных версиях, а также, возможно, на разных платформах. Это затрудняет развитие таких типов и делает их обслуживание затратнее. Для этих типов нет известных сценариев двоичной сериализации, благодаря чему удаление атрибута имеет минимальные последствия.
Дополнительные сведения см. в разделе Двоичная сериализация.
Представленные версии
3.0
Рекомендуемое действие
Измените код, работа которого зависит от возможности сериализации этих типов.
Категория
Windows Forms
Затронутые API
- нет
Параметр совместимости AllowUpdateChildControlIndexForTabControls не поддерживается
Параметр совместимости Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
поддерживается в Windows Forms в .NET Framework 4.6 и более поздних версиях, но не поддерживается в .NET Core,а также в .NET Core 5.0 и более поздних версий.
Описание изменения
В .NET Framework 4.6 и более поздних версиях при выборе вкладки ее коллекция элементов управления переупорядочивается. Параметр совместимости Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
позволяет приложению отменить переупорядочивание, если оно не требуется.
В .NET Core и .NET 5.0 и более поздних версий параметр Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
не поддерживается.
Представленные версии
3.0
Рекомендуемое действие
Удалите параметр. Он не поддерживается, и альтернативного варианта нет.
Категория
Windows Forms
Затронутые API
- нет
Параметр совместимости DomainUpDown.UseLegacyScrolling не поддерживается
Параметр совместимости Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
, появившийся в .NET Framework 4.7.1, не поддерживается в Windows Forms в .NET Core и .NET 5.0 и более поздних версий.
Описание изменения
Начиная с версии .NET Framework 4.7.1 параметр совместимости Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
позволял разработчикам отказаться от независимых действий DomainUpDown.DownButton() и DomainUpDown.UpButton(). Параметр восстанавливал прежнее поведение, при котором действие DomainUpDown.UpButton() игнорируется, если присутствует текст контекста, и разработчику необходимо использовать действие DomainUpDown.DownButton() для элемента управления перед использованием действия DomainUpDown.UpButton(). Дополнительные сведения см. в элементе <AppContextSwitchOverrides.>
В .NET Core и .NET 5.0 и более поздних версий параметр Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
не поддерживается.
Представленные версии
3.0
Рекомендуемое действие
Удалите параметр. Он не поддерживается, и альтернативного варианта нет.
Категория
Windows Forms
Затронутые API
Параметр совместимости DoNotLoadLatestRichEditControl не поддерживается
Параметр совместимости Switch.System.Windows.Forms.UseLegacyImages
, появившийся в .NET Framework 4.7.1, не поддерживается в Windows Forms в .NET Core и .NET 5.0 и более поздних версий.
Описание изменения
В платформа .NET Framework 4.6.2 и предыдущих версиях RichTextBox элемент управления создает экземпляр элемента управления Win32 RichEdit версии 3.0 и для приложений, предназначенных для платформа .NET Framework 4.7.1, RichTextBox элемент управления создает экземпляр RichEdit версии 4.1 (в msftedit.dll). Параметр совместимости Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl
был введен для того, чтобы в приложениях, предназначенных для .NET Framework 4.7.1 и более поздних версий, можно было отказаться от использования нового элемента управления RichEdit версии 4.1 и использовать вместо него прежнюю версию 3.
В .NET Core и .NET 5.0 и более поздних версий параметр Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl
не поддерживается. Поддерживаются только новые версии элемента управления RichTextBox.
Представленные версии
3.0
Рекомендуемое действие
Удалите параметр. Он не поддерживается, и альтернативного варианта нет.
Категория
Windows Forms
Затронутые API
Параметр совместимости DoNotSupportSelectAllShortcutInMultilineTextBox не поддерживается
Параметр совместимости Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
, появившийся в .NET Framework 4.6.1, не поддерживается в Windows Forms в .NET Core и .NET 5.0 и более поздних версий.
Описание изменения
Начиная с .NET Framework 4.6.1, при нажатии клавиш CTRL + A в элементе управления TextBox выделяется весь текст. В .NET Framework 4.6 и более ранних версиях при нажатии клавиш CTRL + A выделение всего текста не происходило, если свойства Textbox.ShortcutsEnabled и TextBox.Multiline имели значение true
. Параметр совместимости Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
появился в .NET Framework 4.6.1 для восстановления прежнего поведения. Дополнительные сведения см. по адресу TextBox.ProcessCmdKey.
В .NET Core и .NET 5.0 и более поздних версий параметр Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
не поддерживается.
Представленные версии
3.0
Рекомендуемое действие
Удалите параметр. Он не поддерживается, и альтернативного варианта нет.
Категория
Windows Forms
Затронутые API
- нет
Параметр совместимости DontSupportReentrantFilterMessage не поддерживается
Параметр совместимости Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
, появившийся в .NET Framework 4.6.1, не поддерживается в Windows Forms в .NET Core и .NET 5.0 и более поздних версий.
Описание изменения
Начиная с .NET Framework 4.6.1, параметр совместимости Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
устраняет возможные исключения IndexOutOfRangeException при вызове сообщения Application.FilterMessage с пользовательской реализацией IMessageFilter.PreFilterMessage. Дополнительные сведения см. в разделе Устранение рисков: пользовательские реализации IMessageFilter.PreFilterMessage.
В .NET Core и .NET 5.0 и более поздних версий параметр Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
не поддерживается.
Представленные версии
3.0
Рекомендуемое действие
Удалите параметр. Он не поддерживается, и альтернативного варианта нет.
Категория
Windows Forms
Затронутые API
Параметр совместимости EnableVisualStyleValidation не поддерживается
Параметр совместимости Switch.System.Windows.Forms.EnableVisualStyleValidation
не поддерживается в Windows Forms в .NET Core или .NET 5.0 и более поздних версий.
Описание изменения
В .NET Framework параметр совместимости Switch.System.Windows.Forms.EnableVisualStyleValidation
позволял приложению отказаться от проверки визуальных стилей, предоставленных в числовой форме.
В .NET Core и .NET 5.0 и более поздних версий параметр Switch.System.Windows.Forms.EnableVisualStyleValidation
не поддерживается.
Представленные версии
3.0
Рекомендуемое действие
Удалите параметр. Он не поддерживается, и альтернативного варианта нет.
Категория
Windows Forms
Затронутые API
- нет
Параметр совместимости UseLegacyContextMenuStripSourceControlValue не поддерживается
Параметр совместимости Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
, появившийся в .NET Framework 4.7.2, не поддерживается в Windows Forms в .NET Core и .NET 5.0 и более поздних версий.
Описание изменения
Начиная с версии .NET Framework 4.7.2 параметр совместимости Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
позволяет разработчикам отказаться от нового поведения свойства ContextMenuStrip.SourceControl, которое теперь возвращает ссылку на систему управления версиями. Ранее это свойство возвращало null
. Дополнительные сведения см. в элементе <AppContextSwitchOverrides.>
В .NET Core и .NET 5.0 и более поздних версий параметр Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
не поддерживается.
Представленные версии
3.0
Рекомендуемое действие
Удалите параметр. Он не поддерживается, и альтернативного варианта нет.
Категория
Windows Forms
Затронутые API
Параметр совместимости UseLegacyImages не поддерживается
Параметр совместимости Switch.System.Windows.Forms.UseLegacyImages
, появившийся в .NET Framework 4.8, не поддерживается в Windows Forms в .NET Core и .NET 5.0 и более поздних версий.
Описание изменения
Начиная с .NET Framework 4.8 параметр совместимости Switch.System.Windows.Forms.UseLegacyImages
устраняет возможные проблемы с масштабированием изображений в сценариях ClickOnce в средах с высоким DPI. Если задано значение true
, параметр позволяет пользователю восстановить прежний способ масштабирования изображений при высоком уровне DPI, когда масштаб составляет более 100 %. Дополнительные сведения см. в заметках о выпуске .NET Framework 4.8 в GitHub.
В .NET Core и .NET 5.0 и более поздних версий параметр Switch.System.Windows.Forms.UseLegacyImages
не поддерживается.
Представленные версии
3.0
Рекомендуемое действие
Удалите параметр. Он не поддерживается, и альтернативного варианта нет.
Категория
Windows Forms
Затронутые API
- нет
Шаблоны About и SplashScreen не работают
Файлы About.vb
и SplashScreen.vb
, созданные Visual Studio, содержат ссылки на типы в пространстве имен My
, которые недоступны для .NET Core 3.0 и 3.1.
Представленные версии
3.0
Описание изменения
.NET Core 3,0 и 3,1 не предоставляет полную поддержку функции My
в Visual Basic. Шаблоны форм About и SplashScreen в Visual Studio для приложений Windows Forms на Visual Basic ссылаются на недоступные свойства типа My.Application.Info
.
Рекомендуемое действие
Поддержка функции My
в Visual Basic была улучшена в .NET 5, обновите свой проект до .NET 5 или более поздней версии.
–или–
Исправьте ошибки компилятора в типах About и SplashScreen в приложении. Используйте класс System.Reflection.Assembly
для получения сведений, предоставленных типом My.Application.Info
. Прямой порт обеих форм доступен здесь.
Совет
Это пример кода, который является оптимизированным. Список атрибутов следует помещать в кэш, чтобы сократить время загрузки формы.
О программе
Imports System.Reflection
Public NotInheritable Class About
Private Sub about_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Set the title of the form.
Dim applicationTitle As String = Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyTitleAttribute)()?.Title
If String.IsNullOrEmpty(applicationTitle) Then
applicationTitle = System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().GetName().Name)
End If
Me.Text = String.Format("About {0}", applicationTitle)
' Initialize all of the text displayed on the About Box.
' TODO: Customize the application's assembly information in the "Application" pane of the project
' properties dialog (under the "Project" menu).
Me.LabelProductName.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyProductAttribute)()?.Product, "")
Me.LabelVersion.Text = String.Format("Version {0}", Assembly.GetExecutingAssembly().GetName().Version)
Me.LabelCopyright.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCopyrightAttribute)()?.Copyright, "")
Me.LabelCompanyName.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCompanyAttribute)()?.Company, "")
Me.TextBoxDescription.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyDescriptionAttribute)()?.Description, "")
End Sub
Private Sub OKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OKButton.Click
Me.Close()
End Sub
End Class
Экран-заставка
Imports System.Reflection
Public NotInheritable Class SplashScreen
Private Sub SplashScreen1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'Set up the dialog text at runtime according to the application's assembly information.
'TODO: Customize the application's assembly information in the "Application" pane of the project
' properties dialog (under the "Project" menu).
'Application title
Dim appTitle As String = Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyTitleAttribute)()?.Title
If String.IsNullOrEmpty(appTitle) Then
appTitle = System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().GetName().Name)
End If
ApplicationTitle.Text = appTitle
Dim versionValue = Assembly.GetExecutingAssembly().GetName().Version
'Format the version information using the text set into the Version control at design time as the
' formatting string. This allows for effective localization if desired.
' Build and revision information could be included by using the following code and changing the
' Version control's designtime text to "Version {0}.{1:00}.{2}.{3}" or something similar. See
' String.Format() in Help for more information.
'
' Version.Text = System.String.Format(Version.Text, versionValue.Major, versionValue.Minor, versionValue.Build, versionValue.Revision)
Version.Text = System.String.Format(Version.Text, versionValue.Major, versionValue.Minor)
'Copyright info
Copyright.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCopyrightAttribute)()?.Copyright, "")
End Sub
End Class
Категория
Windows Forms на Visual Basic
Затронутые API
нет
Типы из пространства имен Microsoft.VisualBasic.ApplicationServices теперь недоступны
Типы в пространстве имен Microsoft.VisualBasic.ApplicationServices недоступны.
Представленные версии
.NET Core 3.0
Описание изменения
Типы в пространстве имен Microsoft.VisualBasic.ApplicationServices были доступны в .NET Framework. Они недоступны в .NET Core 3.0–3.1.
Типы были удалены во избежание ненужных зависимостей сборок или критических изменений в последующих выпусках.
Рекомендуемое действие
Это пространство имен было добавлено в .NET 5. Обновите проект до .NET 5 или более поздней версии.
–или–
Если в вашем коде применяются типы Microsoft.VisualBasic.ApplicationServices и их члены, вы можете использовать соответствующий тип или член из библиотеки классов .NET. Например, некоторые члены System.Environment и System.Security.Principal.WindowsIdentity обеспечивают возможности, эквивалентные свойствам класса Microsoft.VisualBasic.ApplicationServices.User.
Категория
Visual Basic
Затронутые API
Типы из пространства имен Microsoft.VisualBasic.Devices теперь недоступны
Типы в пространстве имен Microsoft.VisualBasic.Devices недоступны.
Представленные версии
.NET Core 3.0
Описание изменения
Типы в пространстве имен Microsoft.VisualBasic.Devices были доступны в .NET Framework. Они недоступны в .NET Core 3.0–3.1.
Типы были удалены во избежание ненужных зависимостей сборок или критических изменений в последующих выпусках.
Рекомендуемое действие
Это пространство имен было добавлено в .NET 5. Обновите проект до .NET 5 или более поздней версии.
–или–
Если в вашем коде применяются типы Microsoft.VisualBasic.Devices и их члены, вы можете использовать соответствующий тип или член из библиотеки классов .NET. Например, возможности, эквивалентные классу Microsoft.VisualBasic.Devices.Clock, предоставляются типами System.DateTime и System.Environment, а классу Microsoft.VisualBasic.Devices.Ports — типами в пространстве имен System.IO.Ports.
Категория
Visual Basic
Затронутые API
Типы из пространства имен Microsoft.VisualBasic.MyServices теперь недоступны
Типы в пространстве имен Microsoft.VisualBasic.MyServices недоступны.
Представленные версии
.NET Core 3.0
Описание изменения
Типы в пространстве имен Microsoft.VisualBasic.MyServices были доступны в .NET Framework. Они недоступны в .NET Core 3.0–3.1.
Типы были удалены во избежание ненужных зависимостей сборок или критических изменений в последующих выпусках.
Рекомендуемое действие
Это пространство имен было добавлено в .NET 5. Обновите проект до .NET 5 или более поздней версии.
–или–
Если в вашем коде применяются типы Microsoft.VisualBasic.MyServices и их члены, вы можете использовать соответствующие типы и члены из библиотеки классов .NET. Ниже представлено сопоставление типов Microsoft.VisualBasic.MyServices и эквивалентных типов в библиотеке классов .NET.
Тип Microsoft.VisualBasic.MyServices | Тип в библиотеке классов .NET |
---|---|
ClipboardProxy | System.Windows.Clipboard для приложений WPF, System.Windows.Forms.Clipboard для приложений Windows Forms |
FileSystemProxy | Типы в пространстве имен System.IO |
RegistryProxy | Связанные с реестром типы в пространстве имен Microsoft.Win32 |
SpecialDirectoriesProxy | Environment.GetFolderPath |
Категория
Visual Basic
Затронутые API
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по