C# CSharpCodeProvider编译器参数使用System.Data错误

C# CSharpCodeProvider编译器参数使用System.Data错误,c#,system.data,csharpcodeprovider,C#,System.data,Csharpcodeprovider,我正在使用VS2010,当我添加“DataTable=null;”这一行时,这里发生的错误是代码: public static object GetLambdaResult(string expression) { string className = "ExecuteLambda"; string methodName = "Run"; var providerDic = new Dictionary<strin

我正在使用VS2010,当我添加“DataTable=null;”这一行时,这里发生的错误是代码:

       public static object GetLambdaResult(string expression)
       {
        string className = "ExecuteLambda";
        string methodName = "Run";
        var providerDic = new Dictionary<string, string>() { { "CompilerVersion",   "v4.0" } };
        ICodeCompiler complier = (new CSharpCodeProvider(providerDic).CreateCompiler());
        CompilerParameters paras = new CompilerParameters();

        paras.GenerateExecutable = false;
        paras.GenerateInMemory = true;
        paras.ReferencedAssemblies.Add("System.dll");
        paras.ReferencedAssemblies.Add("System.Data.dll");

        StringBuilder classSource = new StringBuilder();
        classSource.Append("using System; \n");
        classSource.Append("using System.Data; \n");
        classSource.Append("namespace AutoRun \n");
        classSource.Append("{\n");
        classSource.AppendFormat("  public class {0} \n", className);
        classSource.Append("  {\n");
        classSource.AppendFormat("       public static  object {0}()\n", methodName);
        classSource.Append("       {\n");
        classSource.Append("             DataTable table= null;\n");
        classSource.AppendFormat("             return {0};\n", expression);
        classSource.Append("       }\n");
        classSource.Append("  }\n");
        classSource.Append("}");
        CompilerResults result = complier.CompileAssemblyFromSource(paras, classSource.ToString());
        Assembly assembly = result.CompiledAssembly;
        object eval = assembly.CreateInstance("AutoRun." + className);
        MethodInfo method = eval.GetType().GetMethod(methodName);
        object reobj = method.Invoke(eval, null);
        GC.Collect();
        return reobj;
    }
public静态对象GetLambdaResult(字符串表达式)
{
string className=“ExecuteLambda”;
string methodName=“Run”;
var providerDic=newdictionary(){{“compilervision”,“v4.0”};
ICodeCompiler=(新的CSharpCodeProvider(providerDic).CreateCompiler());
CompilerParameters paras=新的CompilerParameters();
第4.1.2段生成可执行=假;
第4.1.2段生成内存=真;
第REFERENCEDASSEMBLYSES.Add段(“System.dll”);
第REFERENCEDASSEMBLYSES.Add段(“System.Data.dll”);
StringBuilder classSource=新的StringBuilder();
追加(“使用系统;\n”);
classSource.Append(“使用System.Data;\n”);
追加(“名称空间自动运行\n”);
追加(“{\n”);
AppendFormat(“公共类{0}\n”,类名);
追加(“{\n”);
AppendFormat(“公共静态对象{0}()\n”,方法名);
追加(“{\n”);
Append(“DataTable=null;\n”);
AppendFormat(“返回{0};\n”,表达式);
classSource.Append(“}\n”);
classSource.Append(“}\n”);
追加(“}”);
CompilerResults result=complier.compileasemblyfromsource(第段,classSource.ToString());
Assembly=结果。已编译的Assembly;
objecteval=assembly.CreateInstance(“自动运行”。+className);
MethodInfo method=eval.GetType().GetMethod(methodName);
object reobj=method.Invoke(eval,null);
GC.Collect();
返回reobj;
}
我得到一个FileNotFoundException, {“无法加载文件或程序集”文件:///C:\\Users\\Administrator\\AppData\\Local\\Temp\\12azlzyr.dll”或其依赖项之一

.System找不到指定的文件。“:“文件:///C:\\Users\\Administrator\\AppData\\Local\\Temp\\12azlzyr.dll”

问题是 Append(“DataTable=null;\n”); 和
第REFERENCEDASSEMBLYSES.Add段(“System.Data.dll”); 我还不知道怎么解决

经过长时间的搜索,我找到了解决方案,需要添加xml引用
paras.ReferencedAssemblys.Add(“System.XML.dll”);

发布完整的异常消息。很明显,它正在试图找到一个不存在的文件。从何处获取异常,详细信息是什么?(是否有任何原因不想使用
StringBuilder.AppendLine
?)我知道问题出在paras.ReferencedAssemblys.Add(“System.Data.dll”);似乎我无法添加System.Data引用,我不知道为什么您需要修复代码中的错误,检查编译是否实际成功不是可选的。迭代编译器结果。错误。现在您知道了为什么result.CompiledAssembly会轰炸您的程序。