首先申明:标题中的如果是可以去掉的。

想写这篇文章很长时间了,一来是跟大家分享一下,别浪费时间在写代码生成器上面了,什么CodeSmith,XXCodeGenerator等等,都是浮云;二来想跟大家交流交流已达到相互提高的目的。

这篇文章先不讲如何实现,主要是讲讲思想,以及在实现过程中可能会碰到的一些问题:

1。每个人都写过自己的代码生成器,每个人都曾经为自己的代码生成器自豪过,但是有一个缺点,就是代码生成器都是为自己,或者为自己的团队定制的,换一个人,或者换一个团队环境,你的那个代码生成器可能就废了。

2。是否碰到过,每次你的生成的代码都有一些不尽人意的时候(小问题如:一个字符的问题,字段,属性摆放位置,代码缩进等等,大问题如:增加一个方法),你都会打开你的代码生成器源代码,进行一些调整,然后重新编译,ok,问题解决了,可是类似的情况可能会发生n多次。。。唉。。。

3。有没有一个办法可以解决在出现上述第二条中出现的问题,稍微调整一下模板,然后就可以了。方案当然有,现成的就有大把的基于模板的代码生成器,如CodeSmith。

4。如果你是大牛的话,如果你因为用别人的代码生成器而感到拘束,因为不是自家的东西不顺畅,所以你想拥有自己代码生成器,所有你开始了自己的代码生成器的开发历程,主要有下面几种方式:

a).正则表达式查找替换(缺点:要写很多正则表达式,比如,常量正则表达式,列表/列表项正则表达式);

b).基于xml文件方式,然后采用xmlDocument,XPath等方式加载,其实类似第一种,也是查找替换(这种相对第一种稍微好点,博客园中路过秋天大哥的秋色园的页面html代码就是通过这样的方式实现的,至于难度,大家研究过的都知道有多么复杂了)

c).高级点,可能涉及到逻辑处理if else if else, for, foreach, while等等,这种需要话的时间可不是一点点,碰到的问题也是各种各样的,稍微在博客园中搜索一下,就可以找到很多类似的文章

5。4中提到的三种代码生成器都不是我要的,所以一直还是停留在自己为自己定制的代码生成器上,没增加一段内容,都需要修改源码,编译。。。。纠结。

6。一次偶然的机会,看到有人说了这么一句话:ASPX页面上最好的代码生成器,”诶,这个不错哦“,周杰伦说过!但是如果要实现基于ASPX文件的代码生成器,需要将aspx文件宿主在一个ApplicatioinHost中,才能够被解析和访问,一般有下面几种方式:

a).IIS;

b).如果你没有IIS你可以使用中安装VisualStudio的时候自带的WebDev.WebServer.exe中;

c).网上有个开源的项目,名字为:CassiniServer,可以将一个WebSite目录发布成一个网站,可以让你通过浏览器访问;(另外,路过秋天大哥也参考这个写了一个工具,名字为:IIS_V10,本来想个给地址下载的,可是上秋色园使用”找找看“功能搜索关键字“IIS_V10”居然找不到相关文章,看来秋天大哥需要看看你的“找找看“的bug了。)

d).写自己的WebServer,写一个WebServer可不是那么简单的事情哦,虽然我也试过,但是却以失败告终,如果想尝试的同学可以参考用C#开发自己的Web服务器 - 前端开发的日志 - 网易博客系列文章,虽然很难,但是还是可以学到很多东西的。

7。到这里我考虑放弃了,但是在我看到这篇文章(自己写Web服务器(续) - 猴健居士 - 博客园)的时候,想我找到了解决方案了:下面这一句是核心代码:

private AspxCreator _aspxHost = (AspxCreator)ApplicationHost.CreateApplicationHost(typeof(AspxCreator), "/",AppDomain.CurrentDomain.BaseDirectory);

如果觉得不够,可以去仔细看看那篇文章。

总结:一路走来,真是花了不少力气,碰了不少墙壁,虽然走了很多弯路,但是学到了不少东西,还是值得的,代码实现尚在完善中,请大家期待!

