陋室铭
永远也不要停下学习的脚步(大道至简至易)

posts - 2169,comments - 570,views - 413万

接口:

namespace LibertyPortal.Main.IDAL
{
    public interface Interface1
    {
        void www();
    }
}   

调用

        Assembly assembly = NewAssembly();
        Interface1 www = assembly.CreateInstance("xml.tables.Test1") as Interface1;

方法

public static Assembly NewAssembly()
    {
        //foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
        //{
        //    string wzcxzww = asm.Location;
        //}
        //创建编译器实例。
        CSharpCodeProvider provider = new CSharpCodeProvider();
        //设置编译参数。
        CompilerParameters paras = new CompilerParameters();
        paras.GenerateExecutable = false;
        paras.GenerateInMemory = true;


        string wwasw= System.Web.HttpContext.Current.Server.MapPath("Bin");
        paras.ReferencedAssemblies.Add(wwasw+"http://www.cnblogs.com/cuihongyu3503319/admin/file://libertyportal.main.idal.dll%22);//要真实地址
        paras.ReferencedAssemblies.Add("System.dll");//全局的不用


        CodeCompileUnit m_CodeCompileUnit;
        CodeNamespace m_CodeNameSpace;//命名空间
        CodeTypeDeclaration m_Class;//类
        m_CodeCompileUnit = new CodeCompileUnit();
        m_CodeNameSpace = new CodeNamespace("xml.tables");
        m_CodeCompileUnit.Namespaces.Add(m_CodeNameSpace);
        m_Class = new CodeTypeDeclaration("Test1");//类名为Test1
        m_Class.IsClass = true;//是类


        //产生www方法
        CodeTypeReference voidReference = new CodeTypeReference("System.void");//方法无返回值
        CodeMemberMethod Test = new CodeMemberMethod();//方法
        Test.ReturnType = voidReference;
        Test.Name = "www";
        Test.Attributes = MemberAttributes.Public | MemberAttributes.Final;
        //CodeVariableReferenceExpression m_AddFlagExpression = new CodeVariableReferenceExpression("m_AddFlag");

        //CodeAssignStatement assignAddTrue = new CodeAssignStatement(m_AddFlagExpression, new CodePrimitiveExpression(true));
        //Test.Statements.Add(assignAddTrue);
        m_Class.Members.Add(Test);

 


        //m_Class.BaseTypes.Add(new CodeTypeReference(typeof(Object)));
        m_Class.BaseTypes.Add(new CodeTypeReference(typeof(Interface1)));//类父亲
        m_CodeNameSpace.Types.Add(m_Class);


        #region 输出生成源代码
        ICodeGenerator g = provider.CreateGenerator();
        g.GenerateCodeFromType(m_Class,System.Web.HttpContext.Current.Response.Output , null);  

        #endregion

        CompilerResults result = provider.CompileAssemblyFromDom(paras, m_CodeCompileUnit);//编译


        if (result.Errors.Count > 0)
        {
            // 显示编译错误信息。  
            string www = "";
            foreach (CompilerError ce in result.Errors)
            {
                www += ce.ToString();
                //Debug.WriteLine();
            }
            System.Web.HttpContext.Current.Response.Write(www);
            return null;
        }
        else
        {
            Debug.WriteLine(result.PathToAssembly);
        }

        //编译代码。
        //CompilerResults result = provider.CompileAssemblyFromSource(paras, classSource.ToString());

        //获取编译后的程序集。
        Assembly assembly = result.CompiledAssembly;


        return assembly;
    }

posted on   宏宇  阅读(504)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2007-12-16 UltraEdit
< 2009年12月 >
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9

点击右上角即可分享
微信分享提示