Compiler("MessageBox.Show(\""+ sys.kjid + "\");");

解决方案 »

  1.   

    更改Compiler方法
    Compiler(string code, string kjid)
    {
    code =code.substring(0,code.length-2)+"\""+kjid+"\");";
    ...
    ..
    }
    private void button1_Click(object sender, EventArgs e)
      {
      Compiler("MessageBox.Show();",sys.kjid);
      }
      

  2.   

    你要动态执行就不能调用当前项目中的任何代码了,也就是说单独的执行一段代码块,和当前的程序没有瓜葛。所以如果你想调用这个,要么就在动态执行的代码中声明,要么就直接取值。当然 我想LZ所想的是前者吧~~[align=center]***********************************************************
                       欢迎使用CSDN 小秘书
    ***********************************************************[/align]
      

  3.   

    反射,你可以动态生成代码,把代码写在TextBox文本框里面都可以!
      

  4.   

    把值做为参数的形式传进去...
    改造
    MethodInfo vTest = vTemp.GetType().GetMethod("Test");
      vTest.Invoke(vTemp, null);GetMethod有重载方法,可以加参数
      

  5.   

    如果你项目中的,你需要添加对你项目dll的引用,添加对应的反射代码。
    动态创建代码。然后再反射
      

  6.   

    vCompilerParameters.ReferencedAssemblies.Add("你的项目.dll");
      

  7.   

    要想访问sys.kjid在 param.ReferencedAssemblies集合中加上你当前的程序集就可以了
    param.ReferencedAssemblies.Add(AppDomain.CurrentDomain.BaseDirectory + "a.exe");
      

  8.   

     #region 执行静态代码
            /// <summary>
            /// 执行代码,返回结果(默认引用了System.dll、System.Data.dll、System.Xml.dll、System.Web.dll 4个程序集)
            /// </summary>
            /// <param name="code">代码</param>
            /// <param name="arrReferencedAssemblies">要引用的程序集</param>
            /// <returns></returns>
            public static object ExecuteCode(string code, string[] arrReferencedAssemblies)
            {
                CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();            CompilerParameters objCompilerParameters = new CompilerParameters();
                objCompilerParameters.ReferencedAssemblies.Add("System.dll");       //引用dll 
                objCompilerParameters.ReferencedAssemblies.Add("System.Data.dll");  //引用dll 
                objCompilerParameters.ReferencedAssemblies.Add("System.Xml.dll");   //引用dll 
                objCompilerParameters.ReferencedAssemblies.Add("System.Web.dll");   //引用dll 
                if (arrReferencedAssemblies != null)
                    foreach (string item in arrReferencedAssemblies)
                        objCompilerParameters.ReferencedAssemblies.Add(item);
                objCompilerParameters.GenerateExecutable = false;
                objCompilerParameters.GenerateInMemory = true;            CompilerResults cr = (objCSharpCodePrivoder.CompileAssemblyFromSource(objCompilerParameters,
                new [] { GenerateCode(code) }));            if (cr.Errors.HasErrors)
                {
                    StringBuilder l_err = new StringBuilder("编译错误:");
                    foreach (CompilerError err in cr.Errors)
                    {
                        l_err.AppendLine(err.ErrorText);
                    }
                    return l_err.ToString();
                }
                // 通过反射,调用HelloWorld的实例 
                Assembly objAssembly = cr.CompiledAssembly;
                object objHelloWorld = objAssembly.CreateInstance("CommonOtherDynamicCodeGenerate.CommonOtherDynamicCodeGenerateClass");
                MethodInfo objMI = objHelloWorld.GetType().GetMethod("OutPut");
                // 调用执行 
                return objMI.Invoke(objHelloWorld, null);
            }        /// <summary>
            /// 执行代码,返回结果(默认引用了System.dll、System.Data.dll、System.Xml.dll 3个程序集)
            /// </summary>
            /// <param name="code"></param>
            /// <returns></returns>
            public static object ExecuteCode(string code)
            {
                return ExecuteCode(code, null);
            }        private static string GenerateCode(string code)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("using System;");
                sb.Append(Environment.NewLine);
                sb.Append("using System.Text;");
                sb.Append(Environment.NewLine);
                sb.Append("using System.IO;");
                sb.Append(Environment.NewLine);
                sb.Append("using System.Data;");
                sb.Append(Environment.NewLine);
                sb.Append("using System.Xml;");
                sb.Append(Environment.NewLine);
                sb.Append("using System.Web;");
                sb.Append(Environment.NewLine);
                sb.Append("using System.Collections;");
                sb.Append(Environment.NewLine);
                sb.Append("using System.Collections.Generic;");
                sb.Append(Environment.NewLine);
                sb.Append("namespace CommonOtherDynamicCodeGenerate");
                sb.Append(Environment.NewLine);
                sb.Append("{");
                sb.Append(Environment.NewLine);
                sb.Append(" public class CommonOtherDynamicCodeGenerateClass");
                sb.Append(Environment.NewLine);
                sb.Append(" {");
                sb.Append(Environment.NewLine);
                sb.Append(" public object OutPut()");
                sb.Append(Environment.NewLine);
                sb.Append(" {");
                sb.Append(Environment.NewLine);
                sb.Append(" return " + code + ";");
                sb.Append(Environment.NewLine);
                sb.Append(" }");
                sb.Append(Environment.NewLine);
                sb.Append(" }");
                sb.Append(Environment.NewLine);
                sb.Append("}");            return sb.ToString();
            }
            #endregion