使用 C# 动态编译代码和执行的代码

 更新时间:2011年05月14日 16:13:35   作者:  
一个控制台例子, 演示了如何用 C# 动态的生成代码, 编译代码, 最后执行
复制代码 代码如下:

/*
* 使用 C# 动态编译代码和执行
* 作者: yaob
*/

static void Main(string[] args)
{
// 编译器
CodeDomProvider cdp = CodeDomProvider.CreateProvider("C#");

// 编译器的参数
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("System.dll");
cp.GenerateExecutable = false;
cp.GenerateInMemory = true;

// 编译结果
CompilerResults cr = cdp.CompileAssemblyFromSource(cp, HelloWorld());

if (cr.Errors.HasErrors) Console.WriteLine("编译出错!");
else
{
// 编译后的程序集
Assembly ass = cr.CompiledAssembly;

// 得到HelloWorld类中的SayHello方法
Type type = ass.GetType("HelloWorld.HelloWorld");
MethodInfo mi = type.GetMethod("SayHello");

// 执行
mi.Invoke(null, null);
}
}

// 动态构建的代码
static string HelloWorld()
{
StringBuilder sbCode = new StringBuilder();
sbCode.AppendLine("using System;");
sbCode.AppendLine("namespace HelloWorld");
sbCode.AppendLine("{");
sbCode.AppendLine(" class HelloWorld");
sbCode.AppendLine(" {");
sbCode.AppendLine(" public static void SayHello()");
sbCode.AppendLine(" {");
sbCode.AppendLine(" Console.WriteLine(\"Hello~ World~!\");");
sbCode.AppendLine(" }");
sbCode.AppendLine(" }");
sbCode.AppendLine("}");
return sbCode.ToString();
}

相关文章

  • 基于多态之虚方法、抽象类、接口详解

    基于多态之虚方法、抽象类、接口详解

    下面小编就为大家分享一篇基于多态之虚方法、抽象类、接口详解,具有很好的参考价值。希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11
  • C#中事件只能在内部调用的原因分析

    C#中事件只能在内部调用的原因分析

    事件(Event) 基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些提示信息,如系统生成的通知。应用程序需要在事件发生时响应事件,这篇文章主要介绍了C#中事件为什么只能在内部调用,需要的朋友可以参考下
    2021-11-11
  • C# 列表List的常用属性和方法介绍

    C# 列表List的常用属性和方法介绍

    这篇文章主要介绍了C# 列表List的常用属性和方法介绍,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • c# 引用类型与值类型的区别详解

    c# 引用类型与值类型的区别详解

    本篇文章是对c#中引用类型与值类型的区别进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • WinForm开发中屏蔽WebBrowser脚本错误提示的方法

    WinForm开发中屏蔽WebBrowser脚本错误提示的方法

    这篇文章主要介绍了WinForm开发中屏蔽WebBrowser脚本错误提示的方法,在C#项目开发中比较实用,需要的朋友可以参考下
    2014-08-08
  • C#使用正则表达式抓取网站信息示例

    C#使用正则表达式抓取网站信息示例

    这篇文章主要介绍了C#使用正则表达式抓取网站信息,结合实例形式分析了C#针对网页信息的正则抓取操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2017-01-01
  • C# Xamarin利用ZXing.Net.Mobile进行扫码的方法

    C# Xamarin利用ZXing.Net.Mobile进行扫码的方法

    这篇文章主要介绍了C# Xamarin利用ZXing.Net.Mobile进行扫码的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • C# datagrid非常规方法实现添加合并列

    C# datagrid非常规方法实现添加合并列

    这篇文章主要介绍了C# datagrid非常规方法实现添加合并列,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • C#基础语法:可空类型详解

    C#基础语法:可空类型详解

    这篇文章主要介绍了C#基础语法:可空类型详解,本文分析了可空类型的源码、研究了可空类型强制转换为常规类型、可空类型的运算等内容,需要的朋友可以参考下
    2015-06-06
  • C#中加盐(salting)的实现示例

    C#中加盐(salting)的实现示例

    在密码存储和验证中,加盐是一种增加密码安全性的技术,本文主要介绍了C#中加盐(salting)的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01

最新评论