Gần đây tôi đã mua cuốn sách của Ayende Building DSLs in Boo (mua nó, đọc nó, nó thật tuyệt) nhưng tôi sẽ gặp phải vấn đề triển khai và tôi muốn xem mã được tạo ra trông như thế nào. Tôi thường sẽ sử dụng phản xạ để xem mã nhưng trong trường hợp này các hội đồng là năng động và chỉ trong bộ nhớ. Có cách nào để lưu hội đồng năng động vào đĩa để tôi có thể phản ánh chúng?Có thể lưu một cụm động vào đĩa không?
EDIT/trả lời của tôi:
Wow, phải mất một thời gian để trở lại thế này. Thật không may tôi đã để lại một chút quan trọng từ câu hỏi ban đầu.
Quan trọng Bit: Tôi đang sử dụng Ayende's RhinoDSL library như anh ta đề xuất trong sách. Tôi có quyền truy cập vào trình biên dịch boo trong lớp con của tôi về DslEngine mà trông như thế này:
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"));
}
}
Để thay đổi nhất và nhận được những gì tôi muốn tôi cần phải thêm một dòng ...
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"));
}
}
này gây ra trình biên dịch để kết xuất assembly vào thư mục ~ \ LocalSettings \ Temp của tôi và sau đó tôi có thể phản ánh nó. Điều quan trọng cần lưu ý là việc thay đổi đó gây ra phần còn lại của chương trình để phá vỡ (RhinoDSL không thể tìm thấy các hội đồng trong bộ nhớ vì tôi xuất chúng ra đĩa), vì vậy điều này chỉ hữu ích như một công cụ gỡ lỗi.
Sử dụng serialization đối tượng XML?!. – serhio
bạn có tạo các assembly đó thông qua CodeDom không? –