C#动态编译代码

C#动态编译 C#动态编译 现在写的项目涉及了在.net standard下的动态编译,这篇文章就是来记录一下实现动态编译的过程。 CodeDom 一开始我使用的是System.CodeDom,在运行时会报错提示平台不支持的错误,在查询后发现.Net Standard不支持System.CodeDom,需要在上面一层建立和Roslyn依赖关系。Roslyn是一种.net 编译器。这一层也有人提供,叫Microsoft.CodeDom.Providers.DotNetCompilerPlatform。但我这次的实现并没有用 阅读详情

转自:http://blog.youkuaiyun.com/begtostudy/article/details/3853956


 在开始之前,先熟悉几个类及部分属性、方法:CSharpCodeProvider、ICodeCompiler、CompilerParameters、CompilerResults、Assembly。

  一、CSharpCodeProvider
    提供对C#代码生成器和代码编译器的实例的访问。如果要动态生成VB代码,可以使用VBCodeProvider。

    CreateCompiler():获取编译器的实例。

  二、ICodeCompiler
    定义用于调用源代码编译的接口或使用指定编译器的CodeDOM树。每种编译方法都接受指示编译器的CompilerParameters对象,并返回指示编译结果的CompilerResults对象。

    CompilerAssemblyFromSource(CompilerParameters option, string source):使用指定的编译器,从包含源代码的字符串设置编译程序集。

  三、CompilerParameters
    
表示用于调用编译器的参数。

    ReferencedAssemblies:获取当前项目所引用的程序集。Add方法为程序集添加引用。
    GenerateExecutable:获取或设置一个值,该值指示是否生成可执行文件。若此属性为false,则生成DLL,默认是false。
    GenerateInMemory:获取或设置一个值,该值指示是否在内存中生成输出。

  四、CompilerResults
    表示从编译器返回的编译结果。

    CompiledAssembly:获取或设置以编译的程序集,Assembly类型。

  五、Assembly
    就是程序集了(不知道如何描述了)。

  大致了解了以上知识之后,就可以使用C#动态的编译并执行代码了,一下是一段示例程序:

 

[c-sharp]  view plain copy
  1. using System;   
  2. using System.Reflection;   
  3. using System.Globalization;   
  4. using Microsoft.CSharp;  
  5. using System.CodeDom;   
  6. using System.CodeDom.Compiler;  
  7. using System.Text;   
  8.   
  9. namespace ConsoleApplication1   
  10. {  
  11.     public class Program  
  12.     {  
  13.         static void Main(string[] args)  
  14.         {  
  15.             // 1.CSharpCodePrivoder  
  16.             CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();  
  17.   
  18.             // 2.ICodeComplier  
  19.             ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler();  
  20.   
  21.             // 3.CompilerParameters  
  22.             CompilerParameters objCompilerParameters = new CompilerParameters();  
  23.             objCompilerParameters.ReferencedAssemblies.Add("System.dll");  
  24.             objCompilerParameters.GenerateExecutable = false;  
  25.             objCompilerParameters.GenerateInMemory = true;  
  26.   
  27.             // 4.CompilerResults  
  28.             CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, GenerateCode());  
  29.   
  30.             if (cr.Errors.HasErrors)  
  31.             {  
  32.                 Console.WriteLine("编译错误:");  
  33.                 foreach (CompilerError err in cr.Errors)  
  34.                 {  
  35.                     Console.WriteLine(err.ErrorText);  
  36.                 }  
  37.             }  
  38.             else  
  39.             {  
  40.                 // 通过反射,调用HelloWorld的实例  
  41.                 Assembly objAssembly = cr.CompiledAssembly;  
  42.                 object objHelloWorld = objAssembly.CreateInstance("DynamicCodeGenerate.HelloWorld");  
  43.                 MethodInfo objMI = objHelloWorld.GetType().GetMethod("OutPut");  
  44.   
  45.                 Console.WriteLine(objMI.Invoke(objHelloWorld, null));  
  46.             }  
  47.   
  48.             Console.ReadLine();  
  49.         }  
  50.   
  51.         static string GenerateCode()  
  52.         {  
  53.             StringBuilder sb = new StringBuilder();  
  54.             sb.Append("using System;");  
  55.             sb.Append(Environment.NewLine);  
  56.             sb.Append("namespace DynamicCodeGenerate");  
  57.             sb.Append(Environment.NewLine);  
  58.             sb.Append("{");  
  59.             sb.Append(Environment.NewLine);  
  60.             sb.Append("    public class HelloWorld");  
  61.             sb.Append(Environment.NewLine);  
  62.             sb.Append("    {");  
  63.             sb.Append(Environment.NewLine);  
  64.             sb.Append("        public string OutPut()");  
  65.             sb.Append(Environment.NewLine);  
  66.             sb.Append("        {");  
  67.             sb.Append(Environment.NewLine);  
  68.             sb.Append("             return /"Hello world!/";");  
  69.             sb.Append(Environment.NewLine);  
  70.             sb.Append("        }");  
  71.             sb.Append(Environment.NewLine);  
  72.             sb.Append("    }");  
  73.             sb.Append(Environment.NewLine);  
  74.             sb.Append("}");  
  75.   
  76.             string code = sb.ToString();  
  77.             Console.WriteLine(code);  
  78.             Console.WriteLine();  
  79.   
  80.             return code;  
  81.         }  
  82.     }  
  83. }  

 

