2009-07-16 20 views
5

Một đề cập gần đây về PostSharp nhắc tôi nhớ về điều này:Công cụ nào thực hiện sửa đổi biên dịch của IL?

Năm ngoái tôi làm việc, chúng tôi đã nghĩ đến việc sử dụng PostSharp để đưa thiết bị vào mã của chúng tôi. Điều này là trong một Team Foundation Server Team Build/Môi trường tích hợp liên tục.

Suy nghĩ về nó, tôi có cảm giác dai dẳng về cách thức hoạt động của PostSharp - nó chỉnh sửa IL được tạo ra bởi các trình biên dịch. Điều này làm phiền tôi một chút.

Tôi không quan tâm nhiều đến mức PostSharp sẽ không thực hiện công việc của mình một cách chính xác; Tôi đã lo lắng về thực tế rằng đây là lần đầu tiên tôi có thể nhớ lại về một công cụ như thế này. Tôi lo ngại rằng các công cụ khác có thể không tính đến điều này.

Thật vậy, khi chúng tôi di chuyển dọc theo, chúng tôi đã làm có một số vấn đề xuất phát từ thực tế là PostSharp đã bị nhầm lẫn về thư mục gốc IL đã tham gia. Dường như là do xung đột với mục tiêu MSBUILD giải quyết các tham chiếu dự án. Xung đột xuất hiện là do thực tế là PostSharp sử dụng một thư mục tạm thời để lưu trữ các phiên bản chưa sửa đổi của IL.

Ở mức giá nào, tôi không có StackOverflow để tham chiếu trở lại sau đó! Bây giờ tôi làm, tôi muốn hỏi tất cả các bạn nếu bạn biết về bất kỳ công cụ nào khác chỉnh sửa IL như là một phần của quá trình xây dựng; hay Microsoft mất rằng loại công cụ vào tài khoản trong Visual Studio, MSBUILD, Team Build vv


Cập nhật: Cảm ơn câu trả lời.

Dòng dưới cùng có vẻ như vậy, ít nhất với VS 2010, Microsoft thực sự nên lưu ý rằng loại điều này có thể xảy ra. Vì vậy, nếu có vấn đề trong lĩnh vực này trong VS2010, sau đó Microsoft có thể chia sẻ đổ lỗi.

Trả lời

3

Tôi biết rằng Dotfuscator, một mã obfuscator, không sửa đổi IL của hội đồng hội đồng và nó được sử dụng trong nhiều quá trình xây dựng.

Các IL được sửa đổi không chỉ cho mã obfuscation và bảo vệ mà còn để tiêm chức năng bổ sung vào các ứng dụng của bạn (xem bài đăng trên blog của chúng tôi (ưu tiên) về Runtime Intelligence here.

Ngoài Common biên dịch cơ sở hạ tầng của Microsoft có khả năng để đọc trong hội đồng, chỉnh sửa và viết lại chúng. Xem CodePlex cho dự án.

4

Tôi biết về Mono.Cecil, thư viện khung mở rộng bộ công cụ System.Reflection, nó được sử dụng bởi dự án LinFu.

Tôi không chắc chắn về hỗ trợ quy trình xây dựng, bạn nên kiểm tra kích thước của chúng.

+1

có một Add-in cho Reflector gọi Reflexil (http://sebastien.lebreton.free.fr/reflexil/) dựa trên Mono.Cecil. –

4

.NET 4.0 bao gồm dự án code contracts từ Microsoft Research, thực hiện xác nhận thời gian chạy (và một số biên dịch) về điều kiện trước/sau của phương pháp của bạn. Các xác nhận được thực hiện trong một thư viện và trình biên dịch .NET phát ra các điều kiện trước/sau khi các phương thức gọi trong IL. Tuy nhiên, vì các hợp đồng thường được chỉ định khi bắt đầu một phương thức, một công cụ phụ cần phải viết lại IL để đưa các xác nhận vào đúng thứ tự và các vị trí chính xác.

EDIT:

  • cccheck là công cụ chạy sau xây dựng và là một kiểm tra tĩnh xác minh hợp đồng tại thời gian biên dịch
  • ccrewrite là công cụ chạy bài cccheck , viết lại IL và tạo kiểm tra thời gian chạy từ các hợp đồng

(Tôi không thể tìm thấy bất kỳ addi nào thông tin kỹ thuật về các công cụ này)

Tôi chưa sử dụng Visual Studio 2010, nhưng tôi đã thấy bản trình diễn tính năng Hợp đồng mã và được tích hợp vào quá trình tạo IDE. cccheck phải luôn luôn chạy, trả về một mã nếu các hợp đồng có mặt trong assembly được xây dựng. Nếu chúng có mặt, mã sẽ biểu thị rằng ccrewrite sẽ chạy.

+0

Bạn có thể nói thêm về công cụ thứ hai này không? –

1

Fody là một công cụ mở rộng cho dệt hội .net dựa trên một kiến ​​trúc plugin.

Các vấn đề liên quan