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?
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ủ. –