2011-12-27 76 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