Я недавно купил книгу Айенде Создание DSL в Boo (купите, прочитайте, это круто), но я сталкиваюсь с проблемой реализации и хочу посмотреть, как выглядит сгенерированный код. Я бы обычно использовал рефлектор для просмотра кода, но в этом случае сборки динамические и только в памяти. Есть ли способ сохранить динамические сборки на диск, чтобы я мог их отразить?
РЕДАКТИРОВАТЬ / Мой ответ :
Ого, потребовалось некоторое время, чтобы вернуться к этому. К сожалению, я упустил важный момент из исходного вопроса.
Важный бит: я использую Библиотеку Айенде 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 больше не мог находить сборки в памяти, потому что я выводил их на диск), поэтому это полезно только в качестве инструмента отладки.