将数据库中的.net原码进行动态编译及调用~

【.Net动态Web API】动态方法 【.Net动态Web API】动态方法就介绍到这边啦!下一个课程讲解:API的RESTful风格。这个系列预计一天一篇文章,想要学习的可以关注起来!文章会持续更新,大家有想要了解的功能点或者话题,可以在评论区告诉我! 阅读详情

原文:http://www.cnblogs.com/minbear/archive/2004/05/12/9058.aspx

将数据库中的.net原码进行动态编译及调用~

1、为了反射,定义一个接口
public interface IRunExpression
 {
Hashtable MainRun(bool IsDebug);
int Precision
  {set;get;}
}

2、生成数据库内容的dll,在这里将内容先写死,可以直接从数据库读取
StringBuilder _SB = new StringBuilder();
//加载引用
    _SB.Append("using System;   /r/n");
    _SB.Append("using System.Collections ;   /r/n");
    _SB.Append("using System.Threading;   /r/n");
    _SB.Append("using System.IO;  /r/n");
    _SB.Append("using System.Text;   /r/n");
    _SB.Append("using System.Data;   /r/n");
//namespace开始
    _SB.Append("namespace CodeCompile   /r/n");
    _SB.Append("{   /r/n");
    _SB.Append("public class RunExpression : IRunExpression  /r/n");
    _SB.Append("{   /r/n");
    _SB.Append("public RunExpression()  /r/n");
    _SB.Append("{   /r/n");
    _SB.Append("}   /r/n");
 //简单的属性
    _SB.Append("private int _Precision; /r/n");
    _SB.Append("public int Precision /r/n");
    _SB.Append("{   /r/n");
    _SB.Append("set{_Precision=value;} /r/n");
    _SB.Append("get{return _Precision;} /r/n");
    _SB.Append("}   /r/n");
//简单方法实现
   _SB.Append("public Hashtable MainRun(bool IsDebug){return new Hashtable();} /r/n");
    _SB.Append(" }  /r/n");
    _SB.Append("}  /r/n");

string CodeContent = _SB.ToString();   //需要编译的内容

//下面的内容需要using Microsoft.CSharp;

CSharpCodeProvider _SCP = new CSharpCodeProvider();
    CompilerParameters _CP = new CompilerParameters();

    _CP.GenerateExecutable = false;
    _CP.MainClass = "CodeCompile.RunExpression";

    //获取生成路径:)
    Assembly a1 = Assembly.GetExecutingAssembly();
    string e1 = a1.CodeBase ;
    int m = e1.IndexOf(@"///") + 3;
    int n = e1.Length;
    e1 = e1.Substring(m,n - m);
    string[] all = e1.Split(new char[]{'/'});
    string prefix = "";
    for(int i=0;i<all.Length-1;i++)
    {
     prefix += all[i] + "/";
    }

    _CP.OutputAssembly = prefix + "RunExpressionTest.DLL";

    _CP.IncludeDebugInformation = true;

    _CP.ReferencedAssemblies.Add( "System.dll" );
    _CP.ReferencedAssemblies.Add( "System.Data.dll" );
    _CP.ReferencedAssemblies.Add( "System.Web.dll" );
    _CP.ReferencedAssemblies.Add( "System.XML.dll" );
   
    _CP.GenerateInMemory = false;

    _CP.WarningLevel = 3;

    _CP.TreatWarningsAsErrors = false;
   
    _CP.CompilerOptions = "/optimize";
    _CP.TempFiles = new TempFileCollection( prefix + @"/temp", true);  //把编译的过程文件放到temp目录。

    CompilerResults _CR = _SCP.CreateCompiler().CompileAssemblyFromSource(_CP,CodeContent);

    System.Collections.Specialized.StringCollection _SC = _CR.Output;

    CompilerErrorCollection _EC = _CR.Errors;

3、OK,内容编译完成,下面是对它的调用
string AssemblyName = "RunExpressionTest.DLL";
ObjectHandle M = Activator.CreateInstance(AssemblyName,"CodeCompile.RunExpression");
IRunExpression _IRE = (IRunExpression)M.Unwrap();
_IRE.Precision = 2;
Hashtable _HTreturn = _IRE.MainRun(true);

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

相关推荐

NET DynamicObject

DynamicObject的应用

