编译源代码并完成测试以后,开发过程其实并没有结束。在这个极端,需要把应用程序提供给用户。无论是ASP.NET应用程序,客户端应用程序还是 Compact Framework构建的应用程序,开发出来的软件都必须部署到目标环境中。.NET Framework的部署工作比以前容易得多了,因为不再需要注册COM组件也不需要编写新的注册表配置但愿。
记得以前安装程序的时候,经常需要安装注册表项什么的,.NET完全不需要操作注册表。
部署过程中,最大的问题就是第三库的依赖问题的解决。开发人员的计算机上可能提前安装了用于开发的第三方的类库,比如我们做图形处理的经常需要用到 opencv类库或者emgucv类库,但是目标计算机上一般不会安装这些第三方类库。这样在部署的时候就需要在目标计算机上安装相应的类库。部署过程对 于大型应用程序可能非常复杂,就像我们玩的使命召唤的部署,或者Visual Studio的部署,在部署的过程中还可以选择哪些组件可以安装,哪些组件不可以安装等操作。
本文主要是简要的介绍一下部署的基本方法,起到一个抛砖引玉的作用,要是想写出非常强大的部署功能,还需要学习更多的文档和资料。
XCopy允许把一个程序集或者一组程序集复制到目标计算机应用程序文件夹中,从而减少开发时间。.NET程序集是自我包含的(元数据描述了包含在程序集中的内容),因为不需要在注册表中进行注册。
每个程序集都跟踪他需要执行的其他程序集,因此,在默认情况下,程序集会在当前应用程序文件夹中查找依赖项。这就是为什么当我们的程序引用了第三方的程序集的时候,把第三方程序集放在应用程序文件夹下就可以正确的运行,及时将应用程序移动到其他的计算机上。
在发布Web站点之前,会编译整个站点,然后复制到指定的位置。编译后的站点,不包含任何源代码。
部署项目就是我们经常用的安装程序的方式。VS2010可以为应用程序创建安装程序。基于Windows Installer技术有四种选择:
创建合并模块
为客户端应用程序创建安装程序
为Web应用程序创建安装程序
创建cab文件,用过windows moblie操作系统的都知道,那个系统中的安装程序都是cab文件,还有就是在win ce系统中也是使用cab安装文件。
ClickOnce技术可以构建自动升级的,基于Windows的应用程序。
ClickOnce允许把应用程序发布到Web站点,文件共享,或者CD上。对应用程序进行升级或者更新版本以后,开发小组可以把他们发布到相同的位置或者站点上,最后用户在使用应用程序的时候,应用程序会自动检查是否有最新版本,如果有就进行更新。
接下来详细介绍每种部署方式。
XCopy部署就是把一组文件复制到目标计算机上的一个文件夹中,然后在客户端执行应用程序。无论程序集的数目是多少,如果把文件复制到同一个文件夹中,应用程序就可以执行。不需要配置设置或注册表。
简单的说,XCopy部署就是把程序集复制到目标计算机上,就可以部署功能完善的应用程序。使用这种方法对可以部署的程序集的大小咩有限制。
XCopy部署的缺点:不能把程序集放到全局程序集缓存(GAC)中,不能在开始菜单中添加图标,如果程序依赖某种类型的COM库,就不能很容易的注册COM组件。
XCopy也可以用于Web应用程序的发布。建立虚拟目录,把Web应用程序文件复制到虚拟目录即可。
Web项目的另一个部署选项是发布Web站点,发布Web站点就是预编译整个站点,并将编译好的版本放在指定的位置,VS中有发布Web站点的用户向导,根据向导提示就可以进行操作了。
发布Web站点的优点是速度快,安全性高。速度快是因为所有的程序集都已经编译过了。
XCopy使用起来非常简单,但是缺乏一些功能。Visual Studio 2010提供了6个安装程序项目类型。有4个是基于 Windows Installer技术。
如图所示的安装项目类型。
Setup Project会部署项目到文件夹结构中,而Web Setup Project会部署项目到Web服务器的虚拟目录中。
在创建包含在多个部署项目中的组件或者功能库时,一般使用Merge Module Project,通过创建合并模块,可以设置专用于组件的配置项,而无需在主项目的创建过程中担心他们。
Windows Installer是一个服务,负责管理在大多数的 windows操作系统上安装、更新、修复和删除应用程序。
Windows Installer在数据库中跟踪应用程序的安装,在卸载应用程序的时候,Windows Installer和内容以跟踪和删除已经添加的注册表设置和复制到硬盘上的文件,以及已经添加的桌面图标和开始菜单中的图标。如果注册表设置或与应用程 序相关的DLL被不小心删除了,就可以修复安装。在修复的过程中,安装程序会从上一次安装中读取数据库,并重制该安装过程。
如果需要更多的更空,就应该查看Windows Installer SDK, 他是Platform SDK的一部分,其中包含了为应用程序创建自动以安装软件包的文档。
创建安装包的第一个任务是:标识应用程序需要的所有外部资源,宝库配置文件,COM组件,第三方类库,控件和图像资源等。
这里首先介绍如何在独立的解决方案中创建安装程序项目。然后介绍在原来的解决方案中创建安装程序项目。
我们这里使用的例子,都是一个基于Adaboost人脸检测的程序,这个程序使用了Emgucv的第三方类库。
在开始创建部署项目之前,要确保部署的应用程序有一个发布版本,即Release版本。
新建Setup Project 项目,填写相关信息,如图:
然后可以看到这样的界面:
在“‘Solution Explorer”中右击项目选择Add,选择Assembly.如图
添加本项目需要的程序集。选择了已经Release好了的FaceDetectTest.exe, 然后可以看到,在Detected Dependencies部分,Vs给出了这个可执行文件需要的程序集依赖。这样Vs会自动的包含程序集。依赖程序集如图:
接着需要确定把程序集部署到用户计算机什么地方。
单击左侧列表的树根,然后在空白地方右击鼠标,可以选择添加特殊的文件夹,可以根据自己的需要添加相应的特殊文件夹。这里我们添加了GAC文件夹。但是添加到GAC文件夹中的程序集必须有强命。添加GAC以后,把GAC需要放置的程序集拖进去。
接下来,用户可以再桌面或者开始菜单添加快捷方式。就需要把快捷方式拖放到相应的文件夹。
要创建桌面快捷方式,进入Application文件夹,右击Application文件夹中的需要创建快捷方式的程序,如图
选择“Create Shortcut to FaceDetectTest.ext”, 然后会生成一个这个应用程序的快捷方式。如图
然后将这个快捷方式文件拖放到User's Desktop文件夹中,这样,在安装程序的时候,就会在用户的桌面显示一个程序的快捷方式。
然后Build整个项目就可以获得安装文件了。
上面的部署方式有几个缺点:例如,当心的程序集添加到原始应用程序汇总,部署项目不会自动的识别任何改动的地方,而必须手动的添加新的程序集,然后 再次盐城心的依赖项,包含依赖项。如果在包含几十个或者上百个应用程序集的应用程序中,这样就很难维护了。VS提供了一个简单的解决方案,吧部署项目包含 在应用程序的解决方案中,这样就可以把主项目的输出作为部署程序集了。
在原来的解决方案中,添加一个新的Project, 选择Setup Project。如图
上面的安装程序通过Add->Assemblies添加程序集,这次我们通过Add->Project Output添加程序集。如图
在弹出的窗口中,选择要添加部署的项目,然后选择"Primary Output",如图
这包括构建应用程序时的输出和所有依赖项。选择Configuration 为Release x86
系统仍然会自动检测到依赖项和主输出:
剩下的操作和上面的创建安装项目的操作一样。
就可以获得安装程序文件。
这种方法的优点:当把新的项目添加到解决方案中,在原来的工程中添加一个新的引用,部署项目会自动的选择新的程序集,无需我们做任何工作。
ClickOnce是一种允许应用程序自动升级的部署技术。应用程序发布到共享文件、Web站点或其他媒介,如果后来程序发布者对程序进行了升级,ClickOnce会自动检测程序版本进行升级,无需用户干涉。
ClickOnce还解决了安全权限问题,一般情况下,要安装应用程序,用户需要由管理权限。而利用ClickOnce,用户只要有运行应用程序所需的最低绝对权限,就可以安装和运行应用程序。
发布ClickOnce应用程序的方法:
右击需要创建ClickOnce安装方法的项目,选择属性,看到如下界面
选择Publish,
ClickOnce应用程序的发布,需要和IIS服务器配合操作。
这里我把ClickOnce应用程序放到了本地IIS服务器上
然后点击Publish.
然后就可以通过浏览器访问地址进行应用程序安装了。