c#动态构建代码树
来源:互联网 发布:iphone照片 mac导入 少 编辑:程序博客网 时间:2024/05/16 05:26
using System;using System.IO;using System.Text;using System.CodeDom;using System.CodeDom.Compiler;using System.Diagnostics;partial class HelloWorldCodeDOM{ static void Main() { CodeNamespace prgNamespace = BuildProgram(); var compilerOptions = new CodeGeneratorOptions() { IndentString = " ", BracingStyle = "C", BlankLinesBetweenMembers = false }; var codeText = new StringBuilder(); using (var codeWriter = new StringWriter(codeText)) { CodeDomProvider.CreateProvider("c#") .GenerateCodeFromNamespace( prgNamespace, codeWriter, compilerOptions); } var script = codeText.ToString(); Console.WriteLine(script); if (Debugger.IsAttached) Console.ReadLine(); }}partial class HelloWorldCodeDOM{ static CodeNamespace BuildProgram() { var ns = new CodeNamespace("MetaWorld"); var systemImport = new CodeNamespaceImport("System"); ns.Imports.Add(systemImport); var programClass = new CodeTypeDeclaration("Program"); ns.Types.Add(programClass); var methodMain = new CodeMemberMethod { Attributes = MemberAttributes.Static, Name = "Main" }; methodMain.Statements.Add( new CodeMethodInvokeExpression( new CodeSnippetExpression("Console"), "WriteLine", new CodePrimitiveExpression("Hello, world!") ) ); programClass.Members.Add(methodMain); return ns; }}
partial class HelloWorldCodeDOM{ //由内而外,与置顶向下设计相反(当然,下面代码可以反过来) static CodeNamespace BuildProgram() { var methodMain = new CodeMemberMethod //定义成员方法 { Attributes = MemberAttributes.Static, //成员方法特性 Name = "Main" //方法名 }; methodMain.Statements.Add( //添加成员方法的代码表达式 //构建代码表达式 new CodeMethodInvokeExpression( new CodeSnippetExpression("Console"), "WriteLine", new CodePrimitiveExpression("Hello, world!") ) ); var programClass = new CodeTypeDeclaration("Program"); //类对象 programClass.Members.Add(methodMain); var ns = new CodeNamespace("MetaWorld"); //命名空间 ns.Imports.Add(new CodeNamespaceImport("System")); //添加引用 ns.Types.Add(programClass); //添加类 //ns.Types.Add(new CodeTypeDeclaration("TestClass")); //添加类 return ns; }}
0 0
- c#动态构建代码树
- 代码收藏:动态构建表格
- C#动态执行代码
- C#动态执行代码
- C#动态编译代码
- C# 动态代码执行
- C# 动态代码执行
- c#动态编译代码
- C# 动态编译代码
- C# 动态编译代码
- C#动态编译代码
- C#动态执行代码
- 动态编译C#代码
- C#动态构建lambda表达式(一)
- 读 构建高质量的C#代码
- 动态编译执行c#代码
- 动态编译执行C#代码
- 动态编译执行C#代码
- 函数的指针
- C# WebBrowser控件禁用超链接转向、脚本错误提示、默认右键菜单和快捷键
- java 深入分析ClassLoader工作机制
- Cisco笔试——2014年
- 将Spring源码导入Spring Tool Suite/Eclipse
- c#动态构建代码树
- Ubuntu-Python2.7安装 scipy,numpy,matplotlib
- 第十周上机项目五
- 搭建mysql主从集群的步骤
- (二)图像坐标:我想和世界坐标谈谈(B) 【计算机视觉学习笔记--双目视觉的几何框架系列】
- Codeforces Round #112 (Div. 2)---A. Supercentral Point
- 第十周 oj平台 大奖赛计分
- 惨烈遭遇一个极品公司
- [Leetcode]Valid Parentheses