2011-12-27 35 views
2

我有一段代码,它使用CodeDom来实时生成代码。它很简单:从内部调用基于CodeDom的代码生成时LoaderException IronPython

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

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

无法加载文件或程序集“POSDATA,版本= 1.0.0.0, 文化=中性公钥=空”或它的一个依赖。该 系统找不到指定的文件。“:” POSDATA,版本= 1.0.0.0, 文化=中立,公钥=空

POSDATA是我自己的组件,其持有的代码生成的东西,这是已经加载由IronPython提供。一切都在一个文件夹中,所以我没有看到可能丢失的内容。

任何提示将非常感激!

+0

这是很难调查,没有一个项目,再现问题。例如,您可以比较从调用C#和IronPyton代码生成的IL,以查看是否有差异。 – 2011-12-30 13:27:48

+0

在程序集已经被加载之前,我也有GetTypes上的FileNotfoundException。问题是没有找到加载程序集引用的程序集。 – 2011-12-30 13:29:31

+0

您绝对应该发布一些IronPython代码。 – 2011-12-30 17:48:30

回答

1

您可以给Fusion Log Viewer一个镜头,以获取有关正在发生的更多信息。

有关如何使用它的详细信息,请参阅MSDN上的Scott Hanselman的blog entrythis page