aspx to dll

最近项目中产生一个需求,需要对一个site下的每个aspx和其对应的cs文件封装进一个dll中,并且在web.config文件中通过配置httphandlers来实现访问。

查了半天资料,只找到了一篇还是讲.net 1.1的。照着方法做了以后,发现很多地方不合适,琢磨了半天,终于给我搞定。

以下是详细过程:

  1. 打开Visual Studio 2005,New一个Website Project
  2. 默认会创建一个Default页面,并且是没有namespace的,为了方便,添加namespace为Test,类名为Default,并且在页面上拖一个按钮,双击添加事件。处理完毕后,可见代码分别如下
    [Default.aspx.cs]
    [Default.aspx]
    编译这个项目,确保成功,并且会在项目目录中添加一个Web.config文件。
  3. 在Default.aspx.cs页面添加几个乱字符,随便什么地方。这样做的目的是为了不让系统编译成功。
  4. 用之前访问Default.aspx页面的url访问该页面,会出现编译错误提醒页面。点击其中的[显示完整的编译源]链接,会显示编译错误的编译代码,可以注意到,aspx页面已经被某个没被公开的工具解析成了一段代码。[Code.cs]
    复制这些代码到任意的支持正则表达式匹配的文本编辑器,替换掉所有的行号,#line default和#line hidden这样的编译器标识。删除顶部的checksum信息。删除所有的以#line开头的行。并且删除多余的空行。
  5. 注意到代码分成了两个部分,上半部分是Default class的部分类。下一部分是ASP.default_aspx class的内容,其实是Default.aspx解析了以后的结果。做如下处理:copy上半部分的分布类代码和Default.aspx.cs文件中的所有代码到一个文件中,比如:Default.cs,并且删除刚才添加的为了让编译器编译出错的那些代码。下半部分的代码也保存到另外一个部分的文件中,比如Default_Aspx.cs.处理后代码如下:
    [Default.cs]
    [Default_Aspx.cs]
     屏蔽掉Default_Aspx.cs文件的以下几行
    //private static bool @__initialized;
    //private static object @__fileDependencies;
    //string[] dependencies;
    //if ((global::ASP.default_aspx.@__initialized == false))
    //{
     //dependencies = new string[2];
     //dependencies[0] = “~/Default.aspx”;
     //dependencies[1] = “~/Default.aspx.cs”;
     //global::ASP.default_aspx.@__fileDependencies = this.GetWrappedFileDependencies(dependencies);
     //global::ASP.default_aspx.@__initialized = true;
    //}
    //this.AddWrappedFileDependencies(global::ASP.default_aspx.@__fileDependencies);
    [这几行是用来检查页面依赖是否有被改动过。]
  6. 删除掉website中的Default.aspx页面和Default.aspx.cs文件,并且添加App_Code文件夹,将刚才保存的两个文件添加到该Website Project的该文件夹中,并且在Web.config文件中添加如下映射 
       <httpHandlers>
          <add verb=”*” path=”Default.aspx” type=”ASP.default_aspx”/>
        </httpHandlers>,
    访问Default.aspx页面。就可以跳入刚才添加的两个文件进行调试。
  7. 如果想编译成dll的话,先用csc build Default.cs 为default.dll,再引入这个dll build Default_Aspx.cs。然后引用进这个项目就可以了。当然还是要删除App_Code文件夹下面的两个文件,否则会出现同名问题。 

Over。

PS,在处理有图像的页面时,需要将相对路径转化成绝对路径,否则会有意想不到的事情发生。正在研究中。

PS,感谢浙江省绍兴市解放北路148号交通大厦六楼 周杰忻以及这篇参考 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值