1.使用c#动态编译,可参考如下: //生成c#代码 string code = GenerateCode(); CodeDomProvider cdp = CodeDomProvider.CreateProvider("C#"); // 编译器的参数 CompilerParameters cp = new CompilerParameters(); cp.ReferencedAssemblies.Add(typeof(T).Assembly.Location); cp.Referen…
看文章标题就知道,本文的主题就是关于JSON,JSON转换器(JsonConverter)具有将C#定义的类源代码直接转换成对应的JSON字符串,以及将JSON字符串转换成对应的C#定义的类源代码,而JSON操作技巧则说明如何通过JPath来快速的定位JSON的属性节点从而达到灵活读写JSON目的. 一.JSON转换器(JsonConverter)使用及原理介绍篇 现在都流行微服务,前后端分离,而微服务之间.前后端之间数据交互更多的是基于REST FUL风格的API,API的请求与响应一般常用格…
多年前用过李天平前辈的,自己改过,后来李老师做动软了,不给源码,修改不是很方便.加上我目前需要转java方向,于是决定自己搞.到目前为止花了整整一个星期了,看看目前的成果. 最后是代码工程文件,用c#开发的,IDE是vs2010 为了实现最大的模板自由,设计了专有的模板语法.基于C#,但是已经做到尽量简化,对有一点开发经验的同行应该是很好上手的. 目前c#的代码模板已经做了一些通用样例,接下来做java的开发代码模板. 总之,为了提高效率,并且规范项目团队成员的代码书写. 下面把核心的代码两个类…
由于公司实施SAP HR项目,但是SAP HR对考勤功能真的太弱化了,直接从考勤机上读取的原始打卡记录不能直接传输到HR系统里面,因为SAP HR不能识别那些多余的打卡记录,而且必须把打卡记录进行成组标记(P10,P20),以上标红色的是SAP HR顾问给我的反馈信息. 这样以来,必须开发一套算法来把多余的打卡记录进行过滤掉,然后标记上是P10还是P20,这样以来,HR系统在做时间评估时才不会出现异常情况. 需求已经明确,那么就是设计开发的问题,要开发该功能,需要用到的资源: 1.考勤的排班数据…
知道了如果构建代码文档,知道了如何生成代码,那么编译程序集就很简单了. CodeDomProvider 类提供了三个可以执行编译的方法: 1.CompileAssemblyFromSource——这个好懂,也好办,就是用字符串直接构建代码,然后传给这个方法,就可以把源代码编译了. 2.CompileAssemblyFromFile——这个是把一个代码文件传给方法进行编译,文件中包含源代码. 3.CompileAssemblyFromDom——这个重载版本跟我们之前所学的内容关联性最大,因为它是把…
关于C#的动态类型与动态编译的简介,主要是一个Demo. 动态类型 关键字: dynamic 这里有详细的介绍:[C#基础知识系列]专题十七:深入理解动态类型 动态类型的应用场景 可以减少强制转换(强制转换其实挺好的,让程序猿清楚地指定自己做了什么,不至于出错时不知所措) 简化反射的写法. 与动态语言交互. // Install-Package IronPython // 需要安装此 Nuget包 // 引入动态类型之后 // 可以在C#语言中与动态语言进行交互 // 下面演示在C#中使用动态语…
(一)问题 之前写Lua时,修改完代码 reload 就可以热重载代码,调试起来十分方便(重构则十分痛苦). 现在使用 C# 做开发,目前还没找到比较方便地进行热重载的方式.只能退而求其次,在调试上找找方法,尽量能减少编译重启的次数. 基本原理是:动态编译生成dll,再调用 Assembly 中的方法.之前看到过一个关键词 REPL,原理肯定不同,但加上编辑器扩展或许能实现类似的交互效果. 作用实际上不是很大,基本和打断点调试时在即时窗口中运行代码是类似的(稍微好用一些,毕竟可以执行一段多行代码…
/// <summary> /// 动态编译并执行代码 /// </summary> /// <param name="code">代码</param> /// <param name="newPath">输出dll的路径</param> /// <returns>返回输出内容</returns> private CompilerResults debugRun(stri…
代码的动态编译并执行是一个.NET平台提供给我们的很强大的工具用以灵活扩展(当然是面对内部开发人员)复杂而无法估算的逻辑,并通过一些额外的代码来扩展我们已有 的应用程序.这在很大程度上给我们提供了另外一种扩展的方式(当然这并不能算是严格意义上的扩展,但至少为我们提供了一种思路). 动态代码执行可以应用在诸如模板生成,外加逻辑扩展等一些场合.一个简单的例子,为了网站那的响应速度,HTML静态页面往往是我们最好的选择,但基于数据驱动的网站往往又很难用静态页面实现,那么将动态页面生成html的工作或许…
在项目进行中有时候会需要配置一些复杂的表达式,在程序运行的时候执行表达式,根据结果执行相应的操作,简单写了一个类Expression,利用.net的动态编译技术实现,代码如下: public class Expression { /// <summary> /// 执行一个表达式,或代码片段 /// </summary> /// <param name="expression">表达式或代码片段</param> /// <param…