从 .NET 中删除对 WinRT 的内置支持

删除了对使用 .NET 中的 Windows 运行时 (WinRT) API 的内置支持。

已引入的版本

5.0

更改描述

以前,CoreCLR 可以使用 Windows 元数据 (WinMD) 文件 来激活和使用 WinRT 类型。 从 .NET 5 开始,CoreCLR 无法再直接使用 WinMD 文件。

如果尝试引用不受支持的程序集,你将获得一个 FileNotFoundException。 如果激活 WinRT 类,则会收到 PlatformNotSupportedException

此重大变更的原因如下:

  • 因此,可以独立于 .NET 运行时开发和改进 WinRT。
  • 为了与为其他操作系统(例如 iOS 和 Android)提供的互操作系统对称。
  • 为了利用其他 .NET 功能,例如 C# 功能、中间语言 (IL) 剪裁和预先 (AOT) 编译。
  • 简化 .NET 运行时代码库。
  • 删除对 Microsoft.Windows.SDK.Contracts 包的引用。 请改为指定要通过 TargetFramework 项目属性访问的 Windows API 版本。 例如:

    <TargetFramework>net5.0-windows10.0.19041.0</TargetFramework>
    
  • 如果要使用 .winmd 文件中定义的第三方运行时组件,请添加对 Microsoft.Windows.CsWinRT NuGet 包的引用。 有关如何生成 C# 投影的信息,请参阅 C#/WinRT 文档。

有关详细信息,请参阅 在桌面应用中调用 Windows 运行时 API

受影响的 API