C#动态编译代码并执行

如何用C#动态编译、执行代码 如何用C#动态编译、执行代码 在开始之前,先熟悉几个类及部分属性、方法: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类型。 大致了解以上知识之后,就可以使用C#动态的编译并执行代码了,以下是一段示例程序: 立即下载

C#动态编译代码并执行

        private void Btn_Compile_Click(object sender, EventArgs e)
        {
            if (T_ClassName_Compile.Text.Length == 0 || T_Code.Text.Length == 0 || T_Function_Compile.Text.Length == 0)
            {
                MessageBox.Show("Pls enter function name and the C# code.");
                return;
            }

            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, T_Code.Text);

            if (cr.Errors.HasErrors)
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("Compile code error.");
                foreach (CompilerError error in cr.Errors)
                    sb.AppendLine(error.ErrorText);

                MessageBox.Show(sb.ToString());
                return;
            }

            Assembly ass = cr.CompiledAssembly;
            Type type = ass.GetType(T_ClassName_Compile.Text);
            MethodInfo mi = type.GetMethod(T_Function_Compile.Text);

            object[] objParams = null;
            if (T_Param_Compile.Text.Length != 0)
            {
                objParams = new object[1];
                objParams[0] = T_Param_Compile.Text;
            }

            T_Result_Compile.Text = (string)mi.Invoke(null, objParams);
        }


其中

  • T_ClassName_Compile.Text为代码中类的名字,如Compile.Compile
  • T_Function_Compile.Text为函数名称,如CompileFunc
  • T_Param_Compile.Text为参数
  • T_Code.Text为代码,例子中的代码如下:

    using System;
    namespace Compile
    {
    class Compile
    {
    public static string CompileFunc(string sMsg)
    {
        return "Compile function:" + sMsg;
    }
    }
    }


C#动态执行与编译 C#动态执行与编译,实现了动态编译并执行指定类(代码)的函数的方法。 立即下载

相关推荐

c#动态读取代码并动态编译

动态加载代码并编译,免去了vs编译-->再启动这一环节。

动态代码执行

所谓动态代码执行,和脚本引擎有点类似。就是程序执行期从字符串或者文本文件中读取一段 C# 代码,在内存中动态编译成程序集,并创建相关类型实例执行相关方法。具体的实现可参考下面的代码。如需要生成程序集文件,可参考《使用CodeDom生成程序集》。 using System;using System.Reflection;using System.Globalization;using Micros...

weixin_30709061的博客 390

C# 自带编译器实现程序运行过程中动态编译并运行字符串中的C#代码

C# 自带编译器实现程序运行过程中动态编译并运行字符串中的C#代码

C#动态执行脚本的3种方式

在C#中,可以使用一些第三方库或内置类库实现动态执行脚本的功能。

carcarrot的博客 2501

C#代码动态编译、动态执行、动态调试

前几天看到一篇关于.net动态编译的文章 .NET中的动态编译 ,很受启发。在此基础上我做了一些封装,为使调用更加简单,并增加了对动态代码调试的支持,相同代码只编译一次的支持,代码改动自动重新编译,代码引用文件的自动加载和手工加载等功能。 http://blog.youkuaiyun.com/eaglet/archive/2008/10/17/3091385.aspx http://www.cnblogs.com/eaglet/archive/2008/10/17/1313384.html

外贸英文函电第三版张梅英课后习题答案解析

我参加了一些外贸模拟竞赛,将所学知识运用到实际工作中,取得了不错的成绩。此外,我还积极参与了一些外贸实践活动,如参加实习、担任志愿者等,从中积累更多的经验。在这个过程中,我逐渐摸索出了一套适合自己的学习方法,不仅提高了学习效果,还增强了自信心。通过学习这本书,我们可以提高自己在外贸领域的沟通能力,更好地应对未来的工作挑战。在学习这本书的过程中,我遇到了一些困难,比如对某些专业术语的理解不够透彻,对信件的结构和格式掌握不够熟练。出版社: 高等教育出版社。上传者: ʚ河西撒手没ɞ。

weixin_58833001的博客 1424

使用CompilerResults 方法动态的编译类

-------------------今天愚人节,祝ITer 愚人节快乐---------------------- 好吧,我out了,我是第一次使用这个类。觉得比较新奇,所以就整出来,大家共享贡献。 需要实现这个demo,你需要导入以下三个命名空间: using System.Reflection;using System.CodeDom.Compiler;using Microsof...

weixin_33901641的博客 543

保姆级教程:用Ansible 2.9自动化配置华为ENSP路由器(附Cloud连接避坑指南)

本文提供了一份详细的Ansible 2.9与华为ENSP路由器自动化配置教程,涵盖环境搭建、网络连通性配置、Playbook开发及典型问题排查。特别针对Cloud连接常见问题提供避坑指南,帮助运维工程师快速掌握网络自动化技能,提升工作效率。

weixin_42561476的博客 375

CompilerResults,CompilerErrorCollection,

