2009-09-03 41 views
5

Tôi đang sử dụng các công cụ StyleCop và FxCop để cải thiện mã của mình nhưng tôi đã đến một nơi có hai quy tắc, một trong StyleCop và một trong FxCop loại trừ lẫn nhau. Nếu tôi sửa mã của tôi để phù hợp với quy tắc từ StyleCop thì xác thực FxCop không thành công và ngược lại.Quy tắc StyleCop và FxCop loại trừ lẫn nhau

Quy tắc đầu tiên là SA1200 từ StyleCop cho biết rằng tất cả các chỉ thị sử dụng phải được đặt bên trong không gian tên.

Tất cả chỉ thị sử dụng phải được đặt bên trong không gian tên.

Vì vậy, tôi đã làm một cái gì đó như thế này

namespace MyNamespace 
{ 
    using System; 

    ... 
} 

It was ok cho StyleCop, không còn phải cảnh báo. Bây giờ tôi chạy xác thực FxCop và nó cho tôi biết rằng CA1014 bị vi phạm:

Đánh dấu 'MyApp.dll' bằng CLSCompliant (true) vì nó hiển thị các loại hiển thị bên ngoài.

Để giải quyết này, tôi nên làm một cái gì đó như thế này:

[ClsCompliant(true)] 
namespace MyNamespace 
{ 
    ... 
} 

nhưng bây giờ tôi không thể xây dựng dự án của tôi vì ClsCompliant thuộc tính không được công nhận (vì nó là từ System namespace mà tôi bao gồm bên trong MyNamespace) . Vì vậy, nếu tôi di chuyển using System; chỉ thị bên ngoài tuyên bố MyNamespace. Điều này sẽ làm cho mã của tôi biên dịch nhưng một lần nữa nó sẽ phá vỡ các quy tắc từ StyleCop.

Có cách nào để giải quyết vấn đề này ngoại trừ việc vô hiệu hóa một trong các quy tắc trong StyleCop hoặc FxCop? Và nếu đó là không thể mà các quy tắc tôi nên vô hiệu hóa? Điều nào ít quan trọng hơn?

Trả lời

15

Sử dụng tên thuộc tính đầy đủ:

[System.CLSCompliant(true)] 
namespace MyNamespace 
{ 
    ... 
} 

BTW: nếu bạn muốn đánh dấu toàn bộ lắp ráp của bạn như CLSCompliant, đặt

[assembly: System.CLSCompliant(true)] 

trong Properties/AssemblyInfo.cs nộp

+4

Tôi nghĩ rằng hội đồng nên được đánh dấu CLSCompliant như maciejkow chỉ ra thay vì đánh dấu không gian tên tuân thủ. –

3

Đề nghị của tôi là tắt "Tất cả các chỉ thị sử dụng phải được đặt bên trong không gian tên." quy tắc trong StyleCop. Việc tuân thủ nó là không thực tế, đặc biệt là vì hầu hết các trình tạo mã (ngay cả các trình tạo mã riêng của VS) không tuân theo thực hành này.

+0

Tôi nghĩ rằng tốt hơn nên đặt StyleCop để chỉ bỏ qua các tệp đã tạo. – RaYell

+2

Có, nếu chúng được đánh dấu bằng thuộc tính thích hợp. Rất tiếc, một số trình tạo mã không đánh dấu mã được tạo. –

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