Tôi đang sử dụng System.Reflection.Emit trong một thời gian, và tìm thấy nó (những người không?) Đau đớn như dễ bị lỗi.Có một trình bao bọc tốt xung quanh ILGenerator không?
Bạn có biết nếu có trình bao bọc tốt xung quanh Bộ tạo IL, điều gì đó mà tôi có thể dựa vào để phát ra IL theo cách an toàn hơn và dễ dàng hơn so với chơi trực tiếp với SRE không?
Edit:
Tôi biết rằng thao tác cây biểu thức là dứt khoát dễ dàng hơn và an toàn hơn phát ra IL trực tiếp, nhưng họ cũng có một số hạn chế về ngay bây giờ. Tôi không thể tạo các khối mã, sử dụng vòng lặp, khai báo và làm việc với một số người dân địa phương, vv Chúng tôi cần phải đợi cho đến khi .NET 4 xuất hiện :)
Hơn nữa, tôi đang xử lý một cơ sở mã dựa trên SRE.
Rõ ràng, ILGenerator làm mọi thứ tôi cần. Nhưng tôi sẽ đánh giá cao sự hỗ trợ hơn khi thao túng nó. Khi tôi đề cập đến một wrapper ILGenerator, mà vẫn ở mức khá thấp, tôi nghĩ về một cái gì đó mà có thể cung cấp các phương pháp như:
// Performs a virtual or direct call on the method, depending if it is a
// virtual or a static one.
Call(MethodInfo methodInfo)
// Pushes the default value of the type on the stack, then emit
// the Ret opcode.
ReturnDefault(Type type)
// Test the object type to emit the corresponding push
// opcode (Ldstr, Ldc_I*, Ldc_R*, etc.)
LoadConstant(object o)
Nó thực sự 3 ví dụ ngây thơ, nhưng nó có thể là đủ để chứng minh những gì tôi chờ đợi. Chúng ta có thể thấy rằng như là một tập hợp các phương pháp mở rộng, nhưng nó có thể được tốt đẹp để có hỗ trợ cho các điều kiện báo cáo và vòng như trong RunSharp. Trong thực tế, RunSharp là khá gần mà những gì tôi muốn, nhưng nó tóm tắt ILGenerator quá nhiều và không phơi bày tất cả các chức năng của nó.
Tôi không thể nhớ ở đâu, nhưng tôi đã thấy một người trợ giúp như vậy trong một dự án nguồn mở.
Bạn chưa chỉ định ILGenerator không làm gì và trình bao bọc 'tốt' sẽ làm gì. –
Đó là điểm hợp lệ; Tôi đã cập nhật câu hỏi để cung cấp thêm chi tiết. –
Thực ra, vì Biểu thức là các biểu thức lambda, bạn sẽ có thể sử dụng vòng lặp, được thực hiện như toán tử đệ quy + Y. – TraumaPony