与VS集成的若干种代码生成解决方案[博文汇总(共8篇)]

前一阵子写了不少关于代码生成相关的文章,介绍了一些如何通过VS自动生成代码的解决方案,比如CodeDOM、T4以及ASP.NET的BuildProvider等。现在将它们作一个汇总,给广大读者作一个参考。

[第1篇] 通过CodeDOM定义生成代码的结构

我不知道大家对CodeDOM的代码生成机制是否熟悉,但是有一点可以确定:如果你使用过Visual

Studio,你就应该体验过它带给我们在编程上的便利。随便列举三种典型的代码生成的场景:在创建强类型DataSet的时候,VS会自动根据Schema生成相应的C#或者VB.NET代码;当我们编辑Resource文件的时候,相应的的后台代码也会自动生成;当我们通过添加Web
Reference调用Web Service或者WCF
Service的时候,VS会自动生成服务代理的代码和相应的配置。总的来说,通过和VS集成的动态代码生成工具使我们可以“强类型”的方式进行编程,进而提供我们的效率并减低错误的几率。

CodeDOM
提供了表示许多常见的源代码元素类型的类型。您可以设计一个生成源代码模型的程序,使用CodeDOM
元素构成一个对象图。而这个对象图包含C#或者VB.NET代码包含的基本元素:命名空间、类型、类型成员(方法、属性、构造函数、事件等),并且包括方法实现的具体语句(Statement)。也就是说它的结构就是对一个具体.vb或者.cs文件代码的反映。在这里我不会具体介绍CodeDOM体系结构……[阅读全文]

[第2篇] 通过Visual Studio的Custom Tool定义代码生成器

