나는 최근에 Ayende의 책 Building DSLs in Boo (구매, 그것을 읽고, 끝내 준다)을 구입했지만 구현 문제에 대해 생각해 보았고 생성 된 코드가 어떻게 보이는지 알고 싶다. 나는 일반적으로 코드를보기 위해 리플렉터를 사용하지만,이 경우 어셈블리는 동적이며 메모리에만 있습니다. 동적 어셈블리를 디스크에 저장하여 반영 할 수 있습니까?동적 어셈블리를 디스크에 저장할 수 있습니까?
편집/내 대답는 :
와우, 그것은 다시 이것에 와서 잠시했다. 불행히도 원래의 질문에서 중요한 부분을 벗어났습니다.
중요 비트 : 나는이 책에서 권하는대로 Ayende's RhinoDSL library을 사용하고 있습니다. ...
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"));
}
}
이를
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"));
}
}
는 적어도 변경하고 내가 한 줄을 추가 할 필요가 원하는 것을 얻으려면 : I는 다음과 같습니다 DslEngine의 내 서브 클래스에서 야유 컴파일러에 액세스 할 수 컴파일러가 어셈블리를 내 ~ \ LocalSettings \ Temp 디렉터리에 출력하도록 한 다음이를 반영 할 수있었습니다. 이러한 변경으로 인해 나머지 프로그램이 중단되었습니다 (RhinoDSL은 디스크에 출력하기 때문에 더 이상 메모리에서 어셈블리를 찾을 수 없음), 이는 디버깅 도구로만 유용합니다.
CompileToFile에 객체 XML 직렬화에서 파이프 라인을 변경 조회?!. – serhio
CodeDom을 통해 어셈블리를 만드시겠습니까? –