Prism 4 文档 ---第11章 部署Prism应用程序


    要成功移动Prism应用到生产中,需要对部署计划为应用程序的设计过程的一部分。本章介绍了注意事项和你需要采取的准备以部署应用程序,以及你要在用户手中获得部署程序所需要采取的行动。     Silverlight和WPF有两个不同的承载环境,所以部署考虑的内容就不同了,这依赖于是否你在构建一个Silverlight Prism应用程序还是一个WPF Prism应用程序。 部署Silverlight Prism应用程序     Silverlight应用程序通过Http请求昨晚XAP文件从浏览器被分发。XAP文件其实仅仅是一个.zip文件,有一个不同的预期的内容的文件名称。一个XAP文件包含着一系列的程序集,一个描述应用程序包的XAML文件,和应用程序可能会用到的额外的资源文件。XAP文件通过一个嵌在Web页面的SilverLight插件被下载。在Silverlight插件被下载下来之后,它会激活应用程序并在web页面中运行内容。     甚至假如你计划在浏览器外运行你的Silverlight应用程序,用户也将会首先需要在浏览器中通过承载页面获取应用程序;在这之后,用户可以选择性的安装浏览器外应用程序。结果是,基于Prism的Silverlight应用程序的部署将很有可能作为从一个Web服务器上下载XAP文件的主要地方因此承载业可以下载并运行她们。

将Prism模块打包成XAP文件

    就像在第4章中讨论的,你可以将你的模块通过多种方式打包,包括即那个多个模块作为一个XAP文件或者一个单独的XAP文件作为一个单独模块的容器。打包方式的决定取决于多个模块是否需要被同时下载由于他们之间的依赖关系或者应用程序的使用情况,或者模块生命周期内在逻辑上是独立的和分离的。将每个模块打包到自己的XAP文件中科院从部署前景和维护中相对的清晰,因为每个XAP文件成为了一个单独的部署单元,每个模块的XAP文件可以单独的版本化,并且可以通过简单的改变以下模块目录来从应用程序中添加或者移除。     作为一个例子,考虑Stock Trader Reference Implementation (Stock Trader RI )项目的架构。它由Shell和四个模块组成,四个模块:Position,watch,market,和news.因为应用程序被设计为所有的这些功能在应用程序启动时被“点亮”,所有的Stcok Trader RI 的模块是被静态添加的。Stock Trader RI shell应用程项目将所有的模块的程序集作为类库进行引用,并且这些模块在应用程序启动过程中通过启动引导程序中的ModuleCatalog.AddModule方法被加载。在这种情况下,从Staock Rader RI.Silverlight shell应用程序项目编译的结果中只有一个XAP文件,并且它包含了Shell,四个模块以及下图中所示的共享的基础类库。如果你正在部署StockTraderRI应用程序,你只需仅仅将那个XAP文件放到Web 服务中国并且并设置你的Silverlight插件在网页托管对象标记的源参数标签指向XAP文件(通常在你的站点的一个\ClientBin 子文件夹中,使用一个ASP.NET Web 应用程序承载项目模板)。         注意:         为了避免交叉域名引起的问题,远程的模块的XAP文件应该被放到相同的域中作为主程序;当你这样部署后,ModuleCatalog的Ref属性应该为一个指向Web服务器上的XAP文件的URI文件。     除了在承载的Web站点中发布和定位XAP文件,承载Web 页面需要在它的对象标记源参数中引用应用程序的XAP文件。因为承载页码应该是同一个Web站点的一部分,出于交叉域名原因它是XAP文件放置的地方,在承载页码中的指定的路径应该是一个相对的路径。

    
         ...

部署WPF Prism 应用程序

    一个WPF Prism应用程序可以有一个可执行程序和若干个额外的DLL组成。主要的可执行程序是Shell应用程序项目。其中一些额外的DLL将会是应用程序的模块。它们可能是被Shell和应用程序的模块共享的程序集额外DLL。另外,你可能会有一系列的资源或者内容文件将会一起在部署的应用程序中。     为了部署一个WPF Prism 应用程序,你有三个选择:
  • “XCopy 部署”
  • ClickOnce 部署
  • Windows Install 部署
    “XCopy 部署”被用作通过某种文件赋值操作的,其可以或者不可以包含使用XCopy 命令行工具的总称手动部署。如果你选择这种方式部署应用程序,它取决于你手动的打包文件并且将他们移动的目标计算机上。应用程序应该准备只要预期的文件夹结构和可执行文件,该模块的DLL的相对的内容维护文件就可以运行。     通常情况下,部署一个更加自动化的手段是需要的,以确保得到的东西放置在正确的位置,用户可以方便地访问运行该应用程序。为了方便,你可以选择使用的ClickOnce或Windows安装程序(.msi文件),这取决于应用程序有什么额外的安装要求存在。     是否使用的ClickOnce或Windows Installer的决定常常被误解。ClickOnce是不打算成为万能的部署技术。它的目的是为那些需要对其他安装在客户端计算机上的应用程序低影响。如果你的应用程序在其被安装时需要做一个计算机范围的更改,例如安装驱动,与其他应用程序集成,安装服务和该走的只是运行可执行文件范围以外的其他事情,ClickOnce可能不是一个合适的部署选择。然而,如果你只是一个在客户端计算机上的轻量级的安装并且你想要利用网络部署和更新WPF应用程序的优势,ClickOnce 可能是一个不错的选择。     为了给你的应用程序创建一个Windows Installer 安装包(.msi 文件),你有许多的选择,包括Visual Studio 安装项目,Windows Installer XML(WiX) 项目,或者一系列的第三方的安装器创建产品。