原帖:http://www.cnblogs.com/jailu/archive/2007/07/22/827058.aspx


C# 动态编译的简介与实例代码 首先,我们定义了要执行的代码字符串,其中包含一个名为Calculator的类,其中有一个Add方法用于执行加法运算。否则,我们获取编译后的程序集,并使用反射创建Calculator类的实例,并调用Add方法执行加法运算。在C#中,我们可以使用System.Reflection命名空间中的类型和方法来实现动态编译。通过动态编译,我们可以在运行时生成和执行代码,从而实现一些动态性和灵活性要求较高的功能。例如,我们可以根据用户的输入动态生成代码,或者在某些场景下动态生成、加载和执行插件。 阅读详情

相关推荐

C#中动态代码编译与执行的实现

本文还有配套的精品资源,点击获取 简介:本文介绍了一种在C# WinForms应用程序中动态编译和执行C#代码的能力。动态代码编译是在运行时根据输入或条件改变程序行为的关键技术,尤其适用于需要支持动态二次开发的场景。通过示例程序,本文阐述了使用 ***piler 命名空间中的类进行动态代码编译和执行的方法,以及如何构建用户界面以接收和运行用户代码。 ...

weixin_31486261的博客 3311

C#简单的动态程序编译过程

C#简单的动态程序编译过程

qq_27474555的博客 974

好书分享:Control and Estimation with MATLAB(5th Edition)pdf

基于MATLAB的控制与估计》(第5版)由八章组成,包括控制算法和设计。主要内容包括状态估计和数据平滑、RLS和卡尔曼滤波器状态估计、控制系统设计、自适应控制和PID。书中的概念已经使用MATLAB和Simulink实现。提供了可下载的MATLAB和Simulink文件。适合人群:大学生、研究生、控制类工程研究人员。需要电子版pdf,回复索取。

jixianhu的博客 1510

如何用C#动态编译、执行代码

  在开始之前,先熟悉几个类及部分属性、方法:CSharpCodeProvider、ICodeCompiler、CompilerParameters、CompilerResults、Assembly。  一、CSharpCodeProvider    提供对C#代码生成器和代码编译器的实例的访问。如果要动态生成VB代码,可以使用VBCodeProvider。    CreateCompiler()...

weixin_34358092的博客 378

告别手动标注!用ENVI Classic高效搞定高光谱图像语义分割标签(以农业/地物分类为例)

本文详细介绍了如何利用ENVI Classic实现高光谱图像的半自动化智能标注,特别针对农业和地物分类场景。通过光谱特征分析、智能标注技巧和MAT文件转换,显著提升标注效率和质量,助力AI模型训练。

weixin_28694169的博客 251

Arxml文件可视化:当汽车软件架构遇见交互式设计工具

本文探讨了Arxml文件在汽车电子系统开发中的可视化技术,结合AUTOSAR架构标准,介绍了如何利用现代Web技术构建交互式设计工具。通过三维组件关系图、动态数据流展示和版本对比等功能,显著提升开发效率和架构评审质量,适用于MBD和ASPICE开发流程。

weixin_29050271的博客 427

C# 动态编译代码实现

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.CodeDom.Compiler; using Microsoft.CSharp; using System.Web; using System.Reflection; namespac

Tim专栏 7263

学Simulink——基于大数据处理与云计算的场景实例:无人机与云计算中心之间的高效数据传输链路设计

本文以无人机与云计算中心的高效数据传输链路设计为例,手把手指导使用Simulink进行系统级建模。针对智慧城市、灾害监测等场景中无人机采集的海量数据(视频、图像、点云等),构建包含数据源、传输协议、无线链路、云接入和性能分析的五层架构模型。通过智能数据压缩、多链路聚合和QoS优先级调度等关键技术,实现5G+Wi-Fi等多通信技术的自适应切换。仿真结果表明,5G+Wi-Fi链路聚合在城市环境中表现最优,而4G+卫星组合适合偏远地区。该模型为无人机实时数据传输提供了有效的设计方法和优化方向,可拓展至边缘计算、A

xiaoheshang_123的博客 120

C# 如何动态编译、执行代码

参考链接:https://www.cnblogs.com/zhangchenliang/p/7021490.html using Microsoft.CSharp; using System; using System.CodeDom.Compiler; using System.Collections.Generic; using System.Linq; using System.Reflec...

