Compile simple string

后端 未结 6 1830
星月不相逢
星月不相逢 2021-02-15 13:57

Was just wondering if there are any built in functions in c++ OR c# that lets you use the compiler at runtime? Like for example if i want to translate:

!print \"         


        
6条回答
  •  北荒
    北荒 (楼主)
    2021-02-15 14:32

    It is possible using C#. Have a look at this Sample Project from the CodeProject.

    Code Extract

    private Assembly BuildAssembly(string code)
    {
        Microsoft.CSharp.CSharpCodeProvider provider = new CSharpCodeProvider();
        ICodeCompiler compiler = provider.CreateCompiler();
        CompilerParameters compilerparams = new CompilerParameters();
        compilerparams.GenerateExecutable = false;
        compilerparams.GenerateInMemory = true;
        CompilerResults results = compiler.CompileAssemblyFromSource(compilerparams, code);
        if (results.Errors.HasErrors)
        {
           StringBuilder errors = new StringBuilder("Compiler Errors :\r\n");
           foreach (CompilerError error in results.Errors )
           {
                errors.AppendFormat("Line {0},{1}\t: {2}\n", error.Line, error.Column, error.ErrorText);
           }
           throw new Exception(errors.ToString());
        }
        else
        {
            return results.CompiledAssembly;
        }
    }
    
    public object ExecuteCode(string code, string namespacename, string classname, string functionname, bool isstatic, params object[] args)
    {
        object returnval = null;
        Assembly asm = BuildAssembly(code);
        object instance = null;
        Type type = null;
        if (isstatic)
        {
            type = asm.GetType(namespacename + "." + classname);
        }
        else
        {
            instance = asm.CreateInstance(namespacename + "." + classname);
            type = instance.GetType();
        }
        MethodInfo method = type.GetMethod(functionname);
        returnval = method.Invoke(instance, args);
        return returnval;
    }
    

提交回复
热议问题