C#将字符串编译成程序集并执行

实现将字符串编译为代码并在程序中使用,实际应用可将字符串保存在文件中,程序启动后读取文件中字符转换为代码执行,这样只需要修改文件不改动代码就可以增删或修改程序功能,提高程序的灵活性。

例如,要实现下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
using System;
namespace TestSpace
{
    class Test
    {
        public void outPut(string value)
        {
            Console.WriteLine("RCV:" + value);
            Console.WriteLine(DateTime.Now.ToString());
        }
    }
}

首先添加引用:

1
2
3
4
using System;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.Reflection;

将上面的代码写成字符串:

1
2
3
4
5
6
7
string codeStr = "using System;";
codeStr += "namespace TestSpace{";
codeStr += "class Test{";
codeStr += "public void outPut(string value){";
codeStr += "Console.WriteLine(\"RCV:\"+value);";
codeStr += "Console.WriteLine(DateTime.Now.ToString());";
codeStr += "}}}";

下面是代码实现:

1
2
3
4
5
6
7
8
9
10
11
CSharpCodeProvider cs = new CSharpCodeProvider();
CompilerParameters cp = new CompilerParameters();
cp.GenerateInMemory = true;
cp.GenerateExecutable = false;
cp.ReferencedAssemblies.Add("System.dll");
CompilerResults cr = cs.CompileAssemblyFromSource(cp, codeStr);//返回字符串的编译结果
Assembly ass = cr.CompiledAssembly;//获取编译的程序集
object obj = ass.CreateInstance("TestSpace.Test");//创建程序集中TestSpace命名空间下Test类的实例
MethodInfo mi = obj.GetType().GetMethod("outPut");//使用反射获得该实例的outPut方法
mi.Invoke(obj, new object[] { "12345" });//执行实例的outPut方法,并传入参数
Console.ReadLine();

执行结果:

 

posted @   [春风十里]  阅读(118)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示