选择 Publish web site后,选择发布地址,可以使ftp,http,或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 资源文件js、images都没有变化,web.config没有变化
l bin目录下生成了一些dll和带后缀为.compiled的文件,除了引用的dll外,项目本身是根据文件夹(这个文件夹里必需有非资源文件)的数量生成相同数量的dll,app_code是主dll,其他以App_Web开头后面的字母属于随机生成。而且每次生成的不一样。每个.compiled对应一个aspx文件。
l 总结:aspx文件无法更改,有多少文件夹基本上就会有多少dll
Test2:选1- Allow this precompiled site to be updatable
l 文件夹的结构没有变化,
l 没有.cs文件,.aspx文件没有变化。
l 资源文件js、images都没有变化,web.config没有变化
l bin目录下生成了一些dl文件,除了引用的dll外,项目本身是根据文件夹(这个文件夹里必需有非资源文件)的数量生成相同数量的dll,app_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 资源文件js、images都没有变化,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罗
选择1和2后,修改aspx页面,没有问题
重新发布选择1和2 ,替换更换了的dll,更新成功
重新发布选择1和2 和3,替换更换了的dll,更新成功,这说明强命名没有影响
选择2生成,只要替换相应的dll就可以了,这样的话,那其他文件干什么用的呢,占位马,特别是那个. Compiled文件