为什么 WinRT 的托管版本不包括对 .NET API 的访问?

Why does the managed version of WinRT not include access to the .NET API?

最近我开始在 WinRT 中使用 C# 为 Windows 商店应用程序(以及即将推出的 Windows 10 个通用应用程序)工作。在之前使用 .NET 工作了一段时间后,我很高兴能在移动设备上使用 .NET,却发现 WinRT 根本不像家。

我经常发现自己必须搜索我在 .NET 中熟悉的某些 类 的替代方案,因为它们通常不相同,甚至在 WinRT 中实现也不相同。我认为缺乏实​​现是因为 WinRT 的核心是非托管的,即使 CLR 从托管代码绑定到它。

我的问题是:是什么阻止了 Microsoft 允许开发人员从托管代码导入和使用所有熟悉的 .NET 类,即使使用 WinRT 运行ning behind? 我知道这不是设备的限制,因为我的 Surface Pro 可以 运行 桌面 .NET 应用程序,而且 Mono 项目已经成功移植了几乎整个 .NET API各种设备。

感谢您的意见!

这是一个很大的话题,但您无法从 Windows 商店应用程序中获得完整的 .NET API 的三个基本原因。

  1. API 不适合手机等较小的设备。 因为通用 Windows 平台的目的是让应用程序可以运行 无处不在,它不能包括 API 资源密集型(磁盘、内存、CPU 等)到 运行 在较小的设备上。 (请注意,即使托管 API 看起来很小,它也可能依赖于大型底层 Win32 API)。
  2. APIs 与商店应用程序模型不兼容。许多需要未授予商店应用程序权限的 APIs 属于此问题类别,API 可以使应用程序对您的机器执行 "unwanted" 操作("unwantedness" 的程度是主观的)。
  3. API已弃用或有更新的替代品。 Windows 中有很多 API 就是这种情况8,其中文件系统访问和网络套接字之类的东西被商店应用程序阻止,因为有更新的 WinRT 等价物。

请注意,Microsoft 始终愿意重新评估是否应包含特定 API。例如,Windows 10 带回了许多在 Windows 8.1 中被禁止的 API(例如 System.IOSystem.Net.Sockets),并扩展了授予的功能应用。您可以通过 Windows 反馈应用程序或 on UserVoice 提交反馈,如果您想要额外的 API 反馈(添加详细的理由永远不会有坏处)。