决定一个人富有的三个条件,一是出身,二是运气,三是努力
If you can dream it,you can do it! Nothing Impossible~

 

发布网站的时候有三个选项,很多人都不知道到底是怎么用的,简单说说:  
   
  第一个选项指定发布后是不是可以修改aspx文件,如果勾选,则发布后的网站行为基本与ASP.NET   1.1一致,只要没有增删修改控件,可以直接在服务器上修改aspx文件不用重新发布网站。  
   
  第二个选项指定是不是将每个aspx文件都编译成一个DLL文件,这样,就可以在修改了哪个aspx网页(包括aspx和cs文件),只需要更新一个DLL文件就行了,不用整站全部更新。

 

1.允许更新此预编辑站点

选中这一项后,编译出来的包括aspx文件和dll,与2003下一样。
不选中这一项,编译出来的aspx中没有界面信息,只有一句静态文本,就是不允许发布后修改页面

为了不让订阅网站的用户在第一次打开页面时感受到明显的延迟,可以使用"完全预编译(full pre-compilation)"方式.
如果是想此编译方式具有最大的安全性,应去掉"允许更新此预编译站点(Allow this precompiled site to be updateable". 这样代码文件(code,即cs文件)和内容文件(content file,即aspx)都会预编译

2,使用固定命名和单页程序集

会案照画面的类名编译出很多名字固定的dll。

3.对预编辑程序集启用强命名
在多数情况下,完全预编译方式正是所需要的方式,但是有时候因为内容文件变化不大,你可能希望在网站发布后,不用每次把所有的代码与内容文件全部编译,也许内容文件就不用再次编译,只需编译代码文件即可,这种情况下,就选中"允许更新此预编译站点",这种方式称为"只预编译代码文件(pre- compilation of code only)"方式.此方式与"完全预编译方式"相比较,只有一点区别,即内容文件仍是原始版本,而不是存根 (stub)版本,其它效果相同.在内容文件发布后也可以对其进行编辑,其变动在以后的请求到来时起作用,对于访问此站的用户来说是透明的.


附:
强命名(strong names) 如果一个assembly需要共享,则其必须使用强命名.一个强命名唯一标识了一个assembly.有四部分组成: 1,assembly名称(不包含文件扩展名);2,版本; 3,culture;   4,密钥对(即一个公钥和一个私钥),保存在key文件中,所以说 key文件就是同时包含了公钥和私钥的文件,在使用强命名时当然是需要此key文件的.创建key文件用命令: sn -k KeyPair.snk

延迟签名:显然,每个公司的私钥都必须非常安全地保存,然后这就带来一个进退两难的问题:在开发和测试一个共享的assembly时,需要使用强命名方式, 而创建强命名时肯定需要访问私钥的,但是又不能把公司的私钥提供给参与项目开发的且需要创建强命名的所有开发人员,怎么办? 这时就要用"延迟签名"技术.此种方式下,在创建强命名assembly时,只需要提供公钥,因为公钥提供给所有的人是允许的,也是安全的,利用公钥,开发人员可以进行程序的开发和测试工作,直到准备进行最终的build时,才同时使用公钥和私钥. 延迟签名需要从key文件中把公钥解出来,形成独立的公钥文件,通过使用命令: sn -p KeyPair.snk PublicKey.snk即可.这样,publicKey.snk只包含公钥,就可以用了.

出现问题

visual studio2005将网站开发和网站发布的目录分开,本身是个很好的设定
但每一次发布网站,网站dll文件都会生成随机的名字,页面继承的类都会继承随机的名字
这就造成了,哪怕是一点很小的修改,在发布网站之后,也必须重新上传所有的页面
如果采用“固定命名和单页程序集”的方式,又会生成太多dll文件,看着就心烦  

解决方法

安装:   
http://download.microsoft.com/download/9/4/9/9496adc4-574e-4043-bb70-bc841e27f13c/WebDeploymentSetup.msi
    
右键在当前解决方案里生成一个:Add Web Deployment Project 项目, 在该项目里就可以设置生成DLL的命名方式了,以后生成该项目就可以生成相应的网站!原有的发布网站的功能可以退休了!


参考微软原文

http://msdn2.microsoft.com/en-us/asp.net/aa336619.aspx

使用WebDeployment Project改善VS2005发布网站问题 (一) 基础

VS2005发布网站时不会像VS2003一样生成规则的DLL文件、而生成的DLL文件名含有随机数且不能一个项目生成一个DLL文件、让人有一些遗憾、为了做到像vs2003一样,微软发布了WebDeployment Project插件可解决此问题:
下载地址
1、下载后安装、右键选择vs2005中的项目、会出现一个选项"Add Web Deployment Project"(http://www.cnblogs.com/chy710)

2、选择添加一个WebDeployment Project(输入程序集名称和发布地址)

3、此时解决方案中会多出一个项目(http://www.cnblogs.com/chy710)

4、右键选择该项目设置相应属性


5、右键选择该项目选择“生成”、此时会发布网站到指定的目录、生成DLL文件同vs2003一样、更新时只需上传DLL文件
(http://www.cnblogs.com/chy710)

我运行发现这个错,

错误 1 “aspnet_merge.exe”已退出,代码为 1。 C:"Program Files"MSBuild"Microsoft"WebDeployment"v8.0"Microsoft.WebDeployment.targets 574 9 DaishuSite

后来网上查了下。是类存在同名的缘故。

将VS 2005的工具-选项-项目和解决方案-生成并运行,设置“MSBuild 项目生成输出详细信息”,选择“详细”。再次生成Web Deployment Projects项目,“输出”框内的信息就变得非常丰富了;这样就可以查看哪里出错了

posted on 2008-07-31 20:23  ZEKELOVE  阅读(1352)  评论(2编辑  收藏  举报