C#.NET 无aspx文件部署

来源:互联网 发布:如何给淘宝头条投稿 编辑:程序博客网 时间:2024/06/07 23:38

要实现无aspx文件的部署,必须使用一个工具——The ASP.NET Compilation tool (Aspnet_compiler.exe)。
根据MSDN,这个工具是在.net 2.0才添加的新工具。

aspnet_compiler  [-?]                 [-m metabasePath | -v virtualPath [-p physicalPath]]                 [[-u] [-f] [-d] targetDir]                 [-c]                 [-errorstack]                 [-fixednames]                 [-nologo]                 [-keyfile file | -keycontainer container [-aptca] [-delaysign]]

这个工具的参数就是上面的了,可以通过SDK Command Prompt来调用,这个比cmd方便点,主要是不用一个一个进目录了。

-?是看帮助,这个大家都知道
-m 是指定一个具体的本地目录
-v 是指定一个虚拟目录
-p 是指定一个物理目录

这里大概就是用这三个,其他的是用来用强命名发布等一些功能。
我编译用的命令是
aspnet_compiler -v /test -p g:/website g:/website1
我把g:/website里的web app编译到g:/website1,不知道为什么非要用-v指定一个虚拟目录就不得而知了,我的计算机上面没有一个test的虚拟目录,可是也编译成功了,哪位大哥可以解释一下,我觉得指定虚拟目录的目的可能是为了编译时用的。

编译后会包含只有一句:“This is a marker file generated by the precompilation tool, and should not be deleted!”的若干个与原来aspx同名的文件。

还会在bin目录中生成一个dll文件和的若干个与原来aspx的文件项对应的compiled,我用.Net Reflector打开发现它不是一个中间文件,后才用记事本打开,发现是一个xml格式的标记文件,里面记载了一些原始的信息,比如对应页面的文件名和后台文件名。

在这里可以看到我们以前编译的时候用-v指定的那个虚拟目录。真的很不解,对于这个问题。

发布的时候删除那些空的aspx和compiled也没有任何问题,web app一切正常。

这个功能还好,特别是在保护我们的源码方面,不过也还是有一些问题,如果程序加入了一些第三方的控件,可能会出现好多问题,我的这个就出现问题了。

编译后原来的原来的web.config还在,内容也在。

而vs 2005里的发布
build - publish 只是编译了后台的.cs .vb的文件,aspx文件里面的内容只是重新改写了一些<%@ page %>里面的一些引用。

我个人认为虽然可以用上面的工具把这些aspx文件里面的东西隐藏起来,不过细细想想aspx里面也的确没有什么值钱的东西啊,都是些控件的标识,如果把外观用css或者theme来做,那只能看到一堆<asp:XXXXX>的东西,而且如果客户端浏览看到的也只有html代码。

不过如果一些人喜欢把代码写在aspx页面内部,而不是分割代码的话,那这个工具用处就很大了。

其实用vs 2005的publish处理一下发布感觉就很好了。

这个工具好的一点就是可以只发布一个Dll和一些其他的资源文件就可以了,不用一次性部署很多很多的文件。可是一般部署都是整个目录拷贝啊!

不知道微软做了个这个东东是什么用意。

我很想知道关于这个工具的一些其他问题,希望大虾们给小虾米们点帮助。

____________________________________________________________________________________

asp.net项目在部署后,aspx文件并没有被编译,这种情形要一直维持到用户第一次访问页面,该页面文件aspx才会转化成cs,并编译成dll,这次访问速度不会很快,但从此以后,所有访问者将得到理想的访问速度。

那么如何在部署后就让所有的aspx处于已经编译成dll的状态呢?通过上面的描述我们不难想到,只要把所有页面都访问一遍即可,这个访问有一个简单方法,就是递归项目所在的文件夹,把物理路径转化成web访问的http地址,并使用httpRequest访问一遍即可(如果有权限控制,可能要作更多的工作)。

访问后,在/WINNT/Microsoft.NET/Framework/版本号/Temporary ASP.NET Files/项目名称/随机数/随机数
这个目录下会生成对应的文件,其中*.cs是通过aspx生成的类文件(该文件经过处理后,就可以实现无aspx文件的部署),*.dll是通过aspx生成的dll文件,*.res是aspx文件中除去runat=server剩余的不需要编译的部分

我们只要再作两步工作,就可以实现无aspx部署了:

1、把生成的全部dll文件拷贝到项目的bin目录下;
2、在web.config中加入类似下面的配置节声明
<httpHandlers>
    <add verb="*" path="WebForm1.aspx" type="ASP.WebForm1_aspx, srqmg4mo" />
</httpHandlers>
其中,
srqmg4mo是生成的dll的程序集名称,我们得到的dll文件名和程序集名称相同;
ASP.WebForm1_aspx是命名空间,统一为ASP.aspxFileName_aspx格式;
WebForm1.aspx是我们要处理的aspx文件名
 

下载:
http://file.mofile.com/
提取码:6988383281481805

原创粉丝点击