动态执行代码

8 篇文章 0 订阅

//缺憾:装载以后不能卸载,所以第二次生成的时候,不能替换 dll。结果Dll 还是旧的。

不再有缺憾,可以使用影像复制功能来替换DLL

 

 

                string dllPath = @"d:/DynamicClass.dll";
                string csPath = @"d:/DynamicClass.cs";

                //保存文件
                string Code = string.Format(@"
using System;
using System.Text;

public  class DynamicClass
{{
   
    public string speak()
    {{
        {0}
    }}
}}", txtCode.Text);

                ;
                File.WriteAllText(csPath, Code);


                //編譯
                string path = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory();

                string exeInfo = string.Format(@"{0}/csc.exe", path);
                string argumentsInfo = string.Format(" /t:library /out:{0} {1}", dllPath, csPath);

                Process p = new Process();
                p.StartInfo.FileName = exeInfo;
                p.StartInfo.Arguments = argumentsInfo;
                p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                p.StartInfo.CreateNoWindow = true;
                p.Start();
                p.WaitForExit();


                //調用
                Assembly ass = Assembly.LoadFile(dllPath);
                Type t1 = ass.GetType("DynamicClass");
                MethodInfo minfo = t1.GetMethod("speak");
                Object obj = Activator.CreateInstance(t1);
                Object o1 = minfo.Invoke(obj, null);
                txtResult.Text = o1.ToString();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值