知识大全 动态执行C#代码
Posted 知
篇首语:愿你成为自己喜欢的模样,不抱怨,不将就,有自由,有光芒。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 动态执行C#代码相关的知识,希望对你有一定的参考价值。
动态执行C#代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
写这篇笔记的理由是因为上篇g提高的工具LINQPad 见 想用LINQ思考吗?扔掉SQL查询分析器 Come on LINQPad! 该工具的实现就有执行动态代码的应用
应用场景 还没想出来会用到哪里 动态的代码由谁来写?普通用户我想有一定的困难 特别是有了像 IronPython 这样更容易使用的动态嵌入脚本
) 像 LINQPad 这样的辅助开发工具 ) 实现脚本引擎? ) 探讨
主要使用命名空间 Microsoft CSharp 编译C#代码 然后使用 CodeDom 和 反射调用 我这里写了一个测试工具 看代码
using System; using System Collections Generic; using System ComponentModel; using System Drawing; using System Windows Forms; using System CodeDom Compiler; using Microsoft CSharp; // 用于编译C#代码 using System Reflection; // 用于反射调用 namespace CodeDomLearn public partial class Form : Form public Form () InitializeComponent(); private void button _Click(object sender EventArgs e) CodeCompiler Compile(new string[] textBox Text ); listBox Items Clear(); foreach (string s in CodeCompiler ErrorMessage) listBox Items Add(s); listBox Items Add(CodeCompiler Message); static class CodeCompiler static public string Message; static public List<string> ErrorMessage = new List<string>(); public static bool Compile(string[] references string source string outputfile) // 编译参数 CompilerParameters param = new CompilerParameters(references outputfile true); param TreatWarningsAsErrors = false; param GenerateExecutable = false; param IncludeDebugInformation = true; // 编译 CSharpCodeProvider provider = new CSharpCodeProvider(); CompilerResults result = provider CompileAssemblyFromSource(param new string[] source ); Message = ; ErrorMessage Clear(); if (!result Errors HasErrors) // 反射调用 Type t = result CompiledAssembly GetType( MyClass ); if (t != null) object o = result CompiledAssembly CreateInstance( MyClass ); Message = (string)t InvokeMember( GetResult BindingFlags Instance | BindingFlags InvokeMethod | BindingFlags Public null o null); return true; foreach (CompilerError error in result Errors) // 列出编译错误 if (error IsWarning) continue; ErrorMessage Add( Error( + error ErrorNumber + ) + error ErrorText + \\t\\tLine: + error Line ToString() + Column: +error Column ToString()); return false;
作为演示 例子简单的规定类名必须是MyClass 必须有一个方法返回 string 类型的 GetResult 方法 这是执行效果图
cha138/Article/program/net/201311/12884相关参考
详解.NET中的动态编译 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 代码的动态编译并执行是一
详解.NET中的动态编译技术 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 代码的动态编译并执行
JScript运行时错误JScript运行时错误是指当JScript脚本试图执行一个系统不能运行的动作时导致的错误当正在运行脚本计算变量表达式或者正在动态分配内存时出现JScript运行时错误时错误号
C#动态绑定treeview控件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishixinzh
C#编程实现动态生成Word文档 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如何用C#编程实
C#动态特性的更多消息 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! MadsTersen给大家
c#动态调用WebService 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs
C#下实现动态系统托盘图标 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一概述 我这里所指的
根据现有C#代码文件生成扩展代码文件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 为什么在这里
C#代码文件生成扩展代码文件的想法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 看到这标题的朋