CodeDom系列四--Code生成

简介:

我们利用CodeDom技术生成了一些列Codedom Expression ,接下来的任务就是编译和生成,生成c#、Vb或者是.NET平台支持语言,编译程序集(dll或者是exe)。

      CodeDomProvider:在2.0后提供了CodeDomProvider.CreateProvider(string language)的工厂类,取代以前的  
Microsoft.VisualBasic.VBCodeProvider、 Microsoft.CSharp.CSharpCodeProvider的创建CodeDomProvider的方式,现在我们可以仅用一句CodeDomProvider.CreateProvider("c#")方式就可以创建CSharpCodeProvider。

      有了CodeDomProvider我们就可以利用Provider生成对应语言的源代码:ICodeGenerator :代码生成抽象,可以用provider.CreateGenerator()取得;这个类给我提供了代码生成的方法有:

GenerateCodeFromCompileUnit:从编译单元生成code 
GenerateCodeFromExpression:从表达式生成code 
GenerateCodeFromMember:从类型成员Member生成code 
GenerateCodeFromNamespace:从命名空间生成code 
GenerateCodeFromStatement:从statement语句生成code 
GenerateCodeFromType:从类型Type生成code。

其实在CodeDomProvider也通过了同样的方法,个人习惯于用CodeDomProvider的方法。

他们都有个共同的参数就是生成参数:CodeGeneratorOptions。在CodeGeneratorOptions里提供了code生成时的选项BlankLinesBetweenMembers:获取或设置一个值,该值指示是否在成员之间插入空行。 
BracingStyle:获取或设置用于大括号的样式。此属性的默认值为 Block,该值指示在生成代码时,使大括号从关联的语句或声明所在的行开始。C 属性值指示大括号从关联的语句或声明的后面一行开始。 
ElseOnClosing:获取或设置一个值,该值指示是否在前面每个 if 或 try 块的结束行处追加 else、catch 或 finally 块(包括括号)。 
IndentString:获取或设置用于缩进的字符串。 
Item:获取或设置指定索引处的对象。 
VerbatimOrder:获取或设置一个值,该值指示是否按成员在成员集合中出现的顺序生成成员。

还有就是System.IO.TextWriter的参数,这个参数我们可以通过输出File文件的StreamWrite或者是StringBuilder的StringWrite。故名思意,其输出的方式和位置





 本文转自 破狼 51CTO博客,原文链接:http://blog.51cto.com/whitewolfblog/834680,如需转载请自行联系原作者


相关文章
|
Ubuntu Unix Linux
成功解决ERROR: Unable to find the development tool `cc` in your path; please make sure that you have the
成功解决ERROR: Unable to find the development tool `cc` in your path; please make sure that you have the
成功解决ERROR: Unable to find the development tool `cc` in your path; please make sure that you have the
|
6月前
|
编译器 C语言
mixing declarations and code is a C99 extension
mixing declarations and code is a C99 extension
337 0
checking build system type... ./config.guess: unable to guess system type/you must specify one
checking build system type... ./config.guess: unable to guess system type/you must specify one
172 0
|
Android开发
1--debug时安卓源码不一致问题--Source code does not match the bytecode
AS--debug时:Source code does not match the bytecode 解决方案:保持模拟器与编译版本一致,即: 编译版本与运行版本一致
3643 0
openBMC source code
1、fand 1)main函数 read_sysfs_int("/sys/bus/i2c/drivers/cmmcpld/13-003e/slotid", &sysfs_value) write_fan_speed(fan + fan_offset, fan_speed) write_fan_le...
2641 0
|
Linux C++ 机器学习/深度学习
Generate C interface from C++ source code using Clang libtooling
原文地址 Generate C interface from C++ source code using Clang libtooling Dec 6, 2016 · 24 minute read · Comments clangllvmCC++I develop...
1562 0