527

基于.NET动态编译技术实现任意代码执行

一、前言当下主流的Waf或Windows Defender等终端杀软、EDR大多都是从特征码查杀,在.Net和VBS下一句话木马中最常见的特征是eval,对于攻击者来说需要避开这个系统关键字,可从反序列化方式避开eval,但公开已久相信很多安全产品已经能够很好检测和阻断这类攻击请求。笔者从.NET 内置的CodeDomProvider类下手实现动态编译.NET代码,指明J...

zls365365的博客 599

经典的.net动态编译、执行、调试 源码

这是一个经典的.net动态编译、执行、调试 源码

动态代码编译探索

 http://www.vckbase.com/document/viewdoc/?id=1609[ 翻译文档 本文适合中级读者 已阅读5117次 ]                  文档                 代码                 工具      动态代码编译探索原著:Mark Strawmyer翻译:小刀人原文出处:Discover Dynamic Code Com

su317的专栏 519

VSCode + Latex 配置

1. 安装VSCode VSCode下载 next,next就安装好了。 2. 配置VSCode 2.1 安装LaTeX Workshop插件 install,安装LaTeX Workshop插件 2.2 修改 user setting 点击左下角,进入用户设置 点击上图标记的部分,选择 打开settings.json 具体配置文件如下: { "latex-workshop.la...

一只特立独行的猪 10万+

python零基础入门到精通,python入门到精通教程

坚持到了这儿,恭喜你,表示你有做开发的潜力,其实我想说的上面的内容还是刚刚开始,刚开始大家不需要多么精通了解这些内容,除了Python方面的知识,每个部分掌握一点儿能进行基本开发就好,主要是不断练习,让自己跳出「舒适区」,进入「学习区」,但是又不进入「恐慌区」,不断给自己「喂招」。上述这份完整版的Python全套学习资料已经上传优快云官方,朋友们如果需要可以扫描下方二维码免费获取【保证100%免费】

YYmmsss的博客 3440

深入浅出.NET代码生成系列(7):动态生成代码与编译综合示例

前面说了这么多,大家可能会觉得,好像没弄出个玩意儿来啊,对啊,所以,本文就来个可以弄出个玩意儿的东东。 说明一下,这是一个综合示例,分为两大部分,第一部分,生成代码,输出到控制台窗口中;第二部分,把这些代码动态进行编译,并生成一个WinForm应用程序,双击动态编译的程序可以运行起来,点击窗口上的按钮,会弹出一个对话框。 好,下面我把整个示例的代码贴出来,很简单,你就新建一个控制台应用程序...

java开发指南博客 【转载】 193

C#企业级工作流管理:从优化到重构的实战指南——代码深度解析与性能调优策略

本文通过Workflow Core与Elsa引擎实现企业审批流程优化,将处理时间从72小时缩短至2小时,效率提升200%。文章包含12个代码示例,涵盖流程梳理、引擎选型(对比Workflow Core与Elsa特性)、模块化重构(策略模式应用)及异常处理机制。关键实现包括:可视化流程建模、Serilog性能监控、Elsa集成配置、策略模式消除重复代码,以及补偿事务设计。最终方案支持高并发,通过数据库连接池优化性能,为企业级工作流系统提供完整技术方案。

墨夶的博客 896

.net 动态编译,代码解释器

1.软件开放脚本录入容器(字符串), 2.动态编译成方法, 3.根据需要进行调用(可定义输入参数和返回类型) ,后期依据接口,开放式编程 class DyncCompiler { /// <summary> /// 动态编译:解释器 /// </summary> /// <param name="RTYPE">返回参数类型</param> /// <param na

dbcalgj的博客 772

6、 实时家禽健康识别与疾病检测系统的深入解析

本文深入解析了一种基于物联网的实时家禽健康识别与疾病检测系统,结合图像分析和音频分析技术,能够有效识别病鸡并防止疾病传播。文章详细介绍了系统的测试环境、数据采集与预处理方法、图像与音频分析流程,并对系统性能进行了全面评估。最后提出了未来改进方向,包括多模态融合、深度学习应用及实时性优化等。

weixin_28840811的博客 186

c# 如何使用S7NET 读取汇川H5U的数据

本文介绍了两种使用C#读取汇川H5U PLC数据的方法。第一种通过ModbusTCP协议(推荐),使用NModbus库实现,步骤包括配置PLC的Modbus服务器功能、安装库及编写读取保持寄存器的代码。第二种针对兼容西门子S7协议的型号,使用S7NetPlus库直接读取。文章强调需注意地址映射关系、协议配置及网络设置,并建议优先采用ModbusTCP方案以确保稳定性。两种方法均提供了完整的代码示例,帮助开发者快速实现在C#环境下与汇川H5U PLC的通信。

StevenChen的博客 457

.Net 字符集与编解码

如果参数是一个对象,而对象中的字符串类型需要在定义封装对象的位置,通过StructLayout 属性的CharSet 来设置。这里首先测试了.Net 在Windows环境下运行情况下,.Net 默认使用ANSI 编解码,其中在 DllImport 中指定的 CharSet 对导出函数的直接字符串参数生效。这里主要针对于使用C++ API是遇到的一些编码被封送的情况测试。跟上面类似,但是Unicode 传送的不成功,想必是类型问题,Unicode 对应C++中应该对应使用wchar* 数组。

xunmeng2002的专栏 930

具身智能(26):RDK S100的LeRobot或Agile X piper机械臂控制模型

本文档详细介绍了基于ROS2的机器人控制模型架构与标定数据联动机制。核心采用"感知-规划-控制"闭环流程,通过激光雷达、相机和IMU的融合数据实现厘米级定位(≤1cm)。文档包含两大控制模型配置:1)RDKLeRobot模型,重点说明PID参数调节和标定文件路径设置;2)AgileXPiper模型,强调驱动安装与外部标定文件集成。针对常见问题提供解决方案,如控制指令无响应需验证标定路径,运动偏差过大需重新标定等。最后给出批量部署方案,通过复制基准配置文件实现多机器人快速配置,要求定位偏差

