如何创建一个 WPF 应用程序,该应用程序可以部署为 XBAP 或本地 Windows 应用程序,并且开销尽可能少?XBAP 与 WPF Windows 应用程序二进制兼容,并在相同的 CLR 之上运行(与 Silverlight 不同)。它们在某些方面仍然不同。
从部署的角度来看,它们最大的区别是 XBAP 有一个 Page 控件作为主容器,而 Windows 应用程序有一个 Window 控件。让 Windows 应用程序使用 Page 控件相当简单,但我觉得(尽管不同意)在 Windows 应用程序中使用 Page 导航方法是相当不直观的。
第二个主要区别是默认情况下 XBAP 在部分受信任的环境中执行。不过,这可以绕过,XBAP 可以在完全信任模式下运行。XBAP 的部分信任模式意味着您不能直接从 XBAP 访问远程 Web 服务或本机代码。
对于上述问题,实现以下目标的简单且可维护的方法是什么?
要求
- 可通过两种方式部署:作为基于 http 的 XBAP 和作为独立的 WPF 可执行文件。
- 显示来自远程 Web 服务器(如 flickr)或通过非托管 API 的信息。
- 如果可能,部署方法应该忠实于他们的平台。也就是说:使用 XBAP 中有意义的页面和 Windows 应用程序中有意义的对话框。
限制
- 平台优化。XBAP 所需的东西不应影响 Windows 客户端,反之亦然。
- 部署选项共享尽可能多的代码。这有助于测试和维护。
- 运行 XBAP 应该尽可能简单。证书前置要求会破坏 XBAP 的目的。
我收集到的是第一个要求需要两个单独的项目。第二个限制可以通过拥有一个包含所有 UI 并被两个部署项目引用的用户控件项目来解决。WCF Web 服务可以解决 XBAP 的限制。
如果采用类似于上述行的解决方案,则第一个限制将需要一些工作,因为 Windows 客户端可以在没有 WCF 服务的情况下完成,因为它已经在完全信任模式下运行。第三个要求还需要一些特定于部署的代码,因此所有 UI 代码都不能在用户控件项目中。
我想知道可以使用哪些解决方案来解决这些问题。随意忽略部分解决方案。它主要是为了解释这一点并防止“已经想到这一点”的评论。所以澄清一下,我对这个问题的所有解决方案都感兴趣,而不仅仅是那些遵守部分解决方案的解决方案。
对此感兴趣的原因是,解决方案意味着无需在 WPF Windows 应用程序和 XBAP 之间进行考虑,因为这两者都可以轻松创建,并且客户可以选择最适合他们的那个。