包设计和生成转让专利

申请号 : CN201080023852.2

文献号 : CN102449598B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : P·M·霍夫S·孙D·A·莫利纳马莉L·I·比罗夫

申请人 : 微软技术许可有限责任公司

摘要 :

可以使用提供用于可视地排列和配置产品的元素的用户界面的一个或多个设计器,来设计供部署在服务器集合上的产品的解决方案包。程序包对象模型包括表示如由产品清单XML模式所定义的程序包或特征清单的受管理的对象模型。可以使用对象模型来创建对其他项目项和特征定义的引用。可以使用扩展的对象模型来生成等效的程序包或特征清单XML文件。

权利要求 :

1.一种用于包设计和生成的方法,包括:

由软件包设计和生成模块(106)执行下列操作:

设计和生成供部署在多个服务器计算机上的解决方案包(120),其中所述解决方案包(120)是通过序列化由域专用语言生成的对象模型(122)来生成的,其中使用接收用于可视地排列和配置包的元素的用户输入(126)的至少一个设计器(110,112)来从项目系统(118)的项目生成和设计所述解决方案包(120),其中所述至少一个设计器包括自定义特征的特征设计器、和/或自定义包的包设计器,其中生成所述包包括下列各项中的一项或多项:枚举要包括在所述包中的文件和数据;转换;令牌替换;布局;以及将组件捆扎并压缩到解决方案包中;

其中基于所述用户输入的所述包设计器执行下列各项中的至少一项:配置所述包内的特征,将特征的组合合并到所述包中,对所述包设置属性,可视化所述项目中的已定义的特征,将特征添加到所述包,从所述包中移除特征,再分类所述包内的特征,修改所述包的未来安装的各方面,或修改所述包的卸载;

其中基于所述用户输入的所述特征设计器执行下列各项中的至少一项:配置特征内的项目项,将项目项的组合合并到所述特征中,对所述特征设置属性,可视化所述项目中的已定义的项目项,将项目项添加到所述特征,从所述特征中移除项目项。

2.如权利要求1所述的方法,其特征在于,所述对象模型是使用域专用语言用户界面框架来定义的,并且其中基于Windows呈现基础的用户界面元素与所述域专用语言用户界面框架集成。

3.如权利要求1所述的方法,其特征在于,通过将所述对象模型中的类型和属性映射到清单XML模式中的元素和属性来转换所述对象模型。

4.一种设计和生成供部署在多个服务器计算机上的解决方案包的方法,所述方法包括:

创建所述解决方案包(204),其中所述解决方案包包括协作服务器应用程序,其包括基于浏览器的协作功能、进程管理模块,搜索模块以及内容管理平台,其中所述解决方案包是通过在开发计算机上执行包设计器和生成器来创建的;

通过遍历项目中的多个包中的至少一个包的包定义以达到特征引用,遍历所述至少一个包中的所述特征引用以达到特征,遍历所述特征中的项目项引用以达到项目项,遍历所述项目项中的文件引用以达到文件以及反向跟踪以确定包括在所述解决方案包中的文件和数据的完整列表,来列举(206)所述解决方案包的元素列表,所述完整列表包括至少一个清单;

通过将表示所述解决方案包的对象模型序列化为包括所述清单的至少一个文件来转换(208)所述对象模型;

选择(210)多个所提供的变量名集合中的一个集合,以便用于已转换的文件中的一个或多个文件内;

预览(212)包括包含文件的目录层次结构的所述解决方案包的结构,并将所述文件置于所述多个服务器计算机的至少一个服务器计算机上的相对于所述层次结构的位置,其中该方法还包括:使用特征设计器自定义特征和/或使用包设计器自定义所述包;

其中所述特征设计器接收用户输入,并基于所述用户输入来执行下列各项中的至少一项:配置所述特征内的项目项,将项目项的组合合并到所述特征中,对所述特征设置属性,可视化项目中的已定义的项目项,将项目项添加到所述特征,从所述特征移除项目项;

其中所述包设计器接收用户输入,并基于所述用户输入来执行下列各项中的至少一项:配置所述包内的项目项,将特征的组合合并到所述包中,对所述包设置属性,可视化所述项目中的已定义的特征,将特征添加到所述包,从所述包中移除特征,再分类所述包内的特征,修改所述包的未来安装的各方面,或修改所述包的卸载。

5.如权利要求4所述的方法,其特征在于,还包括:

