zoukankan      html  css  js  c++  java
  • C# 动态编译并动态传入对象

    创建对象并执行方法,传入一个动态对象作为参数

     static object DynamicCreateAssembly(dynamic inputObject)
            {
                Microsoft.CSharp.CSharpCodeProvider cSharpCodeProvider = new Microsoft.CSharp.CSharpCodeProvider();
                //
                System.CodeDom.Compiler.CompilerParameters compilerParameters = new System.CodeDom.Compiler.CompilerParameters();
                compilerParameters.ReferencedAssemblies.Add("System.dll");
                compilerParameters.ReferencedAssemblies.Add("System.Linq.Expressions.dll");
                compilerParameters.ReferencedAssemblies.Add("System.Core.dll");
                compilerParameters.ReferencedAssemblies.Add("Microsoft.CSharp.dll");
                compilerParameters.GenerateInMemory = true;
                //
                string source = @"
    using System;
    using System.Runtime.CompilerServices;
    public class Fuck {
        public static string FuckMe(dynamic input)
        {
            Console.WriteLine(input.Age);
            Console.WriteLine(input.Name);
            return ""okkkk"";
        }
    
    }
    ";
                var compilerResults = cSharpCodeProvider.CompileAssemblyFromSource(compilerParameters, source);
                if (compilerResults.Errors.Count > 0)
                {
                    foreach (var err in compilerResults.Errors)
                    {
                        Console.WriteLine(err);
                    }
                }
                var asm = compilerResults.CompiledAssembly.CreateInstance("Fuck");
                MethodInfo method = asm.GetType().GetMethod("FuckMe");
                return method.Invoke(asm, new object[] { inputObject });
            }
    

    需要传入的对象

     public class Person
        {
            public int Age { get; set; }
            public string Name { get; set; }
        }
    

    调用

    static void Main(string[] args)
            {
                Person person = new Person();
                person.Name = "撒飞洒发撒";
    
                object result = DynamicCreateAssembly(person);
                Console.WriteLine($"返回值:{result}");
                Console.Read();
            }
    

  • 相关阅读:
    zabbix之自定义告警
    Appium获取toast消息
    fiddler在小米8下抓取https数据包.
    shell 获取指定ip的丢包率
    打造个人多媒体服务器之二
    关于pycharm+opencv没有代码提示的问题解决方法记录
    chrome出现“由贵单位管理”原因及解决方法
    jQuery 页面加载后执行的事件(3 种方式)
    VSCode
    2019.7月-前端面试总结(H5+C3+JS+ES6+Vue+浏览器)
  • 原文地址:https://www.cnblogs.com/trykle/p/14878492.html
Copyright © 2011-2022 走看看