从IronPython内部调用基于CodeDom的代码生成时的LoaderException

本文关键字:代码生成 LoaderException CodeDom IronPython 内部 调用 | 更新日期: 2023-09-27 18:18:50

我有一段使用CodeDom动态生成代码的代码。很简单:

  • 创建CodeCompileUnit并填充类型。
  • 机组被传递给CSharpCodeProvider.CompileAssemblyFromDom
  • 程序集在内存中生成,所有内容都包装在单个静态方法中,该方法返回生成类型的实例。

如果我从c#调用这个静态方法,一切工作正常,但如果我从IronPython调用这个方法,它就会失败。没有编译错误,返回的CompilerResults中的CompiledAssembly不为空。但是如果我为程序集调用GetTypes,我得到一个ReflectionTypeLoadException,它告诉我要查看LoaderExceptions。这是一个FileNotfoundException给出以下消息:

无法加载文件或程序集'PosData, Version=1.0.0.0,文化=中性,PublicKeyToken=null'或其依赖项之一。的系统找不到指定的文件。":"PosData版本= 1.0.0.0,文化=中立,都必须空

PosData是我自己的程序集,它包含代码生成的东西,并且已经被IronPython加载。所有东西都在一个文件夹里,所以我看不出遗漏了什么。

任何提示将非常感激!

从IronPython内部调用基于CodeDom的代码生成时的LoaderException

你可以给Fusion Log Viewer一个镜头来获取更多的信息。

有关如何使用它的详细信息,请参阅Scott Hanselman的博客条目和MSDN上的此页面。