Exception 正在创建程序集以生成代码(反射),但获取未知异常

Exception 正在创建程序集以生成代码(反射),但获取未知异常,exception,reflection,.net-assembly,implicit,Exception,Reflection,.net Assembly,Implicit,我使用以下方法在运行时生成一个方法: System.Reflection.Assembly currentAssembly = System.Reflection.Assembly.GetExecutingAssembly(); System.CodeDom.Compiler.CompilerParameters compilerParams = new System.CodeDom.Compiler.CompilerParameters(); compilerParams.GenerateEx

我使用以下方法在运行时生成一个方法:

System.Reflection.Assembly currentAssembly = System.Reflection.Assembly.GetExecutingAssembly();
System.CodeDom.Compiler.CompilerParameters compilerParams = new System.CodeDom.Compiler.CompilerParameters();
compilerParams.GenerateExecutable = false;
compilerParams.GenerateInMemory = true;
compilerParams.ReferencedAssemblies.Add(currentAssembly.Location);
System.CodeDom.Compiler.CodeDomProvider provider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("C#");
System.CodeDom.Compiler.CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, code);
System.Reflection.Assembly newAssembly = results.CompiledAssembly;
newAssembly.GetType("NewOut.NewClass").GetMethod("newMethod").Invoke(null, args);
它接受一个代码字符串,通常工作正常。但是,某些动态生成的代码显然拒绝编译,在访问CompiledAssembly时引发此异常:

无法加载文件或程序集的file:///C:\文档和设置\Dan\Local Settings\Temp\tkitti7h.dll'或其依赖项之一。系统找不到指定的文件

代码应该编译

这段代码可以编译,并且运行良好:

using Environment;

namespace NewOut{
public class NewClass{
    public NewClass(){
    }
    public static void newMethod(Color[,] data){
        int width = data.GetLength(0); int height = data.GetLength(1); for(int x = 0; x < width; x++){ for(int y = 0; y < height; y++){ Color brighter = data[x, y].brighten(0.4f).setRed(127); data[x, y] = brighter.toward(new Color("gray", 0.5), 0.5f); } }
    }
}
}
除了调用不同的颜色构造函数外,此代码在其他方面相同,但会引发异常:

using Environment;

namespace NewOut{
public class NewClass{
    public NewClass(){
    }
    public static void newMethod(Color[,] data){
        int width = data.GetLength(0); int height = data.GetLength(1); for(int x = 0; x < width; x++){ for(int y = 0; y < height; y++){ Color brighter = data[x, y].brighten(0.4f).setRed(127); data[x, y] = brighter.toward(new Color("gray"), 0.5f); } }
    }
}
}
显然,如果我将动态生成的代码粘贴到实际的cs文件中,它就会编译并运行良好;单参数构造函数没有什么问题

当然,我在谷歌上搜索过,异常本身很常见,并且与缓存DLL等有关,但我无法找到如何查看实际的动态调用编译器所抱怨的内容。我需要看到动态编译错误,因为动态生成的代码显然没有实际问题

那么,我如何查看实际的错误呢

我应该注意,除了Colorstring构造函数之外,当我尝试在动态编译代码中使用CompiledAssembly异常时,从字符串到颜色的隐式转换也会引发CompiledAssembly异常。我怀疑这其中有联系,特别是因为我在过去注意到C编译器有时会毫无理由地调用隐式字符串到颜色的转换?。但不管怎样,我不知道动态编译与隐式转换相关的任何限制

除非有人立即知道动态编译时我的字符串构造函数和字符串隐式转换失败的原因,否则我希望有人能简单地指导我查看实际的动态编译器错误,因为无法加载文件或程序集没有帮助


非常感谢

你能至少格式化你的代码让我们人类可以阅读吗?你是说动态生成的newMethod?读起来并不难。它在一行中,因为我的动态一代并不费心让它看起来太漂亮,它只是支持运行和消失。但这并不重要,工作和非工作的唯一区别在于调用了不同的构造函数重载。您可以从results=provider.compileasemblyfromSourceCompilerParams,code;查看编译器错误;。我只能假设第二个代码段没有正确编译。谢谢!虽然我不知道出了什么问题,但我现在已经开始工作了。该代码段在技术上是正确的,但直到我在系统中添加了引用的程序集后才起作用。当前程序集引用的程序集,即使代码段实际上没有引用任何程序集。代码现在可以工作了,尽管出于某种原因,它说如果动态编译的代码显式使用对象类(即使包含了核心系统dll),则无法找到类型或命名空间名称“object”,并且int、float等也可以工作。但我不需要使用对象。再次感谢!