VS 2010发布之后,随着而来的框架版本也升级到了.NET Framework 4.0。我相信很多朋友已经在用了吧。这一篇文章总结了如何基于.NET Framework 4.0,进行解决方案部署。
之所以要单独写一下,是因为确实这个版本与之前的.NET Framework 2.0,3.0,3.5是不一样的。我们自己在用的时候也摸索了一些时间。所以总结出来给大家参考参考吧,以免多走弯路。
重点事项:
- .NET Framework 4与之前的版本是可以并行的,他们并不互相干扰。也就是说,你不必在安装.NET Framework 4之前安装其他的任何一个版本。(前提是,你只是想运行.NET Framework 4的程序)
- 令很多朋友最感疑惑的是,如果安装了.NET Framework 4,那么之前的软件能否运行(例如基于.NET Framework 2)呢?答案是:不能
- 因为这种并行的情况,所以在服务端要特别注意,设置ASP.NET引擎的版本。
- .NET Framework 4 所支持的客户端操作系统最低是Windows XP,服务器操作系统是Windows Server 2003。之前的Windows 2000甚至更高版本全部不受支持。
- .NET Framework 4的网站无法部署在Windows XP中。换而言之,Windows XP只能作为客户端,因为XP带的IIS 是5.1,而.NET Framework 4所要求的IIS版本最低是IIS 6.
部署提示:
1.首先下载有关的安装程序
NET_Framework_4.0installer.rar
这是我整理好的四个软件(大致一共10MB),分别如下
- WindowsInstaller-KB893803-v2-x86(3.1).exe 如果你的机器(不管是服务器还是客户端)什么都没有安装过,那么必须先装这个installer 3.1才可以安装Framework
- wic_x86_enu.exe 如果你的机器是XP(通常是指客户端),那么在安装.NET Framework 4之前需要安装这个WIC(Windows Image Component),不要问我这是干啥用的,我也不知道,呵呵
- ReportViewer2010.exe 如果你的应用程序使用了报表查看器,则需要安装这个
- en_.net_framework_4_full_web_installer_x86_x64_ia64_516530.exe 这是在线安装.NET Framework 4的一个引导程序。你需要确保网络畅通。
当然,如果你希望预先下载好Framework 安装包(例如你的客户场景是没有办法连接到网络),那么请继续下面的操作
- 如果你想要下载完整的安装包,则访问这里http://www.microsoft.com/downloads/details.aspx?FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7&displaylang=en
- 大致是48MB的安装包,应该还是可以接受的。不像原先.NET Framework 3.5那么恐怖(那时好像将近200MB,客户直接就崩溃了)
- 如果你想要下载.NET Framework 4 Client Profile ,则访问这里 http://www.microsoft.com/downloads/details.aspx?FamilyID=e5ad0459-cbcc-4b4f-97b6-fb17111cf544&displaylang=en
- 大致是41MB的安装包,与Full相差大致7MB,我个人觉得这就没有啥优势了。而且选用了Client Profile的话,有好些个功能都不能用。其实更关键在于你不知道哪些能用,哪些不能用(确实有一些文档介绍他们的区别,但谁有那闲工夫去记住那么多区别呢)。所以,我们全部采用Full,免得麻烦。
2.服务器端的一般部署过程
客户端部署相对很简单,你只要把上面的一些软件安装好,基本上就不会有什么问题,程序能运行起来。但服务器端可就没有这么容易了。下面就假设你有一个Web Application需要部署
首先,如何打包这个Web Application呢?这个方面,VS2010做了一些不错的改进,它可以直接发布,更可以打包成一个所谓的Package,如下面的菜单
打包好之后会在项目的Obj目录下面,Debug目录下面,再创建一个Package目录,你可以看到下面的一些文件
其次,如何在服务器端部署这个Web Application呢?
你需要将上面这个Package目录全部复制,然后发送给服务器管理员。那么服务器管理员要怎么将这个Application部署起来呢?他有几种方式。
第一种方式,使用MS Deploy工具。
http://www.iis.net/download/webdeploy
这个工具是微软提供出来给IIS 6和IIS 7用的,可以很方便地进行应用程序部署。你可以通过上面的地址下载到。(值得一提的是,这个工具安装之前需要当前服务器安装了.NET Framework 2.0 sp1)
如果安装好了,我们打开IIS 之后会看到一些小的变化
大家可以看到,现在网站上面多出来一个“Deploy”的菜单,里面有几个菜单项,我们现在可以点击“Import Application”
首先,我们需要指定那个部署包的位置,是那个zip文件
【注意】这里可以修改连接字符串
【注意】因为检测到我们是.NET Framework 4的Web Application,所以会提示将Application Pool选择为.NET 4.0的,我们当然毫不犹豫地点击“yes”
很快就安装好了。它到底做了什么呢?其实它会把文件复制到wwwroot里面来
但是,这里需要注意的是,它是随机选择了一个.NET Framework 4.0 的Application Pool, 例如在我的机器上是这样的
有的时候,我们可能会发现程序运行不起来,例如
经验告诉我们,凡是503错误,多半是与应用程序池有关系。
我尝试重启这个程序池,问题依旧
然后,我发现这个程序池有些特殊之处在于它的Managed Pipleline Mode是Integrated,是不是这个有问题呢?
我尝试选择了一个Managed Pipleline Mode为Classic的应用程序池,例如
重新刷新一下就可以正常运行我的应用程序了
到这里,我们就完成了服务器端应用程序的部署。这个演练中,我们使用了MS Deploy工具。但事实上,不用工具也是一模一样可以做到的。只要记住下面两点
1. 应用程序池要基于.NET Framework 4
2. 应用程序池的Managed Pipleline Mode要选择为Classic
最后,还有一个可能会遇到的问题,就是如果你的应用程序会连接到数据库,而且数据库连接字符串是像下面这样写的
Data Source=.\sqlexpress;Initial Catalog=Northwind;Integrated Security=True
那么,大家要知道的一个情况是,因为你是Integrated security=true,所以最后访问数据库时所使用的身份是应用程序池的标识。那么,很显然地,你需要确保这个标识有访问数据库的权限。
【注意】如果是访问本地的服务器和数据库,为简单起见,你可以直接设置为LocalSystem。这个特殊帐号是肯定可以访问数据库的。
当然,更加严谨的做法,是指定一个特定的帐号,这个帐号被授予了特定数据库的访问权限。