Never give up - LEO

人 只有在合适的地方 才能体现出最大的价值
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

VS2005 Publish web site

Posted on 2007-11-16 15:57  lizhiwen  阅读(1248)  评论(0编辑  收藏  举报
 

选择 Publish web site后,选择发布地址,可以使ftphttp,或file path

下面的三个选项如下:

1.       Allow this precompiled site to be updatable:  该选项允许*.aspx文件不编译到汇报集里,也就是选中该选项后,你可以改变页面的标记。这个类似于2003,但是有个地方发生了改变。

2.       Use fixed naming and single page assemblies:该选项运行你预编译特定的文件名称的代码。

3.       Enable strong naming on precompiled assemblies:该选项要求生成强命名的程序集。 

Test 1: 都不选

 

结果:

l         文件夹的结构没有变化,

l         没有.cs文件,.aspx文件都被加密,无法更改和察看。

l         资源文件jsimages都没有变化,web.config没有变化

l         bin目录下生成了一些dll和带后缀为.compiled的文件,除了引用的dll外,项目本身是根据文件夹(这个文件夹里必需有非资源文件)的数量生成相同数量的dllapp_code是主dll,其他以App_Web开头后面的字母属于随机生成。而且每次生成的不一样。每个.compiled对应一个aspx文件。

l         总结:aspx文件无法更改,有多少文件夹基本上就会有多少dll

 

Test2:选1- Allow this precompiled site to be updatable

l         文件夹的结构没有变化,

l         没有.cs文件,.aspx文件没有变化。

l         资源文件jsimages都没有变化,web.config没有变化

l         bin目录下生成了一些dl文件,除了引用的dll外,项目本身是根据文件夹(这个文件夹里必需有非资源文件)的数量生成相同数量的dllapp_code是主dll,其他以App_Web开头后面的字母属于随机生成。

l         该项除了bin目录生成的文件有点特别外,基本上和vs2003没有区别

l         总结:aspx文件可以更改,有多少文件夹基本上就会有多少dll

上面提到.aspx文件有个地方发生了改变,

此时如果你打开.aspx文件,

<%@ page language="C#" autoeventwireup="true" inherits="MyPage, App_Web_jmvb-kmt" %>

    会发现Page指令中<%@ page language="C#" autoeventwireup="true" inherits="MyPage, App_Web_jmvb-kmt" %>并不包含CodeFile,所以这种编译方式和ASP.NET1.1兼容。

    Page指令的inherits指出了MyPage.aspx的类集为MyPage和汇编集App_Web_jmvb-kmt。换句话说,当系统加载Page也没时,将会到bin文件夹下的App_Web_jmvb-kmt.dll加载MyPage类作为MyPage.aspx后台文件的页面类。

 

Test3:选2- Use fixed naming and single page assemblies

l         文件夹的结构没有变化,

l         没有.cs文件,.aspx文件都被加密,无法更改和察看。

l         资源文件jsimages都没有变化,web.config没有变化

l         bin目录下生成了一些dll和带后缀为.compiled的文件,除了引用的dll外, app_code是主dll。其他的dll都是一对一的对应一个aspx文件。每个.compiled对应一个aspx文件。每次生成的是一样的后缀。

l         总结:aspx文件无法更改,有多少文件,而不是文件夹,基本上就会有多少dll

 

Test4:选3- Enable strong naming on precompiled assemblies

这个选项选中后,还有几个附带选项,复选框可以用来实现"延迟签名(delay signing). 有两种使用强命名方式,一为通过利用key文件;二为使用Key Container,这种方式允许你使用RSA Key Containers.可以进行选择.

这种发布结果表面上和Test1是一样的,只是.dll有了强命名。

 

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

 

 

终结:

1.       第三个选项选不选对程序运行没有什么太大影响(我只做了简单测试),只是生成的程序集是否有强命名,就算更新的时候与更新之前一个有一个没有强命名也没有关系。

2.       如果你想在下次更新的时候,只更新修改过的dll和文件,就需要选择2,如果你没有选2,那么恭喜你,下次更新的时候需要全部更新

3.       如果你想获得安全性最好的,就不要选择1,相反,如果你想更改.aspx,那就要选择1

 

选择12后,修改aspx页面,没有问题

重新发布选择12 ,替换更换了的dll,更新成功

重新发布选择12 3,替换更换了的dll,更新成功,这说明强命名没有影响

 

选择2生成,只要替换相应的dll就可以了,这样的话,那其他文件干什么用的呢,占位马,特别是那个. Compiled文件