所有的代码生成器都是浮云,如果可以用aspx文件作为模板的更多相关文章

  1. 各种U启网启什么的都是浮云

    对于支持BIOS的电脑,优盘启动,网络启动的各种方案感觉都是浮云,从硬盘启动PE进行维护才是最可靠的.不点在开发wee的过程中给了我们很多维护的灵感,不用费劲地折腾fbinst/U+/量产/PXE/I ...

  2. oracle第一招之神马都是浮云

    oracle: 一款关系型(二维表)数据库,可以用来存储海量数据.在大数据量并发检索的情况下,性能要高于其他的同类数据库产品.一般运行环境是Linux和Unix操作系统上! 目前最流行的商业数据库,主 ...

  3. 轻松搞定javascript预解析机制(搞定后,一切有关变态面试题都是浮云~~)

    hey,guys!我们一起总结一下JS预解析吧! 首先,我们得搞清楚JS预解析和JS逐行执行的关系.其实它们两并不冲突,一个例子轻松理解它们的关系: 你去酒店吃饭,吃饭前你得看下菜谱,点下菜(JS预解 ...

  4. 所有设计复杂的ORM都是浮云

    很久没有写文章了. 一直很忙,不是很有时间整理. 今天主要是来吐槽下那些设计很复杂的ORM的. 项目做的越多,越觉得ORM这个东西设计的太复杂实在是没什么意义. 比较推崇Dapper这样比较简单,效率 ...

  5. 思科恶意加密TLS流检测论文记录——由于样本不均衡,其实做得并不好,神马99.9的准确率都是浮云啊,之所以思科使用DNS和http一个重要假设是DGA和HTTP C&C(正常http会有图片等)。一开始思科使用的逻辑回归,后面17年文章是随机森林。

    论文记录:Identifying Encrypted Malware Traffic with Contextual Flow Data from:https://songcoming.github. ...

  6. 神马都是浮云,unity中自己写Coroutine协程源代码

    孙广东   2014.7.19 无意之间看到了,Unity维基上的一篇文章,  是关于自己写协程的介绍. 认为非常好,这样能更好的了解到协程的执行机制等特性.还是不错的. 原文链接地址例如以下: ht ...

  7. 关闭2010中 word每次都提示:所做更改会影响共用模板 Normal.dotm

    '您正试图运行的函数包含有宏或需要宏语言支持的内容.而在安装此软件时, 您(或您的管理员)选择了不安装宏或宏的控件的支持功能.' 每次关闭word都要出现这个该死的提示,头痛了半天. 谢谢各位! 我终 ...

  8. eclipse 启动后,啥也不干,就一直在loading descriptor for XXX (XXX为工程名),,其他什么操作都不能操作。 如下图所示,保存文件也无法保存。 这个怎么办?一年好几天,什么都干不了!!!!!

    解决办法: 解决办法是 断一下网就好了

  9. 用aspx文件作为模板

    用aspx文件作为模板 首先申明:标题中的如果是可以去掉的. 想写这篇文章很长时间了,一来是跟大家分享一下,别浪费时间在写代码生成器上面了,什么CodeSmith,XXCodeGenerator等等, ...

随机推荐

  1. spring小例子-springMVC+mybits整合的小例子

    这段时间没更博,找房去了...   吐槽一下,自如太坑了...承诺的三年不涨房租,结果今年一看北京房租都在涨也跟着涨了... 而且自如太贵了,租不起了.. 突然有点理解女生找对象要房了..   搬家太 ...

  2. .NET DLL 保护措施详解(四)各操作系统运行情况

    我准备了WEB应用程序及WinForm应用程序,分别在WIN SERVER 2012/2008/2003.Win7/10上实测,以下为实测结果截图: 2012 2008 2003 WIN7 WIN10 ...

  3. windows下部署 ISCSI存储

    Write bt xiaoyang 配置篇 这里使用的软件为iscsiTargetqfe 1.      首先安装软件,可在微软官网下载 2.      然后找到安装程序 3.      完成安装后打 ...

  4. 【iOS基础学习随笔-1】-基于对象的程序设计

    一.对象: 1.在基于对象的程序设计中,一个程序分解成若干个不同的对象,每个对象都有自己独有的能力. 2.一个生产线上的一个工位只负责做好一件事.如果生产出的汽车的车门没有漆好,那问题很可能出在负责上 ...

  5. Swift字符串类型

    字符串初始化 1.初始化 let  someString        =   "Some      string    literalvalue" let wiseWords = ...

  6. iOS-NSOperation多线程

    NSOperation 一.简介 1.使用步骤 配合使用NSOperation和NSOperationQueue也能实现多线程编程 先将操作封装到一个NSOperation对象中 然后将NSOpera ...

  7. 【学习笔记】【C语言】scanf函数

    1. 简介 这也是在stdio.h中声明的一个函数,因此使用前必须加入#include <stdio.h>.调用scanf函数时,需要传入变量的地址作为参数,scanf函数会等待标准输入设 ...

  8. jqure 获取地址栏的参数

    从一个页面跳转到另外一个页面传参,我们用jqure得到参数需要两部分: 处理浏览器地址栏参数的方法: function GetQueryString(name) { var reg = new Reg ...

  9. (转)RabbitMQ消息队列的小伙伴: ProtoBuf(Google Protocol Buffer)

    什么是ProtoBuf? 一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化.它很适合做数据存储或 RPC 数据交换格式.可用于通讯协议.数据存储等领域的语言无关.平台无关.可扩 ...

  10. .NET清除Session 的几个方法[clear/removeAll/remove/Abandon]

    1.clear() 清空所有session对象的值,但保留会话   2.removeAll() 调用clear()方法   3.remove("SessionName") 删除某个 ...