将所述对象模型中的类型和属性映射到清单XML模式中的元素和属性。

6.如权利要求4所述的方法,其特征在于,基于Windows呈现基础的用户界面元素与用于生成所述对象模型和用户界面基础结构的域专用语言集成。

7.一种用于包设计和生成的方法,包括:

通过执行至少一个设计器来自定义项目,其中所述至少一个设计器包括自定义包的包设计器或自定义特征的特征设计器,通过在开发计算机上执行包设计器和生成器来从所述自定义的项目创建解决方案包,其中创建所述解决方案包包括:通过遍历所述项目的多个包中的至少一个包的包定义以达到特征引用,遍历所述至少一个包中的所述特征引用以达到特征,遍历所述特征中的项目项引用以达到项目项,遍历所述项目项中的文件引用以达到文件,以及反向跟踪以确定要包括在所述解决方案包中的文件和数据的完整列表,来列举所述解决方案包的元素列表,所述完整列表包括清单;以及通过将表示所述项目的对象模型序列化为包括所述清单的至少一个文件来转换所述对象模型;

选择多个所提供的变量名集合中的一个集合,以便用于已转换的文件中的一个或多个文件内;以及预览所述解决方案包的结构;

其中基于用户输入的所述包设计器执行下列各项中的至少一项:配置所述包内的特征,将特征的组合合并到所述包中,对所述包设置属性,可视化所述项目中的已定义的特征,将特征添加到所述包,从所述包中移除特征,再分类所述包内的特征,修改所述包的未来安装的各方面,或修改所述包的卸载;

其中基于所述用户输入的所述特征设计器执行下列各项中的至少一项:配置特征内的项目项,将项目项的组合合并到所述特征中,对所述特征设置属性,可视化所述项目中的已定义的项目项,将项目项添加到所述特征,从所述特征中移除项目项。

8.如权利要求7所述的方法,其特征在于,进一步包括:

预览包括文件目录层次结构的所述项目的结构,并将所述文件置于相对于所述层次结构的位置。

9.如权利要求7所述的方法,其特征在于,进一步包括:

提供可扩展的用户界面元素,其中受管理的可扩展性框架标识和实例化与所述至少一个包或所述对象模型中的所述至少一个包的至少一个特征相关联的一组视图。

10.如权利要求7所述的方法,其特征在于,进一步包括:

创建所述解决方案包,其中所述解决方案包包括协作服务器应用程序,其包括至少一个应用程序页面、web部件、列表定义、内容类型,或应用程序库。

11.如权利要求7所述的方法,其特征在于,进一步包括:

将至少一个定义文件和清单文件解序列化为所述对象模型,以及将对象模型序列化为至少一个清单文件。

12.一种用于包设计和生成的系统,包括:

用于由软件包设计和生成模块(106)执行下列操作的装置:

设计和生成供部署在多个服务器计算机上的解决方案包(120),其中所述解决方案包(120)是通过序列化由域专用语言生成的对象模型(122)来生成的,其中使用接收用于可视地排列和配置包的元素的用户输入(126)的至少一个设计器(110,112)来从项目系统(118)的项目生成和设计所述解决方案包(120),其中所述至少一个设计器包括自定义特征的特征设计器、和/或自定义包的包设计器,其中生成所述包包括下列各项中的一项或多项:枚举要包括在所述包中的文件和数据;转换;令牌替换;布局;以及将组件捆扎并压缩到解决方案包中;

其中基于所述用户输入的所述包设计器执行下列各项中的至少一项:配置所述包内的特征,将特征的组合合并到所述包中,对所述包设置属性,可视化所述项目中的已定义的特征,将特征添加到所述包,从所述包中移除特征,再分类所述包内的特征,修改所述包的未来安装的各方面,或修改所述包的卸载;

其中基于所述用户输入的所述特征设计器执行下列各项中的至少一项:配置特征内的项目项,将项目项的组合合并到所述特征中,对所述特征设置属性,可视化所述项目中的已定义的项目项,将项目项添加到所述特征,从所述特征中移除项目项。

说明书 :

包设计和生成

背景技术

[0001] 当将应用程序部署到许多位置时或当一些已部署的文件编码文件之间的关系时,通常不建议将文件从一个位置简单地复制到另一个位置。相反,创建和部署包(package)常常会更好。包是用于创建应用程序的一组代码文件及其他资源。创建供部署的包常常是涉及各种工具并涉及劳动密集的、易于出错的任务的复杂任务,如手动编辑复杂的文档,以及维护要包括在包中的长的文件列表。例如,应用程序和服务器平台常常具有使手动创建包变得困难的针对部署和安装新组件的非常具体而复杂的标准。