码农17年的博客 179

使用.net 中的动态方法编程备忘录1(如何查看生成的动态方法的代码)

    使用动态方法编程,常常不知生成的动态方法是否正确,这里介绍,使用工具软件查看动态生成的代码的方法。    1、下载并安装可反编译.net程序的工具    我一直用Reflector.exe来反编译和查看exe、dll文件的代码,Reflector.exe 有免费版本,足够使用了。首先,要下载Reflector.exe,只要在搜索引擎搜一下,很容易得到这个软件的下载链接。    2、将发出的动态方法保存到.dll文件    正常情况下,动态方法或动态类、动态生成的程序集并不需要保存,而为了反编译和查看

海底捞针 1701

传导案例:某医疗仪器传导骚扰整改案例

紫外线光疗仪是一种专业的医疗设备,主要用于治疗银屑病、白癜风等皮肤疾病。该设备采用物理治疗技术,通过特定波长的紫外线照射人体来达到治疗效果。自1984年窄谱中波紫外线(NB-UVB)应用于临床以来,该技术已成为治疗早期蕈样肉芽肿(MF)的有效方法之一。作为二类医疗器械,紫外线光疗仪必须符合严格的电磁兼容性(EMC)标准,这不仅关系到设备自身的稳定运行,更关乎患者的使用安全和治疗效果。紫外线光疗仪传导骚扰整改案例充分展示了系统性EMC设计的重要性。

m0_56451176的博客 340

华为od 面试八股文_Spring_03_含答案

控制反转IOC是一个很大的概念,可以用不同的方式来实现。其主要实现方式有两种:依赖注入和依赖查找依赖注入;

MISAYAONE的博客 2341

.NET 创建动态方法方案及 Natasha V9

虽然 .NET9 支持保存程序集了,但 ALC 的卸载功能有点难搞,.NET 官方对 ALC 的卸载操作几乎是无能为力的,从理论上来讲只要你的类在使用中,这个类就无法被卸载,这种情况很多,一个静态泛型类,或一个全局事件,或被编译到某个不被清理的方法中,又不提供清理方法,他们就会成为程序的僵尸类型。相比前两者,Natasha 需要注意的是 “域” 操作和 Using 引用,有了 “域” 更加方便隔离程序集和卸载,如果你的动态代码创建的程序集永远都是有用的,使用默认域即可。

weixin_55010563的博客 1270

数学建模模型总结

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

.NET 反射的介绍和简单应用

