• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#的动态编译执行

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在运行时编写代码并编译执行。如下所示。

 

Open按钮打开任意文本文件,并载入到TextBox。载入后可更改。

Compile按钮进行编译和执行。具体代码如下。

 

 

代码
1 using System;
2  using System.Windows.Forms;
3  using System.IO;
4  using System.CodeDom.Compiler;
5  using Microsoft.CSharp;
6  using System.Reflection;
7
8  namespace DynamicCodeCompiler
9 {
10 public partial class Form1 : Form
11 {
12 string dynammicCode;
13
14 public Form1()
15 {
16 InitializeComponent();
17 }
18
19 //打开文件并载入代码
20 private void button1_Click(object sender, EventArgs e)
21 {
22 OpenFileDialog ofd = new OpenFileDialog();
23 ofd.Multiselect = false;
24
25 if (ofd.ShowDialog()==DialogResult.OK)
26 {
27 FileStream fs = new FileStream(ofd.FileName,FileMode.Open);
28 StreamReader sr = new StreamReader(fs);
29 dynammicCode = sr.ReadToEnd();
30 textBox1.Text = dynammicCode;
31 }
32 }
33
34 private void button2_Click(object sender, EventArgs e)
35 {
36 if (textBox1.Text != null)
37 {
38 // 1.CSharpCodePrivoder
39 CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();
40
41 // 2.ICodeComplier
42 ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler();
43
44 // 3.CompilerParameters
45 CompilerParameters objCompilerParameters = new CompilerParameters();
46
47 //此处添加引用,使用的代码必须在此处有引用否则会编译错误
48 objCompilerParameters.ReferencedAssemblies.Add("System.dll");
49 objCompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
50 objCompilerParameters.GenerateExecutable = false;
51 objCompilerParameters.GenerateInMemory = true;
52
53 // 4.CompilerResults
54 CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, textBox1.Text);
55
56 if (cr.Errors.HasErrors)
57 {
58 Console.WriteLine("编译错误:");
59 foreach (CompilerError err in cr.Errors)
60 {
61 Console.WriteLine(err.ErrorText);
62 }
63 }
64 else
65 {
66 // 通过反射,调用HelloWorld的实例。此处命名空间和类硬编码为Test.Program。
67 Assembly objAssembly = cr.CompiledAssembly;
68 object objDynamicAssenmbly = objAssembly.CreateInstance("Test.Program");
69 MethodInfo objMI = objDynamicAssenmbly.GetType().GetMethod("Main");
70
71 //Console.WriteLine(objMI.Invoke(objDynamicAssenmbly, null));
72 objMI.Invoke(objDynamicAssenmbly, null);
73 }
74
75 }
76 }
77 }
78 }
79

 

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
c关键字控制语句运算符小结发布时间:2022-07-13
下一篇:
C#轻量级日志监控器EasyLogMonitor发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap