Можно ли сохранить динамическую сборку на диск?
Я недавно купил книгу АйендеСоздание DSL в Бу (купите, прочитайте, это круто), но я сталкиваюсь с проблемой реализации и хочу посмотреть, как выглядит сгенерированный код. Я бы обычно использовал рефлектор для просмотра кода, но в этом случае сборки динамические и только в памяти. Есть ли способ сохранить динамические сборки на диск, чтобы я мог их отразить?
РЕДАКТИРОВАТЬ / Мой ответ:
Вау, потребовалось некоторое время, чтобы вернуться к этому. К сожалению, я упустил важный момент из исходного вопроса.
Важный бит: я используюБиблиотека RhinoDSL Айенде как он рекомендует в книге. У меня есть доступ к компилятору boo в моем подклассе DslEngine, который выглядит так:
public class JobEngine : DslEngine
{
protected override void CustomizeCompiler(Boo.Lang.Compiler.BooCompiler compiler, Boo.Lang.Compiler.CompilerPipeline pipeline, string[] urls)
{
pipeline.Insert(1, new ImplicitBaseClassCompilerStep(typeof (JobBase), "Prepare", "JobLanguage", "log4net", "Quartz"));
}
}
Чтобы изменить наименьшее и получить то, что я хотел, мне нужно было добавить одну строку ...
public class JobEngine : DslEngine
{
protected override void CustomizeCompiler(Boo.Lang.Compiler.BooCompiler compiler, Boo.Lang.Compiler.CompilerPipeline pipeline, string[] urls)
{
compiler.Parameters.GenerateInMemory = false; // <--- This one.
pipeline.Insert(1, new ImplicitBaseClassCompilerStep(typeof (JobBase), "Prepare", "JobLanguage", "log4net", "Quartz"));
}
}
Это заставило компилятор вывести сборку в мой каталог ~ \ LocalSettings \ Temp, и тогда я смог отразить это. Важно отметить, что внесение этого изменения привело к сбою остальной части программы (RhinoDSL больше не мог находить сборки в памяти, потому что я выводил их на диск), так что это полезно только как инструмент отладки.