编译源代码并完成测试以后,开发过程其实并没有结束。在这个极端,需要把应用程序提供给用户。无论是ASP.NET应用程序,客户端应用程序还是 Compact Framework构建的应用程序,开发出来的软件都必须部署到目标环境中。.NET Framework的部署工作比以前容易得多了,因为不再需要注册COM组件也不需要编写新的注册表配置但愿。

记得以前安装程序的时候,经常需要安装注册表项什么的,.NET完全不需要操作注册表。

部署过程中,最大的问题就是第三库的依赖问题的解决。开发人员的计算机上可能提前安装了用于开发的第三方的类库,比如我们做图形处理的经常需要用到 opencv类库或者emgucv类库,但是目标计算机上一般不会安装这些第三方类库。这样在部署的时候就需要在目标计算机上安装相应的类库。部署过程对 于大型应用程序可能非常复杂,就像我们玩的使命召唤的部署,或者Visual Studio的部署,在部署的过程中还可以选择哪些组件可以安装,哪些组件不可以安装等操作。

本文主要是简要的介绍一下部署的基本方法,起到一个抛砖引玉的作用,要是想写出非常强大的部署功能,还需要学习更多的文档和资料。

.NET中的部署分类:

1. XCopy

XCopy允许把一个程序集或者一组程序集复制到目标计算机应用程序文件夹中,从而减少开发时间。.NET程序集是自我包含的(元数据描述了包含在程序集中的内容),因为不需要在注册表中进行注册。

每个程序集都跟踪他需要执行的其他程序集,因此,在默认情况下,程序集会在当前应用程序文件夹中查找依赖项。这就是为什么当我们的程序引用了第三方的程序集的时候,把第三方程序集放在应用程序文件夹下就可以正确的运行,及时将应用程序移动到其他的计算机上。

2. 发布Web站点

在发布Web站点之前,会编译整个站点,然后复制到指定的位置。编译后的站点,不包含任何源代码。

3. 部署项目

部署项目就是我们经常用的安装程序的方式。VS2010可以为应用程序创建安装程序。基于Windows Installer技术有四种选择:

创建合并模块

为客户端应用程序创建安装程序

为Web应用程序创建安装程序

为基于智能设备的应用程序创建安装程序

创建cab文件,用过windows moblie操作系统的都知道,那个系统中的安装程序都是cab文件,还有就是在win ce系统中也是使用cab安装文件。

4. ClickOnce技术

ClickOnce技术可以构建自动升级的,基于Windows的应用程序。

ClickOnce允许把应用程序发布到Web站点,文件共享,或者CD上。对应用程序进行升级或者更新版本以后,开发小组可以把他们发布到相同的位置或者站点上,最后用户在使用应用程序的时候,应用程序会自动检查是否有最新版本,如果有就进行更新。

接下来详细介绍每种部署方式。

部署方式介绍

一. XCopy部署

XCopy部署就是把一组文件复制到目标计算机上的一个文件夹中,然后在客户端执行应用程序。无论程序集的数目是多少,如果把文件复制到同一个文件夹中,应用程序就可以执行。不需要配置设置或注册表。

简单的说,XCopy部署就是把程序集复制到目标计算机上,就可以部署功能完善的应用程序。使用这种方法对可以部署的程序集的大小咩有限制。

XCopy部署的缺点:不能把程序集放到全局程序集缓存(GAC)中,不能在开始菜单中添加图标,如果程序依赖某种类型的COM库,就不能很容易的注册COM组件。

二. 发布Web站点

XCopy也可以用于Web应用程序的发布。建立虚拟目录,把Web应用程序文件复制到虚拟目录即可。

Web项目的另一个部署选项是发布Web站点,发布Web站点就是预编译整个站点,并将编译好的版本放在指定的位置,VS中有发布Web站点的用户向导,根据向导提示就可以进行操作了。

发布Web站点的优点是速度快,安全性高。速度快是因为所有的程序集都已经编译过了。

三. Visual Studio 2010安装和部署项目

XCopy使用起来非常简单,但是缺乏一些功能。Visual Studio 2010提供了6个安装程序项目类型。有4个是基于 Windows Installer技术。

如图所示的安装项目类型。

Setup Project会部署项目到文件夹结构中,而Web Setup Project会部署项目到Web服务器的虚拟目录中。

