对于经验丰富的 WPFers,WPF、Silverlight 和 Silverlight OOB 应用程序和组件的可重用性如何?有多少重叠?
例如,我是否可以编写一个应用程序并以上述三种方式轻松部署它?
理想情况下,我希望编写尽可能少的代码,并具有在各种场景中部署它的灵活性,可能会根据部署启用某些功能。WPF 技术家族对于不经意的观察者来说似乎是一个很好的起点。但真的是这样吗?
对于经验丰富的 WPFers,WPF、Silverlight 和 Silverlight OOB 应用程序和组件的可重用性如何?有多少重叠?
例如,我是否可以编写一个应用程序并以上述三种方式轻松部署它?
理想情况下,我希望编写尽可能少的代码,并具有在各种场景中部署它的灵活性,可能会根据部署启用某些功能。WPF 技术家族对于不经意的观察者来说似乎是一个很好的起点。但真的是这样吗?
答案的简化版本是:
1. Silverlight 大致是 WPF 的一个子集。
2. 浏览器应用程序中的 Silverlight 和 Silverlight OOB 应用程序运行在完全相同的框架上。这只是部署差异。
3. 部分OOB应用可以作为“可信”应用安装,安全限制比浏览器应用要宽松。
将 WPF 应用程序移植到 Silverlight 可能会非常困难,因为 WPF 应用程序可能会使用 .net 框架的许多功能,而这些功能在 Silverlight 应用程序可用的框架的较小子集中不可用。这是您可能想要避免的事情。
将 Silverlight 应用程序移植到 WPF 可能要容易得多。这仍然是一个挑战,因为 Silverlight 中没有 WPF 中的功能(尽管没有相反的那么多)。除了功能增量之外,运行 Silverlight/WPF 应用程序的实际框架也不同,因此在移植过程中,您可能会遇到两者之间的行为差异。
Silverlight 和 Silverlight OOB 应用程序在同一框架上运行。可以在两个地方运行完全相同的应用程序二进制文件。在大多数情况下,它们的行为是相同的。一些区别:浏览器内应用程序可以依赖浏览器功能,例如访问 html dom、调用 javascript 等。OOB 应用程序不在浏览器中运行,因此显然这不适用。此外,如果我们正在处理一个“受信任的”OOB 应用程序,它可以做一些出于安全原因在浏览器中被阻止的事情(例如 COM 互操作)。
如果您想创建一个在所有三个地方都运行的应用程序,我的建议是开始将该应用程序构建为一个独立的浏览器内 Silverlight 应用程序,即它不依赖于托管它的网页,并且包括 xap 包内的所有必要资源(而不是依赖于它们位于 Web 服务器上的包旁边)。将这样的应用程序移植到 Silverlight OOB 应用程序将是小菜一碟 - 几乎只需在 Visual Studio 中选中一个框,您就完成了。将其移植到 WPF 将是大量的工作,但它比采用其他方式要好得多。