2012-12-19 24 views
14

Tôi có một câu hỏi cơ bản, có thể nó là như vậy rõ ràng, nhưng đối với một số lý do tôi dường như không thể thành công với cài đặt và sử dụng hợp đồng mã.cách cài đặt và sử dụng Hợp đồng mã?

Tôi đã tải về các gói từ MSDN, cài đặt nó sau khi tài liệu trực tuyến nhưng tôi vẫn nhận được một cảnh báo IDE cho báo cáo kết quả mã bên dưới:

Contract.Requires(inputParameter != "");

cảnh báo IDE là:

"Gọi phương thức bị bỏ qua. Trình biên dịch sẽ không tạo ra lời gọi phương thức vì phương thức có điều kiện, hoặc nó là phương thức từng phần mà không cần triển khai"

Bất cứ điều gì tôi đang thiếu trong quá trình bật Hợp đồng mã? Tôi đang sử dụng VS2010 Ultimate SP1

+1

Có thể điều này có thể giúp: http: // stackoverflow.com/questions/3461972/am-i-implementation-này-đơn giản-hợp đồng-không chính xác –

+1

@AdrianFaciu: Cảm ơn, bài viết đã giải thích lý do và giải pháp của nó đang làm việc cho tôi. Chỉ cần định nghĩa 'CONTRACTS_FULL' về định nghĩa tiền xử lý dự án, vì trình cắm thêm Code Contracts có vẻ không hoạt động đúng. – NirMH

Trả lời

12

Rất có thể điều này là do Hợp đồng mã không được định cấu hình trong cài đặt dự án. Nếu bạn đi đến thuộc tính dự án của bạn, bạn sẽ thấy một tab Hợp đồng mã. Trên tab, chọn chế độ bạn đang xây dựng (Debug | Release | Both) và sau đó bật tính năng Hợp đồng mã bằng cách chọn các hộp kiểm thích hợp.

Tôi đã thấy cảnh báo rằng bạn nêu chi tiết khi Hợp đồng mã không được đặt thành Build.

Nếu bạn không thấy tab Hợp đồng mã, thì bạn có thể cần cài đặt Hợp đồng mã trên máy của mình. Thực hiện việc này bằng cách tải xuống và cài đặt trình cài đặt từ here.

4

Trình biên dịch có điều kiện được điều khiển từ định nghĩa tiền xử lý biên dịch. Đây là phương pháp tương tự được sử dụng cho hằng số DEBUG, mặc dù Visual Studio ẩn định nghĩa của điều đó đằng sau hộp kiểm. Đó là một cách tiếp cận hiệu quả bởi vì khi những ký hiệu đó không được định nghĩa thì các phương thức không được gọi là gì; quan trọng là các tham số được truyền cũng không được đánh giá, vì vậy bạn có thể sử dụng các kiểm tra tương đối đắt tiền trong các hợp đồng mã của bạn mà không phải lo lắng về các kiểm tra đó làm chậm việc xây dựng bản phát hành.

Microsoft's introduction to Code Contracts nói điều này:

Hầu hết các phương thức trong lớp hợp đồng đang có điều kiện biên soạn; đó là, trình biên dịch phát ra các cuộc gọi đến các phương thức này chỉ khi bạn xác định một biểu tượng đặc biệt, CONTRACTS_FULL, bằng cách sử dụng chỉ thị #define. CONTRACTS_FULL cho phép bạn viết các hợp đồng trong mã của bạn mà không sử dụng chỉ thị #ifdef; bạn có thể sản xuất các bản dựng khác nhau, một số có hợp đồng và một số không có.

Mặc dù đây nói về việc sử dụng #define trong mã để bật đồng mã:

#define CONTRACTS_FULL 

như @NirMH nói trong các ý kiến ​​nó thường là tốt hơn để xác định nó trong những biểu tượng biên soạn điều kiện cho dự án để bạn có thể có nó trên cho một số xây dựng và tắt cho người khác.

Conditional compilation settings

Lưu ý rằng CONTRACTS_FULL là lựa chọn duy nhất mà bạn có, mặc dù nó rõ ràng được đặt tên để cho phép khả năng kiểm soát chi tiết hơn trong tương lai.

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