发明内容

[0002] 提供了用于可视地排列和配置软件包和用于表示软件包的对象模型的用户界面,以便设计和生成软件包,来供部署在服务器计算机集合上。对象模型是使用域专用语言(DSL)来生成的。对象模型被展示给受管理的可扩展性平台,并允许项目扩展操纵用户界面外部的包。可以使用包设计和生成工具来自定义包,确定和收集包所需的所有文件,生成指示每一个文件将驻留在web服务器中的什么位置的清单,并以预期的格式将所有这些组件捆扎到包解决方案中以供部署。
[0003] 提供本概述以便以简化形式介绍将在以下的具体实施方式中进一步描述的一些概念。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。
[0004] 附图简述
[0005] 在附图中:
[0006] 图1a是根据此处所公开的主题的各方面的用于包设计和生成的系统的示例的框图;
[0007] 图1b是根据此处所公开的主题的各方面的用于图1a的包的结构的示例的框图;
[0008] 图2a是根据此处所公开的主题的各方面的用于包设计和生成的方法的示例的流程图;
[0009] 图2b是根据此处所公开的主题的各方面的示出了如在图1a、1b和2a中引用的将数据解序列化为对象模型以及将对象模型序列化为数据的过程中的数据流的示例的框图;
[0010] 图3是示出了其中可以实现此处所公开的主题的各方面的计算环境的示例的框图;以及
[0011] 图4是根据此处所公开的主题的各方面的集成开发环境的示例的框图。
[0012] 详细描述
[0013] 概览
[0014] 微软SharePoint是包括服务器开发平台的产品和软件元素的集合,其中包括基于浏览器的协作功能、进程管理模块,搜索模块以及内容管理平台。SharePoint是可以被用来创建和主存访问共享工作空间、信息存储和文档的一个或多个网站的web服务器应用程序。SharePoint也可以被用来主存诸如web工作流、维基(wiki)、博客等等之类的定义的应用程序。SharePoint是构建于web服务器上面的应用程序,该应用程序促进在许多服务器上创建单个站点,这些站点包含了可通过浏览器中的web界面访问的文档库、列表和数据等等。
[0015] 当前,为创建供部署到web服务器集合的SharePoint解决方案包(solution package),用户必须手动执行许多步骤,这些步骤是劳动密集的并易于出错。首先,用户在他的集成开发环境中创建新项目。然后,他添加网页、web部件、模板文件、代码等等。这些文件是以匹配它们的在软件包内的最终位置的特定文件夹结构来添加的。接下来,他创建向SharePoint指示应该如何部署软件包内的文件的额外的清单文件。然后,他创建向压缩工具指示哪些文件要包括在软件包中的指令文件。
[0016] 根据此处所公开的主题的各方面,提供包设计和生成工具,该工具使用户能够自定义软件包的元素的外表和布局。例如,可以使用包设计和生成工具来将自定义工作流包括在包的特定特征中,确定和收集工作流所需的所有文件,生成指示每一个文件将驻留在web服务器中的什么位置的清单,并以预期的格式将所有这些组件捆扎到包解决方案中来供部署。可以理解,尽管是在SharePoint的特定环境内描述此处所公开的主题的,但是,本主题或其各方面可以应用于被创建供部署在服务器集合上的任何软件。
[0017] 包设计和生成
[0018] 图1a示出了根据此处所公开的主题的各方面的用于软件包设计和生成的系统100的示例。系统100的全部或某些部分可以驻留在诸如下面参考图3所描述的计算机之类的一台或多台计算机上。系统100的全部或某些部分可以驻留在诸如下面参考图4所描述的计算机之类的一台或多台软件开发计算机(例如,计算机102)上。系统100或其一些部分可以包括诸如下面参考图4所描述的和所示出的那些集成开发环境(例如,IDE104)的一部分。可另选地,系统100或其一些部分可以作为独立系统或作为插件或附加件来提供。
[0019] 系统100可包括下列各项中的一项或多项:处理器(如处理器142)、存储器144,以及软件包设计器和生成器106。本领域已知的其他组件也可以被包括,但是,此处未示出。可以理解,软件包设计器和生成器106可以被加载到存储器144中,以导致诸如处理器142之类的一个或多个处理器执行归属于软件包设计器和生成器106的动作。根据此处所公开的主题的各方面的软件包设计器和生成器106可以接收项目系统118输入,并产生供部署的解决方案包120。软件包设计器和生成器106可以接收包定义文件,并响应于用户输入来产生自定义的包定义。
[0020] 软件包设计器和生成器106(也可以被称为软件包设计和生成工具或软件包设计和生成模块)可包括下列各项中的一项或多项:图1a中由验证器108表示的验证器、图1a中的由包设计器110表示的包设计器、图1a中由特征设计器112表示的特征设计器、图1a中由可视化器114表示的可视化器、图1a在由包生成器116表示的包生成器,以及图1a中由对象模型122表示的对象模型。在操作中,软件包设计器和生成器106可以接收项目系统118,并产生解决方案包120。还可以生成清单124。清单包括包清单(其列出包中的特征等等),特征清单(其列出特征中的项目项(projectitem)),以及元素清单(其列出构成项目项的单个文件)。用户的自定义清单可以与包所提供的清单合并,以产生被包括在解决方案包120中的合并的清单。解决方案包120可以表示包括被部署到服务器计算机集合的软件的任何软件,诸如协作服务器应用程序,诸如但不仅限于,微软的SharePoint。
[0021] 验证器108检查将妨碍正确或起作用的解决方案包120的创建的错误。根据此处所公开的主题的某些方面,在封装过程的其余部分开始之前,执行一系列规则。验证规则集合中的每一个规则或规则组合可以检查包中的特定组件。例如,一个规则可以检查在同一个特征中没有重复的项目项。规则的另一示例可以检查项目项和该项目项所在的特征之间的兼容性。如果规则被违犯,则可以在显示器上可视地或以打印的形式向用户报告适当的错误或警告。可以由用户接收错误或警告,然后,用户有使用设计器对包组件进行更改的机会。规则可以是可扩展的。规则可以针对单个特征或作为整体的包。验证器108可以使用受管理的可扩展性框架(MEF)来定位和实例化与产品一起运送的“核心”规则集,以及由第三方通过公共应用程序编程接口(API)所定义的附加规则。
[0022] 包设计和生成工具106可包括用于排列和配置包和特征的设计器。包设计器可以被用来基于从用户输入接收到的指令,配置包内的特征,将特征的组合合并到包中,对包设置属性,可视化项目中的已定义的特征,将特征添加到包中,从包中移除特征,对包内的特征进行再分类,修改包的未来安装的各方面,或修改包的卸载等等。基于用户输入的特征设计器可以配置特征内的项目项,将项目项的组合合并到特征中,对特征设置属性,可视化项目中的已定义的项目项,将项目项添加到特征中,从特征中移除项目项。
[0023] 根据此处所公开的主题的某些方面,设计器是微软Visual Studio设计器,它们通过拖放操作,点击和停放或通过其他已知的方法来排列和配置SharePoint包和特征。用户可以通过在对象模型中添加或移除已定义的元素来通过设计器自定义对象模型。设计器可以被构建于域专用语言设计器上。域专用语言或DSL是专用于特定问题领域、特定问题表示技术和/或特定解决方案技术的编程语言或规范语言。设计器可以,但是不一定,使用与DSL相关联的设计表面。相反,这些设计器可以基于不同的UI技术(诸如但不仅限于,Windows呈现基础(WPF))将UI(用户界面)元素与DSL UI框架集成,并可以嵌入基于WPF的UI元素。当设计器被打开时向用户呈现的UI元素可以是可扩展的。例如,可以使用受管理的可扩展性框架(MEF)来从系统中的所有视图的集合仅标识和实例化与包对象模型内的特定组件(例如,包或特征)相关联的视图集合。
[0024] 包设计器110接收所提供的用户输入126,以排列包内的特征,将特征的组合合并到包中,对包设置属性,查看项目中的已定义的特征,将特征添加到包中或从包中移除特征,对包内的特征进行再分类,修改处理包的安装或卸载的方式(例如,用户可以改变当将包安装在服务器上时激活包中所包括的特征的顺序,等等)等等,以自定义包。特征设计器112接收所提供的用户输入126,以排列特征内的项目项,设置特征的属性,查看项目中的已定义的项目项,将项目项添加到特征中或从特征中移除项目项,修改处理特征的安装或卸载的方式等等。根据此处所公开的主题的各方面,当通过设计器作出更改时,对对象模型
122作出更改。当对对象模型的更改被保存时,对对象模型的更改被转变回序列化格式(例如,诸如但不仅限于XML文件)。
[0025] 软件包设计器和生成器106可包括在视图中显示包的结构的可视化器114。例如,根据此处所公开的主题的某些方面,可视化器114是以树视图显示SharePoint包的结构的Visual Studio工具窗口。用户可以选择工具窗口内的项,并在Visual Studio属性窗口中查看和/或更改其设置。用户还可以使用拖放或点击及拖动操作或者通过任何已知的技术来将项从SharePoint包中的一个位置移动到另一位置。
[0026] 软件包设计器和生成器106可包括生成软件包120的包生成器116。例如,诸如包生成器116之类的包生成器可以扩展项目构建过程,以便允许用户生成在上文所描述的设计器中设计的SharePoint包。自定义MSBuild任务和目标可以自动提取SharePoint包和特征定义,使用这些定义来生成适当的包和特征清单XML文件(例如,清单124),并将它们与相关联的项目项文件一起捆扎为解决方案包被部署到其的服务器集合上的SharePoint部署软件所预期的格式(诸如但不仅限于具有.wsp扩展名的压缩格式)。包生成可以通过Visual Studio内的菜单项或在命令行上执行。下面参考图2a比较全面地描述了封装。
[0027] 诸如对象模型122之类的对象模型可以表示项目的一个或多个包。对象模型122可以表示受管理的对象模型,该受管理的对象模型表示一个或多个SharePoint包,或特征。对象模型可以在诸如SharePoint清单XML模式之类的清单模式之后被建模。对象模型可以是使用域专用语言(DSL)框架来定义和生成的。可以通过上文所描述的设计器添加和/或移除对象模型的元素的实例。如下面参考图1b比较全面地描述的,可以引用诸如定义和项目项之类的其他组件,包括,但不仅限于,当前项目内以及IDE中的其他项目内的其他SharePoint特征定义和项目项。例如,可以引用当前Visual Studio项目内的组件以及Visual Studio解决方案中的其他项目中的组件。可以使用如此定义的对象模型,通过将对象模型中的类型和属性映射到清单XML模式中的元素和属性,来生成等效的包组件(例如,等效的SharePoint包或特征清单XML文件)。另外,还可以从现有的包或特征清单文件来创建对象模型的实例。在下文中参考图2b更详细地描述了文件和对象模型之间的转换。
[0028] 图1b示出了项目10和项目40的结构的高层视图。项目10可包括诸如包定义12等等之类的一个或多个包定义,诸如特征定义14等等之类的一个或多个特征定义,以及诸如项目项定义16等等之类的一个或多个项目项定义。项目10还可以包括由包定义12等等所定义的诸如包18等等之类的一个或多个包,由特征定义14等等所定义的诸如特征20等等之类的一个或多个特征,由项目项定义16等等所定义的诸如项目项22等等之类的一个或多个项目项。包18等等可包括诸如特征引用24等等之类的对特征的一个或多个引用。特征引用24等等可以指向或引用特征20等等。类似地,特征20可包括诸如项目项引用26等等之类的对项目项的一个或多个引用。项目项引用26等等可以指向或引用项目项22等等。项目项22等等可包括诸如项文件引用28等等之类的对文件的一个或多个引用。项文件引用28等等可以指向或引用诸如项文件30之类的文件。
[0029] 类似地,项目40可包括诸如包定义42等等之类的一个或多个包定义,诸如特征定义44等等之类的一个或多个特征定义,以及诸如项目项定义46等等之类的一个或多个项目项定义。项目40还可以包括由包定义42等等所定义的诸如包48等等之类的一个或多个包,由特征定义44等等所定义的诸如特征50等等之类的一个或多个特征,由项目项定义46等等所定义的诸如项目项52等等之类的一个或多个项目项。包48等等可包括诸如特征引用54等等之类的对特征的一个或多个引用。特征引用54等等可以指向或引用特征50等等。类似地,特征50可包括诸如项目项引用56等等之类的对项目项的一个或多个引用。项目项引用56等等可以指向或引用项目项52等等。项目项52等等可包括诸如项文件引用58等等之类的对文件的一个或多个引用。项文件引用58等等可以指向或引用诸如项文件60之类的文件。
[0030] 如上文所描述的,项目可包括一个或多个项目项。诸如项目项22之类的项目项可以是在应用程序的开发过程中所产生的许多种有形的副产品中的一种。项目项可以是一组组件(扩展)中的一个,其中一些可以与产品(例如,web部件、列表定义、内容类型等等)一起运送,并可以由第三方添加。在项目项中引用的诸如项目项文件60之类的文件可以是任何适当的文件,包括,但不仅限于元素清单、模式、位图图像、文档等等。
[0031] 项目10中的包中的特征引用可以引用项目40中的特征(如图1b中的线62所示),反之亦然。项目10中引用的项目项可以引用其父亲(例如,项目10)内的文件。诸如项目10或项目40之类的项目可以是被创建供部署在服务器集合上的任何软件。更具体而言,项目可以是如上文所描述的协作服务器应用程序,诸如,但不仅限于SharePoint应用程序。包定义是指可以驻留在当前项目中或可以在解决方案中的另一项目中的一个或多个特征。特征类似地具有对被包括在解决方案中要么当前项目中的要么解决方案中的另一项目中的一个或多个项目项的引用。诸如项目项22等等之类的项目项可包括许多文件,每一个文件都必须去往服务器集合中的一个服务器上的特定位置。
[0032] 图2a是根据此处所公开的主题的各方面的用于包设计和生成的方法200的示例。根据此处所公开的主题的某些方面,向方法200的输入是使用项目系统创建的项目。项目可以是软件项目,诸如但不仅限于,将被部署到服务器集合的项目。服务器集合可以由企业来维护以实现超出一台机器的功能以外的服务器需求。服务器场通常用于群集计算。一种常见的类型的服务器场是用于web主存的服务器场。这一类型的场有时被称为Web场。
[0033] 一旦创建了软件应用程序的个体项目项,就可以调用方法200。根据此处所公开的主题的某些方面的方法200接收由包括但不仅限于Visual Studio的开发环境来使用的项目。项目可包括工作流的逻辑,已定义的列表定义等等。一旦加载了项目,就可以在202开始对软件包的设计的自定义。
[0034] 自定义可以使用上文所描述的设计器来执行。可以理解,自定义,无论使用或不使用设计器,是可选的步骤。即,如果例如包设计已经处于所希望的状态,则在204创建包之前不需要执行自定义。创建包可以包括创建单个压缩和/或捆扎的包,如但不仅限于创建包括SharePoint产品(或多个产品)的资源的解决方案包,如Windows解决方案包(.wsp)文件。
[0035] 创建包可包括下列各项中的一项或多项:枚举206要包括在包中的文件和数据、转换208、令牌替换210、布局212以及214处的将组件捆扎以及可能压缩到解决方案包中。然后,可以将已创建的解决方案包部署到一个或多个服务器上。创建包还可以包括枚举步骤之前的在其中如上文所描述地验证包的步骤。
[0036] 枚举206包括检查项目中的每一个文件,以及确定要包括在解决方案包中的文件和数据。在操作中,枚举可包括遍历项目中的一个或多个包的包定义以达到特征引用,遍历包中的特征引用以达到特征,遍历特征中的项目项引用以达到项目项,遍历项目项中的文件引用以达到文件。可以使用已知的树遍历技术来确定要包括在解决方案包中的文件和数据的完整列表,(例如,创建要包括在包中的元素的清单或总清单)。一旦确定了包的文件和数据的列表,则转换动作208就可以开始。转换包括使用在枚举步骤中所确定的文件以及与文件相关联的数据,以与产品封装模式兼容的格式生成一个或多个清单文件,将对象模型中的类型和属性映射到清单XML模式中的元素和属性。
[0037] 在210执行令牌替换。令牌替换是指由用户选择多个所提供的变量名集合中的一个集合,以便用于已转换的文件中的一个或多个文件内。被替换的变量名可以表示在封装过程开始以前用户难以或不可能知道的值。变量名可以是指频繁地变化以使得令牌替换使用户不必手动更新值的值。在令牌替换阶段期间,包中所包括的文件子集被处理,并可以执行将变量名替换为变量值。根据此处所公开的主题的各方面,带匹配可配置扩展名列表的扩展名的文件将被执行令牌替换(例如,*.xml、*.aspx等等)。在212,布局步骤涉及创建磁盘上的包的结构的预览。创建目录层次结构,并且将所列举和转换的文件置于相对于该层次结构的位置。布局步骤向用户提供了执行额外的自定义的机会。在214,使用目录层次结构以及目录层次结构中的所有文件,将包的元素捆绑到一个文件中。根据此处所公开的主题的某些方面,文件被压缩为CAB压缩格式。
[0038] 图2b示出了包括文件和对象模型之间的序列化和解序列化的转换的示例。诸如包定义文件或特征定义文件之类的定义文件230可以被解序列化为对象模型234中的对象。诸如从上文参考图1a所描述的枚举步骤创建的清单文件之类的清单文件232,也可以被解序列化为对象模型234中的对象。可以由客户机组件236诸如如上文所描述的软件包的对象模型之类的对象模型234。客户机组件236可包括诸如上文所描述的包设计器和特征设计器之类的设计器,并且也可以包括构建引擎,诸如但不仅限于MSBuild。
[0039] 当对象模型234中的对象通过设计器被改变时,在对象改变被保存在设计器中时,如此修改过的对象被序列化为定义文件230(例如,*.feature和*.package文件)。一旦创建了对象模型234,图2a的转换步骤就可以对对象模型234进行序列化,并对已解序列化的对象模型执行图2a的步骤208的转换。根据此处所公开的主题的各方面,转换过程可包括将定义文件解序列化(例如,使用DSL的专有XML格式)为对象模型的实例,根据先前动作中列举的封装项来转换对象模型(向特征或包中所包括的每一个文件的对象模型添加适当的条目),以及将对象模型序列化为清单文件(例如,使用SharePoint的XML格式)。可以对于包中所包括的每一个特征,以及对于包本身来执行这些动作。此时,可以执行上文所描述的捆扎和/或压缩动作。
[0040] 合适的计算环境的示例
[0041] 为了提供有关本文所公开的主题的各个方面的上下文,图3以及以下讨论旨在提供其中可以实现各实施例的合适计算环境510的简要概括描述。尽管本文所公开的主题是在诸如程序模块等由一个或多个计算机或其它计算设备执行的计算机可执行指令的通用上下文中描述的,但本领域技术人员将认识到,本文所公开的主题的各部分还能够结合其它程序模块和/或硬件和软件的组合来实现。通常,程序模块包括执行特定任务或实现特定数据类型的例程、程序、对象、物理人为产物、数据结构等。通常,程序模块的功能可在各个实施例中按需进行组合或分布。计算环境510只是合适的操作环境的一个示例,并且不旨在对此处所公开的主题的使用范围或功能提出任何限制。
[0042] 参考图3,描述了以计算机512的形式存在的用于包设计和生成的计算设备。计算机512可包括处理单元514、系统存储器516和系统总线518。处理单元514可以是各种可用处理器中的任何一种。也可以使用双微处理器及其他多处理器体系结构作为处理单元514。系统存储器516可包括易失性存储器520和非易失性存储器522。非易失性存储器522可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)或闪存。易失性存储器520可包括可充当外部高速缓冲存储器的随机存取存储器(RAM)。系统总线518将包括系统存储器516的系统物理人为产物耦合到处理单元514。系统总线518可以是几种类型的总线结构中的任何一种,包括存储器总线、存储控制器、外围总线、外部总线或局部总线,并且可以使用各种可用总线体系结构中的任一种。
[0043] 计算机512通常包括各种计算机可读介质,诸如易失性和非易失性介质、可移动和不可移动介质。计算机存储介质可以通过用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术来实现。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CDROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机512访问的任一其它介质。
[0044] 将理解,图3描述了可充当用户与计算机资源之间的媒介的软件。该软件可以包括可存储在盘存储524上的操作系统528,该操作系统可控制并分配计算机系统512的资源。盘存储524可以是通过诸如接口526的不可移动存储器接口连接到系统总线518的硬盘驱动器。系统应用程序530利用由操作系统528通过存储在系统存储器516或者存储在盘存储524上的程序模块532和程序数据534对资源的管理。应该明白,计算机可用各种操作系统或操作系统的组合来实现。
[0045] 用户可通过输入设备536向计算机512输入命令或信息。输入设备536包括但不限于定点设备,诸如鼠标、跟踪球、指示笔、触摸垫、键盘、话筒等。这些及其他输入设备通过系统总线518经由接口端口538连接到处理单元514。接口端口538可表示串行端口、并行端口、通用串行总线(USB)等。输出设备540可与输入设备使用相同类型的端口。提供输出适配器542以举例说明存在像监视器、扬声器、以及打印机的需要特定适配器的一些输出设备540。
输出适配器542包括但不限于,在输出设备540和系统总线518之间提供连接的视频卡和声卡。其他设备和/或设备系统,诸如远程计算机544,可提供输入和输出两种能力。
[0046] 计算机512可以使用到诸如远程计算机544之类的一个或多个远程计算机的逻辑连接来在联网环境中操作。远程计算机544可以是个人计算机、服务器、路由器、网络PC、对等设备或其它常见的网络节点,并且通常包括许多或所有以上相对于计算机512所描述的元件,尽管在图4中仅示出了存储器存储设备546。远程计算机544可经由通信连接550逻辑地连接。网络接口548涵盖诸如局域网(LAN)和广域网(WAN)这样的通信网络,但也可包括其他网络。通信连接550是指用来将网络接口548连接到总线518的硬件/软件。连接550可以在计算机512内部或外部并且包括诸如调制解调器(电话、电缆、DSL和无线)和ISDN适配器、以太网卡等内部和外部技术。
[0047] 应该理解,所示网络连接仅是示例,并且可以使用在计算机之间建立通信链路的其它手段。本领域的普通技术人员可以理解,计算机512或其它客户机设备可作为计算机网络的一部分来部署。在这一点上,本文所公开的主题涉及具有任意数量的存储器或存储单元以及在任意数量的存储单元或卷上发生的任意数量的应用程序和进程的任何计算机系统。本文所公开的主题的各方面可应用于具有部署在网络环境中的具有远程或本地存储的服务器计算机和客户计算机的环境。本文所公开的主题的各方面也可应用于具有编程语言功能、解释和执行能力的独立计算设备。
[0048] 图4示出集成开发环境(IDE)600和通用语言运行时环境602。IDE600可允许用户(例如,开发者、程序员、设计者、编码者等)在计算机系统中设计、编码、编译、测试、运行、编辑、调试或构建程序、程序集、网站、web应用程序和web服务。软件程序可包括以一种或多种源代码语言(例如,Visual Basic、Visual J#、C++、C#、J#、Java Script、APL、COBOL、Pascal、Eiffel、Haskell、ML、Oberon、Perl、Python、Scheme、Smalltalk等)创建的源代码(组件610)。IDE600可提供本机代码开发环境,或者可提供在虚拟机上运行的托管代码开发,或者可提供其组合。IDE600可提供使用.NET框架的托管代码开发环境。可使用语言专用源编译器620从源代码组件610和本机代码组件611创建中间语言组件650,并且在执行应用时使用中间语言编译器660(例如,即时(JIT)编译器)从中间语言组件650创建本机代码组件611(例如,机器可执行指令)。即,当IL应用被执行时,其在被执行的同时被编译成适合正在其上执行它的平台的合适机器语言,藉此使代码能跨若干平台便携。或者,在其他实施例中,程序可被编译成适合其目标平台的本机代码机器语言(未示出)。
[0049] 用户可根据已知软件编程技术以及与特定源语言相关联的特定逻辑和句法规则经由IDE600中的用户接口640和源代码编辑器651来创建和/或编辑源代码组件。此后,源代码组件610可经由源编译器620被编译,藉此可创建该程序的中间语言表示,诸如汇编630。汇编630可包括中间语言组件650和元数据642。应用程序设计可以能够在部署前被验证。
[0050] 此处所述的各种技术可结合硬件或软件,或在适当时以其组合来实现。由此,本文所公开的方法和装置或其特定方面或部分可采取包含在诸如软盘、CD-ROM、硬盘驱动器或任何其它机器可读存储介质等有形介质中的程序代码(即,指令)的形式,其中当程序代码被加载到诸如计算机等机器内并由其执行时,该机器成为用于实现本文所公开的主题的各方面的装置。在程序代码在可编程计算机上执行的情况下,计算设备通常将包括处理器、该处理器可读的存储介质(包括易失性和非易失性的存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备。可例如通过使用数据处理API等来利用域专用编程模型各方面的创建和/或实现的一个或多个程序可用高级过程编程语言或面向对象的编程语言来实现以与计算机系统通信。然而,如果需要,该程序可以用汇编语言或机器语言来实现。在任何情形中,语言可以是编译语言或解释语言,且与硬件实现相结合。
[0051] 虽然已结合附图描述了本文所公开的主题,但是应理解,可作出修改以按不同方式执行相同功能。