.Net应用程序打包部署总结
编译源代码并完成测试以后,开发过程其实并没有结束。在这个极端,需要把应用程序提供给用户。无论是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应用程序打包部署总结的更多相关文章
- VS2013程序打包部署(图解),vs2013部署
VS2013程序打包部署(图解),vs2013部署 首先要说明的是VS解决方案配置下的Debug模式和Release模式有什么区别.Debug模式通常称为调试模式,它包含调试信息,未对代码进行优化,方 ...
- VS2013 Winform程序打包部署 InstallShield2015LimitedEdition
VS2013 Winform程序打包部署 VS2013默认是没有安装打包程序的,需要手动安装,我安装的是 InstallShield2015LimitedEdition. 1.点击解决方案,右键,选择 ...
- VS2012程序打包部署详解
VS2012没有自带打包工具,所以要先下载并安装一个打包工具.我采用微软提供的打包工具: InstallShield2015LimitedEdition.下载地址:https://msdn.micr ...
- 【转】VS2012程序打包部署详解
上篇博客把收费系统的总体设计进行了一遍讲解,讲解的同时掺杂了些有关.NET编译机制的总结.程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的是没有了打包工具.不知道出于什么原因 ...
- [转载]VS2012程序打包部署详解
上篇博客把收费系统的总体设计进行了一遍讲解,讲解的同时掺杂了些有关.NET编译机制的总结.程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的是没有了打包工具.不知道出于什么原因 ...
- (转) VS2012程序打包部署详解
程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的是没有了打包工具.不知道出于什么原因微软没有将打包工具集成在开发环境中,但是我知道总会有解决办法的. 经过翻阅资料发现 ...
- VS2012及以上版本 程序打包部署详解
引用: http://blog.csdn.net/zhang_xinxiu/article/details/9099757 程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的 ...
- VS2012 QT程序打包部署详解
1.设置安装程序集 InstallShield安装完成后,执行以下步骤右键解决方案-->添加-->新建项目-->其他项目类型-->安装和部署,具体操作如下图: 2.发布程序 在 ...
- 【CITE】VS2012程序打包部署
选择Debug模式将项目重新生成,并保证没有任何bug 选择解决方案,右击——添加——新建项目——安装和部署 下载过打包工具InstallShield2013LimitedEdition, ...
- VS2013程序打包部署详细图解
目录(?)[+] 新建项目 FILE –> New –> Project,如下图所示: 注意:如果 InstallShield Limited Edition Project 显 ...
随机推荐
- 将已有的项目提交到GitHub
1.目的: 将已有的项目提交到GitHub 2.准备工作 2.1 此教程建立在对git有初步的理解上 2.2 此教程之前需准备工作 a.熟悉git的一些基本命令和原理. b.已注册有GitHub账号. ...
- Python匹配中文的正则表达式
python 中的字符串: https://www.cnblogs.com/livingintruth/p/3282981.html # -*- coding: utf-8 -*- import re ...
- Django-Models与ORM
一.增加 from django.db import models class Publisher(models.Model): name = models.CharField(max_length= ...
- Socket通信原理简介
Socket通信原理简介 字数1011 阅读1766 评论2 喜欢11 何谓socket 计算机,顾名思义即是用来做计算.因而也需要输入和输出,输入需要计算的条件,输出计算结果.这些输入输出可以抽象为 ...
- Alpha 冲刺报告5
组长:吴晓晖 今天完成了哪些任务: 将服务端程序基本部署在阿里云上,还未进行测试 完成了手写记录的代码实现 处理团队问题 为明天的编程任务做准备 展示GitHub当日代码/文档签入记录: 明日计划: ...
- [POI2015]Odwiedziny
[POI2015]Odwiedziny 题目大意: 一棵\(n(n\le5\times10^4)\)个点的树,\(n\)次询问从一个点到另一个点的路径上,每次跳\(k\)个点,所经过的点权和. 思路: ...
- bzoj 3672 利用点分治将CDQ分治推广到树型结构上
最大的收获就是题目所说. deal(s) : 处理节点s所在块的问题,并保证: 1.s是该块中最靠近根节点的点,没有之一. 2.s所在块到根节点的路径上的点全都用来更新过了s所在块的所有节点. 然后步 ...
- php curl 发送get和post请求示例
<?php final class HttpClient { const TIME_OUT = 10; static function get($url) { $ch = curl_init() ...
- IEEE Bigger系列题解
Bigger系列题解 Bigger Python 坑点在于要高精度以及表达式求值,用java写可以很容易避免高精度问题 然后这道题就可以AC了 代码 import java.io.*; import ...
- SQLyog客户端无法连接MySQL服务器
环境:centos下使用yum 命令安装了mysql服务 1.进入linux 通过命令service mysqld start启动mysql的服务 2.使用sqlyog 连接mysql发现连接不上,如 ...