在《前篇》中我们已经通过CodeDOM的形式定义了将要生成的代码结构,而这个CodeDOM对象就是CodeCompileUnitCodeCompileUnit本身是与编程语言无关的,我们可以利用基于某种编程语言(VB.NET或者C#)的CodeDomProviderCodeCompileUnit对象转换成具体的代码文本。为了让我们的VS自动地为我们生成代码,我们需要以Custom

Tool的形式编写相应的代码生成器。我们编写的代码生成器最终通过COM组件的形式对外提供服务,所以其中涉及到COM组件的注册。为了实现同VS的集成,还涉及到相应注册表设置……[阅读全文]

[第3篇] 不同于CodeDOM的代码生成机制——T4

前面两篇介绍了如何通过CodeDOM+Custom

Tool的代码生成方式实现了代码的自动生成。实际上,我们最常用的代码生成当时不是CodeDOM,而是T4,这是一个更为强大,并且适用范围更广的代码生成技术。T4是对“Text
Template Transformation
Toolkit”(4个T)的简称。T4直接包含在VS2008和VS2010中,是一个基于文本文件转换的工具包。T4的核心是一个基于“文本模板”的转换引擎,我们可以通过它生成一切类型的文本型文件,比如我们常用的代码文件类型包括:C#、VB.NET、T-SQL、XML甚至是配置文件等。

对于需要通过T4来进行代码生成工作的我们来说,需要做的仅仅是根据转换源(Transformation

Source),比如数据表、XML等(由于例子简单,HelloWord模板没有输入源)和目标文本(比如最终需要的C#或者T-SQL代码等)定义相应的模板。T4模板作用就相当于进行XML转化过程中使用的XSLT。

T4模板的定义非常简单,整个模板的内容包括两种形式:静态形式和动态动态。前者就是直接写在模板中作为原样输出的文本,后者是基于某种语言编写代码,T4引擎会动态执行它们。这和我们通过内联的方式编写的ASP.NET页面很相似:HTML是静态的,以C#或者VB.NET代码便写的动态执行的代码通过相应的标签内嵌其中。[阅读全文]

[第4篇] 通过T4模板实现单文件的代码生成

在《前一篇》中,我对T4模板的组成结构、语法,以及T4引擎的工作原理进行了大体的介绍,并且编写了一个T4模板实现了如何将一个XML转变成C#代码。为了让由此需求的读者对T4有更深的了解,我们通过T4来做一些更加实际的事情——SQL
Generator。在这里,我们可以通过SQL Generator为某个数据表自动生成进行插入、修改和删除的存储过程……[阅读全文]

[第5篇] 通过T4模板实现多文件的代码生成

在《前一篇》中我们通过T4模板为我们指定的数据表成功生成了我们需要的用于添加、修改和删除操作的存储过程。但是这是一种基于单个文件的解决方案,即我们必须为每一个生成的存储过程建立一个模板。如果我们提供一种基于多文件的代码生成方式,将会为编程人员带来极大的便利。借助于T4 ToolBox这个开源工具箱,多文件的SQL Generator的实现变得异常简单。[阅读全文]

[第6篇] 解决T4模板的程序集引用的五种方案

如果你的T4模板需要调用一个自定义的类型,并且该类型定义在某个非系统程序集中,你就需要通过T4<#@
assembly…#>指令引用该程序集。在VS 2008环境下,你只需要为当前项目添加相应的程序集引用,并且通过<@
assembly…#>指令的name属性指定程序集(Dll)的文件名即可。但是这种方式对于VS
2010则行不通,因为T4引擎在解析和编译模板的时候并不会从项目引用列表中去定位目标程序集。本篇文章为你介绍在VS2010下5种不同的程序集引用的方式……[
阅读全文]

[第7篇] 编写T4模板进行代码生成无法避免的两个话题:"Assembly Locking"&"Debug"

出于提高性能考虑,T4引擎在进行基于代码生成的模板转换(Template

Transformation)的时候,会始终重用同一个AppDomain。由于该AppDomain不会自动卸载,这就会导致该AppDomain始终锁定所有被它加载的程序集。如果我们需要释放程序集,我们不得不重启VS。但是,对于T4模板的开发调试阶段,这种通过重新启动VS的方式去释放程序集以确保我们的项目能够成功编译是不能接受的。那么,是否有一种解决方案既能够确保T4引擎能够进行正常的模板转换,又能避免它强行锁定引用程序集呢?

VS和一些T4编辑器虽然给了基本的智能感知支持,但是在绝大部分我们相当于在编写纯文本的脚本,所以对于一些比较复杂的模板转换逻辑,我们需要通过Debug的方式去发现一些无法避免的问题……[阅读全文]

[第8篇] 通过自定义BuildProvider为ASP.NET提供代码生成

对于ASP.NET应用的开发者来说,你可能不知道什么是BuildProvider,但是你几乎无时无刻不在使用它所带来的代码生成机制。当你创建一个.aspx文件的时候,为什么会自动创建对应源代码?当你在该.aspx页面中以XML的方式添加一个按钮,源代码中为什么会自动添加一个同名的属性。实际上,ASP.NET就是通过一个特殊的BuildProvider实现了将.aspx文件内容转换成相应的源代码,这个特殊的.aspx文件就是:PageBuildProvider。基于不同的文件类型,ASP.NET会采用不同的BuildProvider进行源代码的生成。比如UserControlBuildProvider和MasterPageBuildProvider分别实现了基于用户控件文件(.ascx)和母板页(.master)的源代码生成……[阅读全文]

作者:蒋金楠
微信公众账号:大内老A
微博:www.weibo.com/artech
如果你想及时得到个人撰写文章以及著作的消息推送,或者想看看个人推荐的技术资料,可以扫描左边二维码(或者长按识别二维码)关注个人公众号(原来公众帐号蒋金楠的自媒体将会停用)。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文链接

时间: 2024-11-02 11:21:11

与VS集成的若干种代码生成解决方案[博文汇总(共8篇)]的相关文章

微信与SAP集成的全栈完美解决方案实例+技术篇

微信与SAP集成的全栈完美解决方案实例+技术篇   http://mp.weixin.qq.com/s?__biz=MzIzNDY2ODM5Ng==&mid=100000090&idx=1&sn=fc8274867107ce644ea07665f37cd18f&chksm=68f3a9595f84204f29d53626786945118d4f2b4d424de0b7532a8a407d41dcdebfba81846d45&mpshare=1&scene=5

Android软键盘遮挡的四种完美解决方案_Android

一.问题概述 在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: 输入密码时输入框被系统键盘遮挡了,大大降低了用户操作体验,这就是开发中非常常见的软键盘遮挡的问题,该如何解决? 二.简单解决方案 方法一 在你的activity中的oncreate中setContentView之前写上这个代码 getWindow().setSoftInputMode(WindowManage

直播|超大型系统的持续集成与持续交付的解决方案及案例分析

人人都在谈敏捷开发的时代,大型系统要保证产品质量,实现快速迭代却变得不易.那么大型系统如何实现持续集成持续交付,进行产品迭代发布呢? 9月7日晚上20:00阿里巴巴高级测试开发专家--鲁小川,将在阿里云•为大家现场直播,提供解决方案!与此同时,直播现场特别设置答疑环节,让观众与专家进行一次零距离的沟通交流! 直播详情 直播时间:2016-09-07 20:00:00 直播地址:http://yq.aliyun.com/webinar/play/69 (报名之后才能收看直播哦~) 直播内容 主题:

jQuery源码-美元$的若干种使用方法

本文还可在github上查看,可点击这里~~~~ jQuery源码-美元$的若干种使用方法 学习jQuery源码,第一步是了解jQuery整体核心代码结构.第二步,当然就是了解无比强大无所不能的美元$.根据平常使用jQuery的经验,你会发现,几乎所有的语句都是以美元开头的,比如: $(function(){ console.log('dom ready 啦!!'); }); 又比如: $('#casper').addClass('handsome'); 当然还有其他...翻开jQuery的源码

Android软键盘遮挡的四种完美解决方案

一.问题概述 在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: 输入密码时输入框被系统键盘遮挡了,大大降低了用户操作体验,这就是开发中非常常见的软键盘遮挡的问题,该如何解决? 二.简单解决方案 方法一 在你的activity中的oncreate中setContentView之前写上这个代码 getWindow().setSoftInputMode(WindowManage

Crystal 三种报表解决方案大对比:.NET 对象模型,报表应用服务器对象模型,水晶企业对象模型

对象|服务器|解决 概述 对于使用 .NET 平台的 Web 应用程序开发,Crystal Decisions 为开发者提供了三种愈加高级的报表对象模型: 1. 水晶报表 Visual Studio .NET 版 (.NET) 对象模型:捆绑在微软 Visual Studio .NET 和水晶报表 9 开发者版及高级版中. 2. 新增的报表应用服务器 (RAS) 对象模型:捆绑在水晶报表 9 开发者版及高级版中. 3. 水晶企业 (Crystal Enterprise) (CE) 对象模型:在水

应该在Linux上使用的10种云解决方案

不久前,为用户提供一种备份远程机器上数据的简易方法还很稀奇.现在,我们已觉得这理所当然.Dropbox及其他公司简化了这项任务.苹果.谷歌和微软都提供各自的数据备份方法. 在Linux上,情况有点不一样.发行版并不提供各自的云服务来管理你的数据(不过Ubuntu过去拥有Ubuntu One).一些主流发行版并不提供尚可的Linux客户软件. 但是你并非不走运.许多流行的服务确实可以在Linux下使用.你还有办法可以部署自己的解决方案,对数据获得控制权. 专有服务 大多数商用的云存储服务依赖闭源代

IBM集成产品开发管理IPD解决方案

深圳的华为公司总部近两年来总是不定期地接待一些拜访者.这些人不是来谈合作或生意的,而是来向华为"取经"的.他们来自长虹.苏宁.工商银行等国内知名的大企业,而把他们和华为联系在一起的却是IBM. 用实践营销,拿经验赚钱 阳丹一年前的头衔是长虹的"副总工程师",现在他的头衔是"项目负责人".经常和长虹接触的人会发现,长虹内部人员的称谓发生了变化,以前的行政称谓都改成了业务称谓,而这样转变的幕后推手是IBM. 在1997年增长撞到"天花板&q

压缩图片并根据图片md5 存储的一种优化解决方案

后端我们在处理图片文件的时候,很多都需要对一些图片进行压缩.然后再保存.同时我们保存图片为了保证一张图片仅存储一次.我们都需要根据文件的md5 来存储. 这里我们理下思路: 获取图片文件 压缩图片文件 获取压缩后的图片文件md5 然后根据md5 进行自有的业务逻辑处理(一般就是如果存在就不再处理了) 这种思路是我们大部分都这样处理就行了. 因为一些业务让我对这种处理方式产生了质疑.这样会对图片质量大大的降低. A图片 第一次处理 A处理为B后 我们对A 图片最终保存的文件为B 第二次出现A 图片