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


Использование пакета совместимости Windows для переноса кода в .NET

Некоторые из наиболее распространенных проблем, обнаруженных при переносе существующего кода из .NET Framework в .NET, зависят от API и технологий, которые находятся только в .NET Framework. Пакет совместимости Windows предоставляет множество этих технологий, поэтому гораздо проще создавать приложения .NET и библиотеки .NET Standard.

Пакет совместимости — это логическое расширение .NET Standard 2.0 , которое значительно увеличивает набор API. Существующий код компилируется практически без изменений. Чтобы сохранить свое обещание "набор API, предоставляемых всеми реализациями .NET", .NET Standard не включает технологии, которые не могут работать на всех платформах, такие как реестр, Windows Management Instrumentation (WMI) или API для создания кода через отражение. Пакет совместимости Windows находится на вершине .NET Standard и предоставляет доступ к этим технологиям только для Windows. Это особенно полезно для клиентов, которые хотят перейти в .NET, но планируют остаться в Windows, по крайней мере, в качестве первого шага. В этом сценарии использование технологий, доступных только для Windows, помогает преодолеть препятствия миграции.

Содержимое пакета

Пакет совместимости Windows предоставляется через пакет NuGet Microsoft.Windows.Compatibility и может использоваться в проектах, предназначенных для .NET или .NET Standard.

Он предоставляет около 20 000 API, включая кроссплатформенные API только для Windows и из следующих технологических областей:

  • Кодовая страница
  • CodeDom
  • Конфигурация
  • Службы каталогов
  • Рисование
  • ODBC (Интерфейс открытой базы данных)
  • Разрешения
  • Порты
  • Списки управления доступом Windows (ACL)
  • Windows Communication Foundation (WCF)
  • Криптография Windows
  • Журнал событий Windows
  • Инструментарий управления Windows (WMI)
  • Счетчики производительности Windows
  • реестр Windows;
  • Кэширование среды выполнения Windows
  • Службы Windows

Дополнительные сведения см. в спецификации пакета совместимости.

Начало работы

  1. Прежде чем переносить, ознакомьтесь с процессом переноса.

  2. При переносе существующего кода в .NET или .NET Standard установите пакет NuGet Microsoft.Windows.Compatibility.

    Если вы хотите остаться на Windows, все готово.

  3. Если вы хотите запустить приложение .NET или библиотеку .NET Standard в Linux или macOS, используйте анализатор совместимости платформы, чтобы найти использование интерфейсов API, которые не будут работать на других платформах.

  4. Удалите использование этих API, замените их кроссплатформенными альтернативами или защитите их с помощью проверки платформы, например:

    private static string GetLoggingPath()
    {
        // Verify the code is running on Windows.
        if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
        {
            using (var key = Registry.CurrentUser.OpenSubKey(@"Software\Fabrikam\AssetManagement"))
            {
                if (key?.GetValue("LoggingDirectoryPath") is string configuredPath)
                    return configuredPath;
            }
        }
    
        // This is either not running on Windows or no logging path was configured,
        // so just use the path for non-roaming user-specific data files.
        var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
        return Path.Combine(appDataPath, "Fabrikam", "AssetManagement", "Logging");
    }
    

Чтобы ознакомиться с демонстрацией, ознакомьтесь с видео канала 9 пакета совместимости Windows.