我正在创建一个简单的地铁应用程序。我还在创建同一应用程序的非 Metro 版本。
我面临的问题是VS不允许我将普通类库引用到metro应用程序中,并将metro类库引用到普通应用程序中。
Metro 和非 Metro 应用程序之间的差异与 UI 和一些不兼容的功能有关(例如 Metro 中的 FilePicker 和非 Metro 中的 OpenFileDialog)。
如何做到这一点?
我正在创建一个简单的地铁应用程序。我还在创建同一应用程序的非 Metro 版本。
我面临的问题是VS不允许我将普通类库引用到metro应用程序中,并将metro类库引用到普通应用程序中。
Metro 和非 Metro 应用程序之间的差异与 UI 和一些不兼容的功能有关(例如 Metro 中的 FilePicker 和非 Metro 中的 OpenFileDialog)。
如何做到这一点?
差异比您预期的要大得多。他们正在使用 WinRT 作为清理房屋并删除由于各种原因不想再维护的 API 的机会。研究“可移植类库”,它可以让你根据你告诉 VS 目标的平台中可用的 API 的小交集创建一个 dll
Metro UI 不是问题:查看“Under the Hood”,您会发现命名空间和库并不相同 => METRO 不在 Windows 7 应用程序之上的另一层。如果您真的想针对这 2 个环境,请创建一个包含所有业务对象、所有数据库访问的单个类库,并编写两个不同的应用程序调用此库。
本质上,WinRT 与 Robert Levy 提到的 Win32 库是完全分开的。
事实上,当 Windows 8 在 ARM 设备上使用时,Win32 库实际上是不存在的。Internet Explorer 10 对它们的访问受限(仅由 WinRT 提供支持的 Internet 浏览器是不切实际的),但所有其他 Metro 应用程序都没有。
x86 和 x64 上的 Metro 应用程序也无法访问 Win32,因为假定相同的应用程序需要与 ARM 兼容。为了降低复杂性,微软基本上表示所有 Metro 应用程序只能访问 WinRT。Internet Explorer 是该规则的一个例外。
我想说的是:您必须分别开发这两个应用程序。以桌面为中心的应用程序完全驻留在桌面上。Metro 应用程序仅驻留在 Metro 接口中。