在创建包含在多个部署项目中的组件或者功能库时,一般使用Merge Module Project,通过创建合并模块,可以设置专用于组件的配置项,而无需在主项目的创建过程中担心他们。

3.1 Windows Installer简介

Windows Installer是一个服务,负责管理在大多数的 windows操作系统上安装、更新、修复和删除应用程序。

Windows Installer在数据库中跟踪应用程序的安装,在卸载应用程序的时候,Windows Installer和内容以跟踪和删除已经添加的注册表设置和复制到硬盘上的文件,以及已经添加的桌面图标和开始菜单中的图标。如果注册表设置或与应用程 序相关的DLL被不小心删除了,就可以修复安装。在修复的过程中,安装程序会从上一次安装中读取数据库,并重制该安装过程。

如果需要更多的更空,就应该查看Windows Installer SDK, 他是Platform SDK的一部分,其中包含了为应用程序创建自动以安装软件包的文档。

3.2 创建安装程序

创建安装包的第一个任务是:标识应用程序需要的所有外部资源,宝库配置文件,COM组件,第三方类库,控件和图像资源等。

这里首先介绍如何在独立的解决方案中创建安装程序项目。然后介绍在原来的解决方案中创建安装程序项目。

我们这里使用的例子,都是一个基于Adaboost人脸检测的程序,这个程序使用了Emgucv的第三方类库。

3.2.1 在独立的解决方案中创建安装项目

在开始创建部署项目之前,要确保部署的应用程序有一个发布版本,即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整个项目就可以获得安装文件了。

3.2.2 在同一个解决方案中创建安装项目

上面的部署方式有几个缺点:例如,当心的程序集添加到原始应用程序汇总,部署项目不会自动的识别任何改动的地方,而必须手动的添加新的程序集,然后 再次盐城心的依赖项,包含依赖项。如果在包含几十个或者上百个应用程序集的应用程序中,这样就很难维护了。VS提供了一个简单的解决方案,吧部署项目包含 在应用程序的解决方案中,这样就可以把主项目的输出作为部署程序集了。

在原来的解决方案中,添加一个新的Project, 选择Setup Project。如图

上面的安装程序通过Add->Assemblies添加程序集,这次我们通过Add->Project Output添加程序集。如图

在弹出的窗口中,选择要添加部署的项目,然后选择"Primary Output",如图

这包括构建应用程序时的输出和所有依赖项。选择Configuration 为Release x86

系统仍然会自动检测到依赖项和主输出:

剩下的操作和上面的创建安装项目的操作一样。

就可以获得安装程序文件。

这种方法的优点:当把新的项目添加到解决方案中,在原来的工程中添加一个新的引用,部署项目会自动的选择新的程序集,无需我们做任何工作。

四. ClickOnce部署

ClickOnce是一种允许应用程序自动升级的部署技术。应用程序发布到共享文件、Web站点或其他媒介,如果后来程序发布者对程序进行了升级,ClickOnce会自动检测程序版本进行升级,无需用户干涉。

ClickOnce还解决了安全权限问题,一般情况下,要安装应用程序,用户需要由管理权限。而利用ClickOnce,用户只要有运行应用程序所需的最低绝对权限,就可以安装和运行应用程序。

发布ClickOnce应用程序的方法:

右击需要创建ClickOnce安装方法的项目,选择属性,看到如下界面

选择Publish,

ClickOnce应用程序的发布,需要和IIS服务器配合操作。

这里我把ClickOnce应用程序放到了本地IIS服务器上

然后点击Publish.

然后就可以通过浏览器访问地址进行应用程序安装了。