反射还支持的更高级的行为,能在运行时动态创建新类型,并且对这些新类型的操作进行调用。发现信息(如名称、事件处理程序的数据类型、自定义特性、声明类型以及事件的反射的类型),并添加或删除事件处理程序。来定义和加载程序集,加载程序集清单中列出的模块,以及在此程序集中定位一个类型并创建一个它的实例。发现信息(如名称、数据类型、声明类型,反射的类型和属性的只读或可写状态),并获取或设置属性值。发现信息,如参数的名称、数据类型、参数是输入参数还是输出参数以及参数在方法签名中的位置。发现信息,如名称、访问修饰符(如。

lwpoor123的博客 1451

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

深入解析 ASP.NET 的 ViewState 反序列化漏洞

在本文中,我们深入探讨了 ASP.NET 中的 ViewState 反序列化漏洞,包括其原理、如何验证漏洞的存在、以及如何修复漏洞。通过全面理解该漏洞的工作机制,我们可以更加有效地保护应用程序免受攻击。ViewState 反序列化漏洞原理ViewState 通过 Base64 编码,将页面和控件的状态信息传递给客户端和服务器。如果 ViewState 未加密或未正确签名,攻击者可以篡改 ViewState 数据并执行恶意代码。验证漏洞存在。

qq_33163046的博客 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【.net深呼吸】动态类型(高级篇)

前面老周给大家介绍了动态类型使用的娱乐级别用法,其实,在很多情景下,娱乐级别的用法已经满足需求了。 如果,你想自己来控制动态类型的行为和数据的存取,那么,就可以考虑用今天所说的高大上技术了。比如,你希望自己弄个字典来存取数据,又或者,你不想用字典,你想用XML来存取数据,那么就必须自己来实现动态对象的行为了。 实现的原理就是从DynamicObject类(位于System.Dynamic命名空...

weixin_34068198的博客 165

远程过程调用(RPC)简介

Remote Procedure Calls(远程过程调用) 本文译自:https://www.cs.rutgers.edu/~pxk/417/notes/03-rpc.html 简介 sockets是客户端/服务器网络通信模型中的基础,它为程序与程序之间建立连接、收发信息提供了相对简单的机制(甚至可以使用read/write系统调用),两个程序可以位于同一个主机,也可以位于不同的主机。 然而,这...

guotianqing的博客 1万+

在.NET中动态编译与执行脚本文件

  前段时间群里有位朋友问到如何在.NET环境下实现脚本引擎的,今天简单的来说说。要在.NET下实现脚本语言其实可以有多种方式,而我采用了最为简单有效的办法 - 动态编译并执行。通过动态编译技术可以得到如下几方面的好处:   1、利用CLR本身的完整性来处理脚本,使得你的脚本可以支持几乎.NET本身支持的一切特性,记得这里是几乎全部而不是所有的;   2、不用自己费时来写脚本解释器,能够及大的...

weixin_33935505的博客 447

.NET下几种动态生成代码方式比较

场景:         平时在日常工作中往往会遇到这样的情况:一般的解决方案性能不是最好的,但性能最好的解决方案往往又不一定容易理解。如何兼顾这两者呢?这里有一个Microsoft网站上的例子,它用了几种动态代码生成的方法去实现同一个问题,可以对它们的性能做一个简单的比较,以后到底用那种方法心中就有数了。 要解决的问题: 计算一个多项式的值:        Y = A0 + ...

weixin_33858485的博客 192

使用.net 中的动态方法编程备忘录5(在动态方法中使用条件语句)

1、程序执行时,除了顺序执行外,任何程序设计语言,都有条件语句、循环语句、无条件转移语句。而条件语句,几乎每个过程都离不开。在高级程序编程语言中,使用特定的关键字,编写条件语句是很方便的,如 if语句、if-else、if-else if语句、switch语句等等。但微软中间语句(MSIL)无特定的条件语句,要实现条件转移,必须定义Label,自己以比较语句、条件转移语句组合来实现。2、分析条件语句看下面的C#示例:private static string CompareResult(int i, int

海底捞针 1160
上一篇: ASP.NET Whidbey 中新的代码编译功能
下一篇: 获取DLL文件的执行路径
colderboy
博客等级 码龄26年 1粉丝 3原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值