当前位置: 首页 > 图文教程 > .Net技术 > ASP.NET > 关于无aspx文件部署,我的一些探索心得

ASP.NET
一些很酷的.Net技巧
Asp.Net2.0的新技术缓存通知
在ASP.NET中使用.NET组件
在ASP.NET中自动给URL地址加上超链接
.NET 窗体之间的交互
六大ASP.NET实用技巧
ASP.Net中实现RSA加密的方法
ASP.NET 2.0 AJAX中Webservice调用方法
ASP.NET中MD5和SHA1加密的几种方法
水晶报表PUSH模式多个表数据的显示
用.NET 操作Excel编程
ASP.NET 页面事件顺序和生命周期
用.Net的Web服务实现天气预报[转]
在ASP.NET下实现数字和字符相混合的验证码
在ASP.NET中调用存储过程方法新解
ASP.NET验证控件详解
ASP.NET中实现模版的动态加载
Asp.Net中带图片的重填按钮
如何在.Net 中把图片存入数据库
asp.net的MVC编程、MV编程以及URL重写

ASP.NET 中的 关于无aspx文件部署,我的一些探索心得


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 272 ::
收藏到网摘: n/a

要实现无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和一些其他的资源文件就可以了,不用一次性部署很多很多的文件。可是一般部署都是整个目录拷贝啊!