.Net应用程序打包部署总结的更多相关文章

  1. VS2013程序打包部署(图解),vs2013部署

    VS2013程序打包部署(图解),vs2013部署 首先要说明的是VS解决方案配置下的Debug模式和Release模式有什么区别.Debug模式通常称为调试模式,它包含调试信息,未对代码进行优化,方 ...

  2. VS2013 Winform程序打包部署 InstallShield2015LimitedEdition

    VS2013 Winform程序打包部署 VS2013默认是没有安装打包程序的,需要手动安装,我安装的是 InstallShield2015LimitedEdition. 1.点击解决方案,右键,选择 ...

  3. VS2012程序打包部署详解

    VS2012没有自带打包工具,所以要先下载并安装一个打包工具.我采用微软提供的打包工具:  InstallShield2015LimitedEdition.下载地址:https://msdn.micr ...

  4. 【转】VS2012程序打包部署详解

    上篇博客把收费系统的总体设计进行了一遍讲解,讲解的同时掺杂了些有关.NET编译机制的总结.程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的是没有了打包工具.不知道出于什么原因 ...

  5. [转载]VS2012程序打包部署详解

    上篇博客把收费系统的总体设计进行了一遍讲解,讲解的同时掺杂了些有关.NET编译机制的总结.程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的是没有了打包工具.不知道出于什么原因 ...

  6. (转) VS2012程序打包部署详解

    程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的是没有了打包工具.不知道出于什么原因微软没有将打包工具集成在开发环境中,但是我知道总会有解决办法的.     经过翻阅资料发现 ...

  7. VS2012及以上版本 程序打包部署详解

    引用:  http://blog.csdn.net/zhang_xinxiu/article/details/9099757 程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的 ...

  8. VS2012 QT程序打包部署详解

    1.设置安装程序集 InstallShield安装完成后,执行以下步骤右键解决方案-->添加-->新建项目-->其他项目类型-->安装和部署,具体操作如下图: 2.发布程序 在 ...

  9. 【CITE】VS2012程序打包部署

      选择Debug模式将项目重新生成,并保证没有任何bug   选择解决方案,右击——添加——新建项目——安装和部署   下载过打包工具InstallShield2013LimitedEdition, ...

  10. VS2013程序打包部署详细图解

      目录(?)[+]   新建项目 FILE –> New –> Project,如下图所示:  注意:如果 InstallShield Limited Edition Project 显 ...

随机推荐

  1. POJ - 1329 Circle Through Three Points 求圆

    Circle Through Three Points Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4112   Acce ...

  2. C# String.Format 格式化字符串 数字/时间

    首先献给只想知道结果的人 格式化 DateTime 对象 标准 数字 格式化 Int Decimal Float Double 关于这一块一直不是很清楚,MSDN 上也不够清晰. 就花了点时间敲了一下 ...

  3. BZOJ.2916.[POI1997]Monochromatic Triangles(三元环)

    题目链接 \(Description\) n个点的完全图,其中有m条边用红边相连,其余边为蓝色.求其中三边同色的三角形个数. \(Solution\) 直接求同色 除了n^3 不会.. 三角形总数是C ...

  4. 【set】【multiset】Codeforces Round #484 (Div. 2) D. Shark

    题意:给你一个序列,让你找一个k,倘若把大于等于k的元素都标记为不可用,那么剩下的所有元素形成的段的长度相同,并且使得段的数量尽量大.如果有多解,输出k尽量小的. 把元素从大到小排序插回原位置,用一个 ...

  5. android 从零单排 第一期 按键显示helloworld

    啦啦啦- 我是qscqesze 今天开始android的从零单排啦啦啦- 首先从最简单的开始 要求: 程序运行后,单击屏幕上的按键后可以显示一句话,如“Hello World!” 这是一个最基础最基础 ...

  6. Swift 内存管理

    1.Object-C 经历两个阶段: 1.手动引用计数内存管理(Manual Reference Counting,MRC) 2.自动引用计数内存管理(Automatic Refernce Count ...

  7. 读书笔记_Effective_C++_条款三十五:考虑virtual函数以外的其他选择

    举书上的例子,考虑一个virtual函数的应用实例: class GameCharacter { private: int BaseHealth; public: virtual int GetHea ...

  8. .net mvc控制器传递方法到视图

    很多人都是在视图里面定义方法,然后再使用.我个人也是这么干的.但是为了验证是否可以将方法从控制器传递到视图,所以做了个测试.结果真的可以.原理是利用了委托(delegate),因为委托本身就是一种类型 ...

  9. python编译模块为2禁制

    编译模块为2禁制yum -y install python26-setuptoolseasy_install -U setuptools# cd /usr/lib64/python2.6# easy_ ...

  10. VC获取屏幕分辨率及大小相关(转)

    vc得到屏幕的当前分辨率方法: 1.Windows API调用 int width = GetSystemMetrics ( SM_CXSCREEN );  int height= GetSystem ...