Поделиться через


Модернизация после перехода с .NET Framework на .NET

В этой статье вы узнаете о различных способах модернизации приложения после обновления с .NET Framework до .NET. Используйте средство помощника по обновлению .NET для обновления приложения до .NET.

Отсутствующие API

При обновлении приложения .NET Framework у вас, скорее всего, есть некоторые несовместимости. Это связано с тем, что платформа .NET Framework — это технология, доступная только для Windows, и .NET — это кроссплатформенная технология. Некоторые библиотеки не соответствуют ожиданиям. Например, .NET не предоставляет готовых к использованию API для доступа к реестру Windows, как это делало .NET Framework. Поддержка реестра Windows предоставляется пакетом NuGet Microsoft.Win32.Registry. Многие библиотеки .NET Framework перенесены в .NET или .NET Standard и размещаются в NuGet. Если в проекте отсутствует ссылка, выполните поиск в NuGet.

Пакет совместимости Windows

Если после миграции есть некоторые зависимости от API .NET Framework, которые не поддерживаются в новой версии .NET, их можно найти в Microsoft.Windows.Compatibility пакете NuGet. Он добавляет около 20 000 API в проект .NET, значительно увеличив набор API, доступный для вашего проекта. Эти API включают api только для Windows, такие как те, которые связаны с инструментарием управления Windows (WMI) и журналом событий Windows. Дополнительные сведения см. в статье Использование пакета совместимости Windows для переноса кода на .NET.

Элемент управления веб-браузером

Проекты, предназначенные для классической технологии Windows, например Windows Presentation Foundation или Windows Forms, могут включать элемент управления веб-браузером. Предоставленный элемент управления веб-браузера, скорее всего, был разработан до HTML5 и других современных веб-технологий и считается устаревшим. Корпорация Майкрософт публикует Microsoft.Web.WebView2 пакет NuGet как современную замену элемента управления веб-браузером.

App.config

Платформа .NET Framework использует файл App.config для загрузки параметров приложения, таких как строки подключения и конфигурация поставщика журналов. Современный .NET использует файл appsettings.json для параметров приложения. Версия CLI инструмента Upgrade Assistant обрабатывает преобразование файлов App.config в appsettings.json, но расширение Visual Studio не поддерживает.

Совет

Если вы не хотите использовать файл appsettings.json, можно добавить пакет NuGet System.Configuration.ConfigurationManager в приложение, а код будет компилировать и использовать файл App.config.

Несмотря на то, что appsettings.json является современным способом хранения и извлечения параметров и строк подключения, приложение по-прежнему имеет код, использующий файл App.config. Когда ваше приложение было перенесено, пакет NuGet System.Configuration.ConfigurationManager был добавлен в проект, чтобы ваш код, использующий файл App.config, продолжал компилироваться.

При обновлении библиотек до .NET они модернизируются, поддерживая appsettings.json вместо App.config. Например, поставщики журналов в .NET Framework, которые были обновлены для .NET 6+ больше не используют App.config для параметров. Вам будет полезно следовать их указаниям и отказаться от использования App.config.

Поддержка appsettings.json предоставляется пакетом NuGet Microsoft.Extensions.Configuration.

Выполните следующие действия, чтобы использовать файл appsettings.json в качестве поставщика конфигурации:

  1. Удалите пакет или библиотеку NuGet System.Configuration.ConfigurationManager, если на него ссылается обновленное приложение.

  2. Добавьте пакет Microsoft.Extensions.Configuration.Json NuGet.

  3. Создайте файл с именем appsettings.json.

    1. Щелкните правой кнопкой мыши файл проекта в обозревателе решений и выберите Добавить>новый элемент.
    2. В поле поиска введите json.
    3. Выберите шаблон файла конфигурации JavaScript JSON, и задайте имя на appsettings.json.
    4. Нажмите Добавить, чтобы добавить новый файл в проект.
  4. Задайте файл appsettings.json для копирования в выходной каталог.

    В обозревателе решений найдите файл appsettings.json и задайте следующие свойства:

    • действие сборки: содержимое
    • Копировать в выходной каталог: Копировать всегда
  5. В коде запуска приложения необходимо загрузить файл параметров.

    Код запуска приложения зависит от типа проекта. Например, приложение WPF использует файл App.xaml.cs для глобальной установки, а приложение Windows Forms использует метод Program.Main для запуска. Независимо от того, необходимо выполнить две задачи при запуске:

    • Создайте элемент internal static (Friend Shared в Visual Basic), к которому можно получить доступ в любом месте приложения.
    • При запуске системы назначьте экземпляр этому участнику.

    В следующем примере создается элемент с именем Config, которому присваивается экземпляр в методе Main, и загружается строка подключения.

    using Microsoft.Extensions.Configuration;
    
    internal class Program
    {
        internal static IConfiguration Config { get; private set; }
    
        private static void Main(string[] args)
        {
            Config = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json")
                .Build();
    
            // Use the config file to get a connection string.
            string? myConnectionString = Config.GetConnectionString("database");
    
            // Run the rest of your app.
        }
    }
    
    Imports Microsoft.Extensions.Configuration
    
    Module Program
    
        Private _config As IConfiguration
    
        ' Shared not required since Program is a Module
        Friend Property Config As IConfiguration
    
            Get
                Return _config
            End Get
            Private Set(value As IConfiguration)
                _config = value
            End Set
    
        End Property
    
        Sub Main(args As String())
    
            Config = New ConfigurationBuilder() _
                .AddJsonFile("appsettings.json") _
                .Build()
    
            ' Use the config file to get a connection string
            Dim myConnectionString As String = Config.GetConnectionString("database")
    
            ' Run the rest of your app
        End Sub
    End Module
    
  6. Обновите остальную часть кода, чтобы использовать новые API конфигурации.

  7. Удалите файл App.config из проекта.

    Осторожность

    Убедитесь, что приложение работает правильно без файла App.config. Создайте резервную копию файла App.config с помощью системы управления версиями или скопируйте файл в другом месте. После тщательного тестирования приложения удалите файл App.config.