使用 Windows 兼容性包将代码移植到 .NET CoreUse the Windows Compatibility Pack to port code to .NET Core

本文内容

将现有代码移植到 .NET Core 时发现的一些最常见问题依赖于仅在 .NET Framework 中找到的 API 和技术。Windows 兼容性包 提供许多这些技术,因此可以更轻松地生成 .NET Core 应用程序和 .NET Standard 库。

此包是 .NET Standard 2.0 的逻辑扩展,显著增加了 API 集和现有代码编译,而几乎无需进行任何修改。但为了信守 .NET Standard 的承诺(“它是一组所有 .NET 实现都提供的 API”),这不包括无法跨所有平台工作的技术,如注册表、Windows Management Instrumentation (WMI) 或反射发出 API。

Windows 兼容性包 位于 .NET Standard 顶部,提供对仅用于 Windows 的技术的访问权限。它对于第一步想要移动到 .NET Core 但仍计划停留在 Windows 上的客户尤其有用。在这种情况下,无法使用仅限 Windows 的技术只会造成迁移障碍,没有任何体系结构优势。

包内容Package contents

Windows 兼容性包 通过 NuGet 包 Microsoft.Windows.Compatibility 提供,可从面向 .NET Core 或 .NET Standard 的项目引用。

它提供了约 20,000 个 API,包括仅 Windows API 以及以下技术领域中的跨平台 API:

  • 代码页
  • CodeDom
  • 配置
  • 目录服务
  • 绘图
  • ODBC
  • 权限
  • 端口
  • Windows 访问控制列表 (ACL)
  • Windows Communication Foundation (WCF)
  • Windows 加密
  • Windows 事件日志
  • Windows Management Instrumentation (WMI)
  • Windows 性能计数器
  • Windows 注册表
  • Windows 运行时缓存
  • Windows 服务有关详细信息,请参阅兼容包规范

入门Get started

  • 移植之前,请确保查看移植过程

  • 将现有代码移植到 .NET Core 或 .NET Standard 时,请安装 NuGet 包 Microsoft.Windows.Compatibility

  • 如果要停留在 Windows 上,则已准备完毕。

  • 如果要在 Linux 或 macOS 上运行 .NET Core 应用程序或 .NET Standard 库,请使用 API 分析器查找不会跨平台工作的 API 的使用情况。

  • 删除这些 API 的使用情况、将其替换为跨平台替代项,或使用平台检查对其实施保护,例如:

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

有关演示,请查看 Windows 兼容性包的第 9 频道视频