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

ASP.NET
VS2008SP1下jQuery使用初体验
使用asp.net 2.0中的SqlBulkCopy类批量复制数据
asp.net定点执行任务总结
通过webBrowser 来轻松模拟网页来源
ASP.NET框架 数据回发与事件回发
浅谈ASP.NET内部机制
通用语言规范
GC垃圾回收
ASP.NET 配置
ASP.NET 安全认证
ASP.NET生成复合控件
asp.net中forms验证
DataTable中数据记录的统计
关于无aspx文件部署,我的一些探索心得
ASP.NET刷新页面的六种方法
ASP.NET MVC应用程序的本地化、单元测试
详解ASP.NET的四种状态
.NET与Java间进行Web Service交互的选择
自己动手实现Asp.net的MVC框架
ASP.net中网站访问量统计方法

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 273 ::
收藏到网摘: 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和一些其他的资源文件就可以了,不用一次性部署很多很多的文件。可是一般部署都是整个目录拷贝啊!