namespace System.CodeDom.Compiler { // // 摘要: // 表示从编译器返回的编译结果。 public class CompilerResults { // // 摘要: // 初始化使用指定临时文件的 System.CodeDo...

weixin_30625691的博客 427

QT+SOEM主站协议库实战指南—从编译到嵌入式应用

本文提供了一份QT与SOEM开源EtherCAT主站协议库的集成实战指南。详细介绍了在Windows和Linux平台下编译SOEM库的步骤,并讲解了如何将其无缝集成到QT项目中,构建具备实时监控与控制功能的工业上位机应用。内容涵盖从环境搭建、核心协议开发到嵌入式部署与优化的全流程,为开发高性价比、自主可控的工业控制解决方案提供完整路径。

u6v7w8x的博客 437

vivado 编译ADI AD9361 TCL脚本生成hdl工程

(4)输入"source ../../scripts/adi_make.tcl"命令(仅双引号内部命令,不包含双引号),个人理解:该命令用来加载当前所需要编译工程所需要各功能模块的信息,因为每个工程需要不同的功能模块,比如有的需要gpio模块,有的不需要gpio模块,这些模块上前面路径的library也同样以TCL脚本形式存在,当有需要时才进行编译,怎么知道当前工程需要什么模块呢就是通过"source ../../scripts/adi_make.tcl"(仅双引号内部命令,不包含双引号)命令实现。

weixin_40586423的博客 807

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

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

yuanpan的专栏 1736

Anaconda离线创建python环境

既然是离线创建python环境,就需要有一个已经创建好的python环境。所以我们有两台win10的机器,分别是A和B。两台机器都安装了anaconda。其中A可以连网,因此我们在A上创建好一个python2.7的环境py27,然后将py27移植(安装)到B上。B连不连网都无所谓。 一、机器上A上创建python2.7的环境py27 有两种方法: 方法1:使用Anaconda的图形界面。首先,点击Environments->Create,然后输入要创建的环境名称"py27",然后选择2.7,如图

FY_2018的博客 6786

C#动态编译并执行代码

先来张运行时截图: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.F...

weixin_34197488的博客 903

Photoscan+Smart3D+CC组合建模实战:如何用三款工具打造高精度实景模型

本文详细介绍了如何整合Photoscan、Smart3D和ContextCapture三款软件,构建高效高精度的实景三维建模工作流。通过利用Photoscan稳健的空三解算、Smart3D精准的刺点优化,以及ContextCapture强大的最终建模能力,该方案能有效应对复杂地形与海量数据,显著提升模型质量与生产效率,适用于测绘、文化遗产数字化等专业领域。

weixin_29230649的博客 103

milvus | 第 1 章:从“相似图片搜索”理解 Milvus 向量数据库

本文介绍了向量数据库Milvus的核心概念和基本架构。主要内容包括:1)向量数据库解决的是高维向量相似度检索问题,通过Embedding将非结构化数据转换为向量进行比较;2)Milvus作为分布式向量数据库,包含Proxy、Coordinator、QueryNode等多个组件协同工作;3)关键概念如Collection、Schema、Segment等构成了Milvus的数据组织方式;4)典型使用流程包括创建集合、插入数据、构建索引、加载数据和执行搜索五个步骤。文章为后续深入理解Milvus源码提供了基础知识

weixin_43674738的博客 131

C# 动态编译代码并执行

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

rjcql的专栏 1055

基于Python的新闻聚合与推荐系统:抓取多新闻网站内容并根据用户兴趣进行个性化推荐

本文介绍了如何使用Python构建一个新闻聚合与推荐系统,涵盖了从新闻数据抓取、用户兴趣建模到推荐算法实现的全过程。通过爬虫技术抓取新闻网站内容,使用TF-IDF、Word2Vec等算法进行内容分析,并通过推荐算法向用户推送个性化的新闻,最终帮助用户快速获取自己感兴趣的信息。你可以根据具体需求,进一步扩展和优化系统。例如,加入更多的推荐算法、优化爬虫的抓取效率、增强前端展示的互动性等。通过本文的指导,您应该能够构建一个完整的新闻聚合与推荐系统,并为用户提供个性化的新闻推荐服务。

2201_76125261的博客 1513

html需要编译后执行对吗,C#动态编译代码并执行 能不能针对 .aspx 文件来进行动态编译然后返回编译后的HTML?求大佬指点 :...

1.代码仅参考, 主要问题:能不能将 .aspx 文件来进行动态编译然后返回编译后的HTMLnamespace Test{public class Program{static void Main(string[] args){// 1.CSharpCodePrivoderCSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvid...

weixin_29625757的博客 130

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

动态编译C#代码并反射执行

usingSystem;usingSystem.CodeDom.Compiler;usingSystem.Reflection;usingSystem.Text;namespaceConsoleApplication2{classProgram{staticvoidMain(string[]args){...

weixin_30527143的博客 216

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C#中的表达式树(Expression Trees)的原理及应用,动态编译并执行代码

表达式树(Expression Trees)是 C# 中的一种数据结构,用于表示代码的逻辑结构。它将代码表示为树形结构,每个节点代表一个操作(如加法、减法、方法调用等)。表达式树的主要用途是动态生成代码、分析代码结构以及在运行时执行代码。

yuanpan的专栏 560

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

5964

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
上一篇: C#动态选择调用某个指定内部函数
下一篇: C#动态创建类实例并调用
Python
博客等级 码龄26年 1973粉丝 1567原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值