首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> .NET Framework >> 正文

odeDom使用心得

    8.CodeConstructor类

    用来表示一个类的构造函数,BaseConstructorArgs是用来表示基类的构造函数的参数集合,通过Add方法添加,如果基类的构造函数没有参数可以添加一个CodeVariableReferenceExpression对象,不用任何便两名初始化他,如:

    wfPropertyConstructor1.BaseConstructorArgs.Add(new CodeVariableReferenceExpression());9.CodeTypeOfExpression类

    用来表示typeof表达式

    10.CodeThisReferenceExpression类

    用来表示this的表达式

    11.CodeBaseReferenceExpression类

    用来表示base的表达式

    CodeThisReferenceExpression和CodeBaseReferenceExpression可以和其他表达式组合在一起形成一个表达式如:

    CodeMethodInvokeExpression InitByEntityIDInvoke = new CodeMethodInvokeExpression(new CodeBaseReferenceExpression(), "ConstructByID", new CodeVariableReferenceExpression(m_Model.EntitiesTable + "ID"), new CodeVariableReferenceExpression("objTrans"));上面这段代码就是初始化一个方法调用的表达式,使用CodeBaseReferenceExpression和ConstructByID方法,加上两个局部变量的作为一个调用方法的参数组合成一个函数调用的表达式

    12.CodeSnippetStatement类

    表明一条语句,由于CodeDom为了兼容VB的语法,有些语法不支持,没有类可以调用,实在没有办法了可以通过CodeSnippetStatement来写一条语句,但这个语句不能保证在VB.Net里被通过

    CodeSnippetStatement ExceptionStatement = new CodeSnippetStatement("throw new Exception("Property not Implementation")");上面这条抛出异常的语句是直接写的代码,当然CodeDom存在异常语句的对象,我这里偷了一下懒

    13.IndentedTextWriter类

    表明生成出来代码语句的缩进

    IndentedTextWriter tw = new IndentedTextWriter(new StreamWriter(sourceCodePaht + "\" + m_Model.EntitiesAssembly + ".cs", false), "   ");

    false后面的双引号之间的四个空格表明代码的缩进值为四个空格

    那么我们剩下的就是生成代码了

    IndentedTextWriter tw = new IndentedTextWriter(new StreamWriter(sourceCodePaht + "\" + m_Model.EntitiesAssembly + ".cs", false), "   ");CodeDomProvider provide = new CSharpCodeProvider();

    provide.GenerateCodeFromCompileUnit(unit, tw, new CodeGeneratorOptions());tw.Close();provider提供几种生成,GenerateCodeFromCompileUnit可以生成的直接生成一个代码容器里的所有代码,如果我们只写了一个类,可以通过GenerateCodeFromType方法生成,也可以生成一个命名空间里的代码,甚至可以只生成一条语句或一个表达式GenerateCodeFromNamespace、GenerateCodeFromStatement

    剩下的就是要编译源代码了

    CompilerParameters compilerParams = new CompilerParameters();//指定编译选项,是类库compilerParams.CompilerOptions = "/target:library /optimize";//不生成执行文件compilerParams.GenerateExecutable = false;//在内存中生成输出compilerParams.GenerateInMemory = true;//不包含调试信息compilerParams.IncludeDebugInformation = false;//添加编译时使用的dll,如果不是系统自带的dll,必须指定完整的路径compilerParams.ReferencedAssemblies.Add("mscorlib.dll");compilerParams.ReferencedAssemblies.Add("System.dll");compilerParams.ReferencedAssemblies.Add("System.Data.dll");compilerParams.ReferencedAssemblies.Add(AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "DawnPro.WebArchitechture.DAL.dll");compilerParams.ReferencedAssemblies.Add(AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "DawnPro.WorkflowInterface.dll");//指定编译后的文件的输出路径compilerParams.OutputAssembly = outputAsseblyPath + "\bin\" + m_Model.EntitiesAssembly + ".dll";最后使用Provider提供的CompileAssemblyFromDom方法

上一页  [1] [2] [3] [4] 

【责编:Ken】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·WEB程序开发--ASP.NET和PHP、JSP究竟学哪个?
 ·五步带你入门XML
 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航