2011-12-27 1 views
2

У меня есть фрагмент кода, который использует CodeDom для генерации кода «на лету». Это прямолинейно:LoaderException при вызове генерации кода на основе CodeDom изнутри IronPython

  • CodeCompileUnit созданный и заполненный типом.
  • Устройство передано CSharpCodeProvider.CompileAssemblyFromDom.
  • Сборка создается в памяти, и все обернуто внутри одного статического метода, который возвращает экземпляр сгенерированного типа.

Если я вызываю этот статический метод из C#, все работает нормально, но это не удается, если я вызываю метод из IronPython. Ошибок компиляции нет, а CompiledAssembly из возвращаемого CompilerResults не имеет значения. Но если я назову GetTypes для сборки, я получаю ReflectionTypeLoadException, который говорит мне посмотреть на LoaderExceptions. Это одна является FileNotfoundException дает следующее сообщение:

Не удалось загрузить файл или сборку «PosData, Version = 1.0.0.0, Culture = нейтрален, PublicKeyToken = нуль» или один из его зависимостей. Система не может найти указанный файл. «:» PosData, Version = 1.0.0.0, Culture = нейтрален, PublicKeyToken = нуль

PosData мой собственный узел, который содержит материал генерации кода и который уже загружен от IronPython. Все находится в одной папке, поэтому я не вижу, чего не хватает.

Любой намек был бы очень признателен!

+0

Это трудно исследовать без проекта, который воспроизводит проблему. Вы можете, например, сравнить IL, сгенерированный с вашего кода C# и IronPyton, чтобы узнать, есть ли различия. –

+0

У меня также было FileNotfoundException в GetTypes до того, как сборка уже была загружена. Проблема заключалась в том, что сборка, на которую ссылается загруженная сборка, не найдена. –

+0

Вы должны обязательно опубликовать некоторый код IronPython. –

ответ

1

Вы можете дать Fusion Log Viewer выстрел, чтобы получить больше информации о том, что происходит.

См. blog entry и this page Скотта Ханзельмана в MSDN для получения подробной информации о том, как его использовать.

Смежные вопросы