代码改变世界

ASP.NET开发中的八个最佳实践

2008-09-22 17:52  TTlive  阅读(215)  评论(0编辑  收藏  举报
  探索一些在ASP.NET应用程序开发方面的最佳实践,按照这些有用的过程执行就可以改善你的应用程序性能。本文展现了八个最佳实践,你可以在生产模式中开发ASP.NET应用程序时遵循这些最佳实践。

1.使用版本控制你的程序集

确保你有一套合适的版本控制策略,在编译时可以使用程序集版本属性应用版本标志,例如:

[程序集: 程序集版本("1.0.12.34")]

在构建过程中通常对一个应用程序应用相同的版本号。

2.给程序集取一个强壮的名字

程序集是版本控制和代码复用的最小单元,包括:

◆程序集标识信息(名称,版本等)
◆清单和元数据信息
◆MSIL代码
◆类型和安全信息
◆资源

具有强壮名称的程序集与它的版本信息、区域信息和数字签名一起可以唯一标识出它。

可以使用.NET框架提供了一个实用程序(sn.exe)为你的程序集创建一个强壮的名称,这个实用程序需要你提供一个密钥文件作为参数,结果文件叫做“强名称”文件,你可以使用sn.exe工具从命令行创建强名称密钥文件,如:

sn --k MyCompany.snk

当你执行前面这条命令时,你会看到如图1所示的内容输出。

 

1.使用版本控制你的程序集

确保你有一套合适的版本控制策略,在编译时可以使用程序集版本属性应用版本标志,例如:

[程序集: 程序集版本("1.0.12.34")]

在构建过程中通常对一个应用程序应用相同的版本号。

2.给程序集取一个强壮的名字

程序集是版本控制和代码复用的最小单元,包括:

◆程序集标识信息(名称,版本等)
◆清单和元数据信息
◆MSIL代码
◆类型和安全信息
◆资源
具有强壮名称的程序集与它的版本信息、区域信息和数字签名一起可以唯一标识出它。

可以使用.NET框架提供了一个实用程序(sn.exe)为你的程序集创建一个强壮的名称,这个实用程序需要你提供一个密钥文件作为参数,结果文件叫做“强名称”文件,你可以使用sn.exe工具从命令行创建强名称密钥文件,如:

sn --k MyCompany.snk

当你执行前面这条命令时,你会看到如图1所示的内容输出。


图1.创建一个强名称密钥文件

当你在Visual Studio中创建一个项目时,你会看到一个叫做AssemblyInfo.cs的默认文件,你可以使用它指定有关的属性,下面列出了在AssemblyInfo.cs文件中你可以指定的强名称信息。

[assembly: AssemblyCulture("")] 【程序集:程序集区域("")】
[assembly: AssemblyVersion("1.0.0.0")] 【程序集:程序集版本("1.0.0.0")】
[assembly: AssemblyKeyFile("MyCompany.snk")] 【程序集:程序集密钥文件("MyCompany.snk"】

3.打乱你的程序集

在开始部署程序集之前,最好先打乱它,这样使得反编译更困难,阻止反向工程的尝试,因此,保护你的源代码避免潜在的威胁,此外,打乱程序集可以减少它的大小,从而提升应用程序的性能,在http://www.aspnetpro.com/newsletterarticle/2006/10/asp200610jk_l/asp200610jk_l.asp能找到更多关于打乱程序集的信息。

4.将共享程序集部署到GAC

你应该将被多个应用程序使用的程序集部署到全局程序集缓存(通常叫做GAC)中,它允许其中的程序集由多个应用程序共享,将程序集部署到GAC中改善了它的载入性能,从GAC载入强命名程序集速度更快,因为它们在安装时就已经校验了,在运行时就不需要再次校验了,.NET框架会跳过校验,运行时总会检查强命名程序集校验它们的完整性,.NET拒绝载入不受信任的或可能捣乱的程序集,记住将程序集安装到GAC之前一定要给它取一个强壮的名字。

用GACUtil这个工具将程序集放入GAC,下面的命令将MyProject.dll放入GAC中,因此它就成为了一个全局程序集。

GacUtil /i MyProject.dll

要卸载GAC中的程序集,可以使用:

GacUtil /u MyProject.dll

注意即使不将程序集放入GAC你也可以使你的强命名程序集全局可访问,但你需要使用xcopy命令来部署这样的程序集。

5.使用恰当的战略进行部署

本文讨论两个主要的部署ASP.NET站点的技术:使用copy工具和xcopy工具。也简要地谈到了点击一次部署,其中copy工具是最新的技术,自ASP.NET 2.0开始引入。

使用copy工具进行部署

下面的步骤完整地显示了从一个站点拷贝到另一个站点的示例。

5.1在Visual Studio中选择文件新建站点创建一个名叫SourceWebSite的新站点,如图2所示。


2.创建新站点:从新建站点对话框中选择标准的ASP.NET站点模板

5.2然后再创建一个名叫SharedWebSite的站点,你可以使用copy工具将这个站点拷贝到SourceWebSite。

5.3接下来,在Visual Studio Solution Explorer中选择SourceWebSite,在它上面点击右键选择Copy Web Site选项,如图3所示。


图3.拷贝站点:在SourceWebSite上点击右键,在右键菜单中选择Copy Web Site

5.4另外,你也可以选择SourceWebSite然后点击solution explorer 中的Copy Web Site选项,如图4所示。


图4.快速站点拷贝

5.5你将会看到拷贝站点屏幕,在左边的方格中你将会看到SourceWebSite站点包括的文件。

5.6选择SharedWebSite站点(你的远程站点),这样就会弹出打开站点对话框,选择共享的/远程的站点,然后点击打开按钮,如图5所示。


图5.打开站点对话框:选择共享的/远程站点然后点击打开

 

5.7接下来的屏幕右边方格中显示了共享的/远程站点包括的所有文件,选择所有文件,如图6所示。


图6.选择共享/远程文件:在右边方格中选择所有的远程/共享站点文件

5.8接下来,点击Copy Selected Files选项按钮,从共享/远程站点拷贝文件到你的本地站点,如图7所示。


图7.拷贝文件:使用拷贝按钮从远程/共享站点拷贝文件到本地站点

如果拷贝过程发现文件冲突,它会询问你是跳过文件还是覆盖本地文件,如图8所示。


图8.文件冲突解决办法:出现文件冲突是,你有一次机会决定如何处理冲突

如果站点的子文件夹名字雷同,你可以选择同步按钮在远程和本地站点之间直接同步文件,如图9所示。


图9.同步文件:点击同步按钮在远程和本地服务器之间同步选择的文件

这样就完成了站点的拷贝过程。

使用xcopy进行部署

将一个ASP.NET应用程序部署生产服务器上是非常简单:只需要使用xcopy命令拷贝你的应用程序完整目录结构到生产环境就可以了,下面就是xcopy的过程:

◆点击开始运行打开一个终端窗口
◆输入cmd回车
◆在目标位置创建相同的文件夹结构
◆最后,输入下面的命令,注意使用你自己的路径信息进行替换,如图10所示

XCOPY DevX/SharedWebSite DevX/SourceWebSite /e /r /k /h /i /y


图10.xcopy示例:使用图中给出的xcopy命令选项拷贝所有目录,子目录和文件到共享站点

作者提醒:当你在Vista操作系统中运行xcopy命令时,你将会看到一个消息:“xcopy已经被弃用,请使用ROBOCOPY”,ROBOCOPY意思是“强壮的文件拷贝”,在Vista中,在命令行输入ROBOCOPY /?你可以找到更多有关它的信息。

XCOPY 对阵Copy Web Site工具

现在你已经看到这两个方法了,你会使用哪一个呢?相对xcopy而言,使用Copy Web Site工具时有一个缺陷,就是页面初始载入时间比较缓慢,那是因为Copy Web Site工具拷贝你的所有源代码页面作为源,并且它不执行编译操作,此外,拷贝源文件还引入了潜在的风险,因为人们可以看到源代码,然而,Copy Web Site改善了xcopy,因为你可以使用它部署你的应用程序到一个文件系统中,一个IIS本地实例,FTP站点,或者甚至远程站点程序集。

6.预编译你的站点

你可以使用ASP.NET 2.0预编译特性缩短web页面的载入时间,并且可以避免在服务器上直接部署源代码,预编译是一个强大的新特性,它可以检查并提供任何编译失败的警告消息,让你部署应用程序时不需要存储任何源代码在服务器上,预编译可以减少应用程序响应时间和提升性能,关于预编译的完整讨论已经超出了本文的范围,你可以参考http://www.devx.com/dotnet/Article/34418/0

7.减少文件大小

挤出web页面、脚本和样式表中额外的空格和不需要的字符对减少文件大小通常是一个很好的实践,你可以使用IIS压缩对比减少文件大小前后网络带宽的消耗和性能的改善,即使使用IIS压缩对性能有一点点改善(压缩需要额外的进程),它仍然算是一个最佳实践,因为细微的性能改善相对于大的受益是可以忽略不计的,压缩可以减少网络带宽消耗将近50%!http://www.sswug.org/see/Using_Http_Compression_through_IIS-38924这篇文章提供了更多关于IIS HTTP压缩的信息。

8.利用点击一次部署和自动更新

点击一次部署是Microsoft .NET 2.0引入的一个战略,你可以使用它部署应用程序到文件系统、本地web服务器、远程web站点或FTP站点。
点击一次的本质是你在客户端有一份应用程序,当更新可用时你可以检查到并可以下载它们,允许你配置你的应用程序安全地更新并定期发布到Internet,点击一次提供了更低的成本,并且自动更新与版本控制没有冲突!你可以使用点击一次部署战略为应用程序提供热更新,只下载并安装改动过的程序库,然而,可能有些情况下点击一次不能按预期工作,例如:如果一个客户端的浏览器代理服务器已经缓存了部署文件的某个旧版本,那个客户端可能不会按预期那样更新,使用HTTP内容过期可以减轻这个问题。

最后想说的几点内容

你在部署应用程序之前,确保应用程序web.config文件中的Compilation Debug属性被设置为false了,当你设置为true时,你的应用程序会吃掉更多的内存并消耗更多的处理器时间,同时脚本和图像下载不会缓存到本地。

当你部署应用程序到生产服务器上之前,以Release模式构建你自己的程序集,通过设置web服务扩展为“启用”确保你允许IIS处理动态内容。

确保你已经对所有配置数据都进行加密处理,如连接字符串等。
记住通过IIS使用HTTP压缩建设文件的大小,改善应用程序的整体性能。
最后,准备一个检查列表列出部署步骤是非常明智的,使用交叉检查确保没有跳过任何一个步骤。

正如你看到的,将应用程序部署到生产环境有大量的策略,请选择适合你自身的最佳部署模式,准备一个检查列表,使用它进行校验,你会发现生产部署也可以变得非常顺利。