使用ClickOnce部署WPF Prism 应用程序

    ClickOnce是一个WPF或者WinFrom部署机制,自从 2.0版本以来它成了.NET Framework的一部分。ClickOnce 使得一个WPF应用程序可以通过网络从部署服务哪里自动的部署和更新。WPF Prism应用程序可以使用ClickOnce 来获取Shell,模块,和任何依赖性来部署到客户端机器中。Prism 应用程序的主要挑战就是Visual Studio 为Click Once 发布程序的过程并没有自动的将动态加载模块包括在一个发布的应用程序内。     使用Click Once 发布一个WPF 应用程序过程一共有两步。首先,你必须从Visual Studio 发布应用程序,然后你可以将它部署到客户端计算机。发布应用程序产生两个清单(一个部署清单和一个应用程序清单),并且将应用程序文件拷贝到发布路径下。那个发布文件夹可以被然后移动到另一个服务中,这个服务可能不允许开发者计算机直接访问来使得发布的应用程序可以从一个已知的位置和URL从客户端来访问。部署一个应用程序到客户端计算机仅仅需要提供一个可以导航到的URL或者连接,这个URL指向了发布的部署服务器上的部署清单。当那个URL在浏览器中北加载时,客户端计算机上的Click Once 下载了这个清单以及清单中指定的文件。 当文件被下载并在用户配置文件存储后,ClickOnce 启动应用程序。如果后来更新发布到了部署服务器,ClickOnce可以自动的检测这些更新,下载,并应用它们,或者可以设置,允许你来按需或者在程序启动后在后台来检查和应用它们。     当你发布一个WPF Prism 应用程序时,其拥有动态加载的模块,Shell工程将通常不会引用到动态加载的模块。结果就是,发布的Click Once应用程序清单也不包含这些模块文件,并且如果你使用ClickOnce来部署应用程序,客户端计算机也将不会获取这些模块文件。为了解决这点,你必须修改应用程序清单来包含这些没有被shell工程引用到的模块文件。

ClickOnce发布过程

    你可以从Visual Studio 2010中使用一个名为Manifest Generating and Editing tool(Mage)的.NET Framework SDK工具或者一个使用了ClickOnce 发布API的自定义工具来发布ClickOnce 应用程序。然而,Visual Studio 可能不能被在服务器端管理ClickOnce 部署的IT管理员获得或者期望的。Mage 是专门为解决最常见的ClickOnce管理任务而设计的;它是一个轻量级的.NET Framework 窗体应用程序,可以将其给予管理员。然而,Mage要求太多的细节步骤,以正确的顺序执行,来成功的完成常见任务例如修改一个在应用程序清单中列出的应用程序。为了使得这些任务更简单,需要一个自定义的工具。     Manifest Manager Utility 样例工具展示了如何使用Click Once 发布API 用一种简单的方式来管理部署和应用程序清单。这个工具用于在一个用户界面中更新应用程序清单文件列表和部署清单设置并且它的使用在本章中后面的章节描述了初始部署和更新Prism应用程序。Manifest Manager Utility 使用Microsoft.Build.Tasks.Deployment 命名空间中暴露的API对一个ClickOnce 部署进行加载,操纵,和保存修改的清单文件。你可以从您可以从Prism 社区网站Codeplex上的http://compositewpf.codeplex.com/releases/view/14771下载Manifest Manager Utility。欲了解参与发布和更新使用动态模块加载一个WPF Prism 应用的具体步骤,请参见http://msdn.microsoft.com/en-us/library/dd833069(VS.95).aspx

下载 Manifest Manager Utility 从 Codeplex上的Prism 社区占点,在

 http://compositewpf.codeplex.com/releases/view/14771.

欲了解参与使用动态模块加载来发布和更新WPF Prism应用程序的具体步骤,请参考

 WPF Prism Deployment Hands-On Lab: Publishing and Updating with ClickOnce.