当前位置: 首页 > news >正文

C# 动态编译代码并执行

写在前面

本文采用动态编译的方式,对目标文件code.txt中的C#代码进行实时编译并调用;当然也可以直接在代码中直接装配或读取已有的代码文本,动态编译可以用于很多需要热更新的场景,实现无需重启程序也能达到更新代码的需求。

代码实现

        static void Main(string[] args){CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler();CompilerParameters objCompilerParameters = new CompilerParameters();//添加需要引用的dllobjCompilerParameters.ReferencedAssemblies.Add("System.dll");objCompilerParameters.ReferencedAssemblies.Add("System.Data.dll");//是否生成可执行文件objCompilerParameters.GenerateExecutable = false;//是否生成在内存中objCompilerParameters.GenerateInMemory = true;// 读取代码var code = File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "code.txt"));//编译代码CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, code);if (cr.Errors.HasErrors){var msg = string.Join(Environment.NewLine, cr.Errors.Cast<CompilerError>().Select(err => err.ErrorText));Console.WriteLine(msg, "编译错误");}else{Assembly objAssembly = cr.CompiledAssembly;object objHelloWorld = objAssembly.CreateInstance("Test");MethodInfo objMI = objHelloWorld.GetType().GetMethod("Hello");objMI.Invoke(objHelloWorld, null);}Console.WriteLine("Ok");Console.ReadLine();}

目标代码:code.txt

using System;public class Test
{public void Hello(){Console.WriteLine("Hello rjcql");}
}

执行结果

http://www.lryc.cn/news/250270.html

相关文章:

  • nginx配置反向代理及负载均衡
  • 【古月居《ros入门21讲》学习笔记】09_订阅者Subscriber的编程实现
  • Java全栈基础篇--集合
  • Facebook公共主页受限、被封?一文教你排雷解决
  • Day04:每日一题:2661. 找出叠涂元素
  • SpringBoot 整合Redis
  • tensorflow-gpu1.15 + win11 + RTX 4050环境配置
  • jmeter资料
  • 代码随想录算法训练营第三十六天| 435 无重叠区间 763 划分字母区间 56 合并区间
  • 2023-12-01 事业-代号s-引流技巧和营销思路
  • 反转链表的Java实现
  • 2022年1月14日 Go生态洞察:Go 1.18 新教程探索
  • 国内某知名半导体公司:实现虚拟化环境下的文件跨网安全交换
  • 14.Tomcat和HTTP协议-[一篇通]
  • 在线陪诊系统: 医疗科技的崭新前沿
  • MySQL的基础知识
  • 【EI会议征稿】第七届大数据与应用统计国际学术研讨会(ISBDAS 2024)
  • 最轻量级最完整的屏幕适配完全适配各个手机方案
  • IDEA安装python插件并配置
  • 简单的Python烟花代码,跨年了
  • 社区医院儿童疫苗接种管理系统设计与开发
  • Docker下安装Redis
  • 【python笔记】与网络编程相关的知识总结
  • 【libGDX】Mesh立方体贴图(6张图)
  • 数据爬取+数据可视化实战_哪里只得我共你(Dear Jane)_词云展示----网易云
  • spring事务管理快速入门(以转账为例)
  • 如何在VS2022上的MFC项目中操作Excel(VS2010、VS2012、VS2015、VS2017、VS2019使用方法一样)
  • 【Java8系列06】Java8数据计算
  • Andrioid T 实现充电动画(2)
  • 静态方法和属性的经典使用-单例设计模式