4

我开始着手移植我为在 Windows 8 应用商店中部署而编写的应用程序。这需要针对 .NET 框架的子集编写应用程序。我的应用程序遵循一个架构,其中核心功能在它自己的 dll 中,并且文件系统访问之类的事情是通过 IoC 完成的。基本上,这意味着核心 dll 的唯一依赖项是 System.dll。正因为如此,我认为移植将是一件轻而易举的事——设置我的 IoC 值并连接一个 GUI,然后我就可以开始了。只是,我什至无法从 Windows 商店应用程序(又名 Metro 应用程序)中引用我的核心 dll。

我错过了什么吗?实际上是否必须重写我的核心 dll 才能包含在 Windows 8 应用商店中?我们被告知,如果您使用良好的架构,那么移植将变得轻而易举,这就是我所做的。这只是一个很大的谎言吗?

4

3 回答 3

4

Windows 应用商店应用(以前称为 Metro 风格应用)仅限于使用 .NET Core Profile。我在对这个问题的回答中添加了一些有关核心配置文件的详细信息。有关详细信息,请参阅本文中的转换现有 .NET Framework 代码。这不是您的体系结构,而是可供 Windows 应用商店应用程序使用的 .NET Framework 子集。您可能不得不用 WinRT 类型来补充您在 .NET 中使用的某些类型。

于 2012-07-25T17:20:47.903 回答
1

我没有广泛的知识,并且会尽量坚持我所理解的事实。Metro 框架增加了功能,也限制了功能。有严格的安全限制和完整的 .Net 框架的大部分不可用(例如,您不能使用 System.Data,一些 System.IO 和文件访问方法已发生巨大变化)。Metro 应用程序是隔离的,您将无法像在标准应用程序中那样递归硬盘驱动器上的所有文件(我认为,除了通过隔离实现安全性之外,还鼓励您进入云存储需求)。

除非事情发生了变化,否则 PInvoke 仅限于“批准”的 Win32 API 方法。

有关常见 Win32 API 需求的一些替代方案,请参阅此链接:http: //msdn.microsoft.com/en-us/library/windows/apps/hh464945.aspx

有关已批准的 Win32/COM API,请参阅此链接:http: //msdn.microsoft.com/en-us/library/windows/apps/br205762.aspx

很难说一个“好的”架构是否会轻而易举地移植,而不知道该架构中的代码是什么。在我的实用程序框架中,我有一些非常容易移植的东西(或者至少很简单),以及需要大量重写的彻底清洗的东西(例如 System.Data 的丢失对我来说是一个痛处)。有些东西可以设计得很好,但是当你在框架或 API 中取出底层代码时,它是用它编写的,需要重写。

于 2012-07-25T16:04:19.240 回答
0

我遇到了同样的问题:Metro 应用程序的项目不加载使用 .4 框架创建的 dll。我将 dll 的框架从 4 更改为 3.5,现在 Metro 项目可以看到它们。

于 2013-04-26T07:05:36.200 回答