首页 > 编程语言 >C#动态编译2

C#动态编译2

时间:2022-11-05 22:55:05浏览次数:35  
标签:Console string C# 编译 var 动态 duanjt

思路:

  1. 通过C#的编译对象CSharpCodeProvider对一段C#代码进行编译
  2. C#代码包含命名空间、类、方法。以及需要引用的命名空间
  3. 可以在编译前增加DLL引用,这样动态的C#代码就可以使用引用DLL的方法

首先放一段需要动态编译的代码,名称为:duanjt.cs

using ConsoleApp1;

namespace DynamicCodeGenerate
{
    public class duanjt
    {
        public duanjt(){}
        
        public string SayHello(string name){
            return "hello,"+name;
        }
    }
}

然后就是核心的编译代码

static void Main(string[] args)
{
    CSharpCodeProvider p = new CSharpCodeProvider();

    // 设置编译参数
    CompilerParameters options = new CompilerParameters()
    {
        GenerateInMemory = true,
        GenerateExecutable = false,
    };

    //加入引用的程序集,可以是dll,也可以是exe
    options.ReferencedAssemblies.Add("ConsoleApp1.exe");
            
    //按引入的cs文件进行编译
    var compile = p.CompileAssemblyFromFile(options, new string[] { 
        "duanjt.cs"
    });
    if (compile.Errors.HasErrors)
    {
        Console.WriteLine("编译错误:");
        foreach (CompilerError err in compile.Errors)
        {
            Console.WriteLine(err.ErrorText);
        }
    }
    else
    {
        var type = compile.CompiledAssembly.GetType("DynamicCodeGenerate.duanjt");
        var duanjt = Activator.CreateInstance(type);
        var method = type.GetMethod("SayHello");
        var result = method.Invoke(duanjt, new object[] { "段江涛" });
        Console.WriteLine(result);
    }
    Console.ReadLine();
}

 

标签:Console,string,C#,编译,var,动态,duanjt
From: https://www.cnblogs.com/duanjt/p/16861589.html

相关文章

  • NiceTab新标签页, 一款美观实用的浏览器起始页
    NiceTab(www.nicetab.cn)是一个美观实用的浏览器起始页插件,自上线以来深受广大网友的喜欢。没有任何广告与杂乱的内容推荐,给与用户无干扰的上网新体验。整个插件的功能与内容......
  • SAP Spartacus SSR 模式下 index.html 页面的响应逻辑调试
    入口:所有的regularroute都使用universalengine:简而言之,AngularUniversal是Angular的预渲染解决方案。在普通的单页应用程序中,我们通常将数据带到客户端,然后在......
  • C语言版平凡之路
    #include<iostream>#include<Windows.h>#pragmacomment(lib,"winmm.lib")usingnamespacestd;enumScale{Rest=0,C8=108,B7=107,A7s=106,A7=105,G7s......
  • react 利用history.blcok实现路由跳转拦截
    欢迎关注前端早茶,与广东靓仔携手共同进阶​​​​前端早茶专注前端,一起结伴同行,紧跟业界发展步伐~ 一、前言“history对象”指的是history软件包,它是ReactRouter仅有的......
  • JavaScript修改修改图片dpi
    欢迎关注前端早茶,与广东靓仔携手共同进阶​​​​前端早茶专注前端,一起结伴同行,紧跟业界发展步伐~ 一、原理changeDPI提供了2个实用函数,可以更改画布生成的图像的dpi,无......
  • react 利用history.blcok实现路由跳转拦截
    欢迎关注前端早茶,与广东靓仔携手共同进阶​​​​前端早茶专注前端,一起结伴同行,紧跟业界发展步伐~ 一、前言“history对象”指的是history软件包,它是ReactRouter仅有的......
  • JavaScript修改修改图片dpi
    欢迎关注前端早茶,与广东靓仔携手共同进阶​​​​前端早茶专注前端,一起结伴同行,紧跟业界发展步伐~ 一、原理changeDPI提供了2个实用函数,可以更改画布生成的图像的dpi,无......
  • #yyds干货盘点# 动态规划专题:跳跃游戏(一)
    1.简述:描述给定一个非负整数数组nums,假定最开始处于下标为0的位置,数组里面的每个元素代表下一跳能够跳跃的最大长度。如果能够跳到数组最后一个位置,则输出true,否则输出false......
  • 实验室服务彻底死机记录——硬件故障——主板pcie槽坏掉或显卡坏掉
    实验室的深度学习服务器这次是彻底坏掉了,以前死机都是会在log日志中找到些信息,这次死机死的干脆,什么log都没有就自动关机了,神奇的很,以前的服务器死机可能还算是假死,这次的死......
  • 关闭clash之后有一些应用仍然无法访问网络的解决方法
    方式1:Clash软件-General-SystemProxy-关闭;方式2:菜单键-搜索“代理服务器设置”-手动设置代理-编辑-使用代理服务器-关闭......