weixin_42934887的博客 573

第四节:Vben Admin登录对接后端getUserInfo接口

上一节,我们完成了/api/auth/login接口的创建,通过login接口,我们完成了登录和Token的生成。但是登陆还是报404返回,发现是Vben Admin又请求了一个/api/getUserInfo接口,本节我们就来分析完成这个接口本节,我们完成了getUserInfo接口,完成了登录操作,成功的进入到工作台页面。

cuiwin的专栏 2845

Python 爬虫实战:爬取国家统计局公开数据

国家统计局作为权威的宏观经济数据发布机构,汇聚了人口、GDP、就业、产业经济等多维度的核心统计数据,是开展经济研究、政策分析、行业洞察的重要数据支撑。相较于商业数据平台,国家统计局的公开数据具备权威性、全面性和时效性等特点,但部分数据分散在不同栏目且缺乏结构化下载渠道。本文基于 Python 爬虫技术,系统讲解国家统计局公开数据的爬取方法,重点解决静态表格解析、分页数据抓取、数据结构化转换等问题,同时严格遵循政府网站数据使用规范,为科研、教学等场景提供合规的数据获取方案。本文以国家统计局官网(

2503_91057718的博客 1818

C# 动态编译代码

/* // 使用 C# 动态编译代码和执行 static void Main(string[] args) { // 编译器 CodeDomProvider cdp = CodeDomProvider.CreateProvider("C#"); // 编译器的参数 CompilerParameters cp = new CompilerParameters(); cp.Refer

难求 专栏 1253

Python爬虫实战:利用最新技术爬取抖音话题挑战视频

本文将详细介绍如何使用Python最新技术栈构建一个高效的抖音话题挑战视频爬虫。我们将从环境配置开始,逐步讲解请求模拟、数据解析、反反爬策略、数据存储等关键环节,并提供完整的代码实现。本文适合有一定Python基础的开发者学习高级网络爬虫技术。关键词:Python爬虫、抖音API、话题挑战、视频爬取、反反爬本文详细介绍了如何使用Python最新技术栈构建抖音话题挑战视频爬虫。我们从基础请求开始,逐步实现了数据解析、反反爬策略、数据存储等核心功能,并探讨了分布式和增量爬取等高级主题。更智能的反反爬策略。

2201_76125261的博客 1744

C#动态编译、执行代码(转)

在开始之前,先熟悉几个类及部分属性、方法:CSharpCodeProvider、ICodeCompiler、CompilerParameters、CompilerResults、Assembly。  一、CSharpCodeProvider    提供对C#代码生成器和代码编译器的实例的访问。如果要动态生成VB代码,可以使用VBCodeProvider。    CreateCompiler

5964

【AutoCAD中实现双击文本编辑功能】

例如:以下是官方博客例子浅析先加入相关的头文件和库文件。在AutoCAD中有一个很重要的功能,就是双击图形尺寸或文本后会出现一个文本编辑框,用户可在该编辑框中修改文字。本文介绍了如何使用AcEdInplaceTextEditor来实现该功能。实现cad的消息监听。创建一个消息监听的类并在cad中注册来实现消息监听。主要是监听键盘输入。提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了的函数和方法。

我的博客 1148

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C#实现在程序中动态编译一段C#代码并执行

C# 可以通过或 CSharpCodeProvider实现动态编译并执行 C# 代码。以下是两种方法的详细介绍和示例代码。

yuanpan的专栏 1736

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

如何用C#动态编译、执行代码 CSharpCodeProvider

在开始之前,先熟悉几个类及部分属性、方法:CSharpCodeProvider、ICodeCompiler、CompilerParameters、CompilerResults、Assembly。  一、CSharpCodeProvider    提供对C#代码生成器和代码编译器的实例的访问。如果要动态生成VB代码,可以使用VBCodeProvider。    CreateCompiler()...

wyf 3389

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C#动态编译、执行代码

C#动态编译、执行代码 Compiling and Running code at runtime<!--google_ad_client = "pub-3555979289815451";/* 468x15, 创建于 08-12-5 */google_ad_slot = "4663571998";google_ad_width = 468;google_ad_height =

Mobidogs Blog 1618

C# 动态编译代码并执行

本文采用动态编译的方式,对目标文件code.txt中的C#代码进行实时编译并调用

rjcql的专栏 1055

C#动态编译代码并执行

C#动态编译代码并执行

Python的专栏 1950

动态编译执行c#代码

 动态编译执行c#代码Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider();            System.CodeDom.Compiler.ICodeCompiler comp = provider.CreateCompiler();       

alice_art的专栏 918
上一篇: Wireshark基本介绍和学习TCP三次握手
下一篇: 也谈一下TCP segment of a reassembled PDU
「已注销」
博客等级 码龄14年 116粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值