windows运行时-为什么WinRT的托管版本不包括对.NET API的访问



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

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

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

感谢您的投入!

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

  1. API不适用于手机等较小的设备由于通用Windows平台的目的是让应用程序可以在任何地方运行,因此它不能包含资源密集型的API(磁盘、内存、CPU等),无法在较小的设备上运行。(请注意,即使托管API看起来很小,它也可能依赖于大型的底层Win32 API)
  2. API与Store应用程序模型不兼容许多需要未授予Store应用程序权限的API都属于这一类,允许应用程序对您的机器做"不需要的"事情的API也是如此("不知情"的程度是主观的)
  3. API已弃用,或者有更新的替代方案Windows 8中的许多API都是这样,因为有更新的WinRT等效程序,文件系统访问和网络套接字等内容被阻止进入应用商店

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

最新更新