2011-06-17 24 views
9

FxCop 10 được phàn nàn về những điều sau:StyleCop/FxCop 10 - Làm thế nào để bạn chặn đúng thông điệp chỉ trên một mức không gian tên?

using XYZ.Blah; //CA1709 - "XYZ" 
using Xyz.Blah; //No complaint. 

using XylophoneSuperDuperLongFullName.Blah; //I don't want to have a long full name for my company name. 

Vấn đề là ... Tôi muốn tên công ty của tôi xuất hiện trong tất cả các chữ hoa vì XYZ là viết tắt. Phiên bản dài của tên là quá dài để trở thành một không gian tên hữu ích. Microsoft đã loại bỏ những thứ này vì từ viết tắt của họ chỉ có 2 chữ cái.

using MS.Something; //No Complaint. 
using Microsoft.SomethingElse; //No Complaint. 

Vì vậy, tôi đang xem xét thêm SuppressMessageAttribute để chặn cảnh báo này. Nhưng, tôi không chắc chắn làm thế nào để làm như vậy đúng cách để chỉ (hoặc nơi để thậm chí dính nó) để nó CHỈ ảnh hưởng đến một ví dụ này. Tôi không muốn ngăn chặn bất cứ điều gì trong không gian tên đó bởi vì tôi muốn bắt bất kỳ sai lầm nào khác mà tôi tạo ra. Tôi đã nhìn vào msdn và google tìm kiếm nhưng tôi không thể tìm thấy bất cứ điều gì cho thấy làm thế nào để cụ thể chỉ nhắm mục tiêu trường hợp này. Gần nhất tôi tìm thấy là Scope = "namespace" nhưng tôi không chắc liệu điều đó có nghĩa là nó ảnh hưởng đến tên không gian tên thực hay nếu nó ảnh hưởng đến mọi thứ WITHIN không gian tên đó.

Trả lời

14

MSDN - CA1709: Identifiers should be cased correctly:

Nó là an toàn để ngăn chặn cảnh báo này nếu bạn có ước đặt tên của riêng bạn, hoặc nếu định danh đại diện cho một tên riêng, ví dụ, tên của một công ty hoặc một công nghệ.

Bạn cũng có thể thêm các cụm từ cụ thể, từ viết tắt và từ viết tắt vào từ điển tùy chỉnh phân tích mã .Điều khoản được chỉ định trong từ điển tùy chỉnh sẽ không vi phạm quy tắc này. Để biết thêm thông tin, hãy xem Cách để: Tùy chỉnh Phân tích Mã Từ điển.


Điều đó đang được nói, nếu bạn cảm thấy hợp lý để ngăn chặn tin nhắn, nó thực sự không phải là khó khăn cả. Trong FxCop 10 nhấp chuột phải vào bất kỳ thư nào bạn muốn chặn và đi tới Sao chép dưới dạng> Tin nhắn Suppress-Message hoặc Sao chép dưới dạng> Thông báo Suppress cấp mô-đun.

Bạn nên đặt SuppressMessageAttribute s ở các vị trí thích hợp. Các thuộc tính chặn một vị trí duy nhất phải được đặt ở vị trí đó, ví dụ: phía trên phương thức, trường, thuộc tính hoặc lớp.

Trong trường hợp của bạn, không có vị trí cụ thể để đặt thuộc tính (theo mặc định nó phải sao chép trên là [module: SuppressMessage(...)]. Đây là dấu hiệu tốt cho thấy nó nằm ở đầu tệp nếu đó là mô-đun- ức chế mức độ cụ thể vào một tập tin (ví dụ, để một tài nguyên cụ thể vào một tập tin). Hoặc, và nhiều khả năng, nó thuộc về một tập tin GlobalSuppressions.cs.

using System.Diagnostics.CodeAnalysis; 

[module: SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", Justification = "Because I said so!", MessageId = "XYZ", Scope = "namespace", Target = "XYZ.Blah")] 

bạn cũng có thể rút ngắn thời CheckId thuộc tính nếu bạn muốn, nhưng nó là tốt để biết những gì CA1709 có nghĩa là.Nếu bạn không cảm thấy thích nó, điều này cũng hoạt động:

using System.Diagnostics.CodeAnalysis; 

[module: SuppressMessage("Microsoft.Naming", "CA1709", Justification = "Because I said so!", MessageId = "XYZ", Scope = "namespace", Target = "XYZ.Blah")] 

Và cuối cùng ... tất cả điều này sẽ không có hiệu quả trừ khi bạn bao gồm biểu tượng 'CODE_ANALYSIS' trong bản dựng của mình. Đi đến Thuộc tính> Xây dựng và thêm biểu tượng biên dịch có điều kiện.

+3

+1. Chúng chìa khóa ở đây, mà tôi chưa bao giờ nhận thấy trong bất kỳ tài liệu FxCop nào khác, là biểu tượng 'CODE_ANALYSIS'. Tôi không biết rằng phải được thêm vào trong VisualStudio, và không thể hiểu tại sao FxCop không bỏ qua bất cứ điều gì! – CodingWithSpike

3

Tên bỏ túi không có nghĩa là viết hoa toàn bộ trong .NET naming conventions. Ví dụ HttpResponse, vv

Từ capitalization conventions:

Vỏ bọc các từ viết tắt tùy thuộc vào độ dài của các từ viết tắt. Tất cả các từ viết tắt dài ít nhất hai ký tự. Vì mục đích của các nguyên tắc này, nếu một từ viết tắt chính xác là hai ký tự, nó được coi là một từ viết tắt ngắn. Một từ viết tắt của ba hoặc nhiều ký tự là một từ viết tắt dài.

Các nguyên tắc sau chỉ định vỏ thích hợp cho các từ viết tắt ngắn và dài. Các quy tắc vỏ định danh được ưu tiên hơn các quy tắc vỏ từ viết tắt.

Viết hoa cả hai ký tự của từ viết tắt hai ký tự, ngoại trừ từ đầu tiên của từ định danh được gắn lạc đà.

Thuộc tính có tên DBRate là một ví dụ về từ viết tắt ngắn (DB) được sử dụng làm từ đầu tiên của từ định danh được Pascal-cased. Một tham số có tên ioChannel là một ví dụ về một từ viết tắt ngắn (IO) được sử dụng như là từ đầu tiên của một định danh có vỏ lạc đà.

Chỉ viết hoa ký tự đầu tiên của từ viết tắt có ba ký tự trở lên, ngoại trừ từ đầu tiên của từ định danh được gắn lạc đà.

Một lớp có tên XmlWriter là một ví dụ về từ viết tắt dài được sử dụng làm từ đầu tiên của từ định danh được Pascal-cased. Một tham số có tên htmlReader là một ví dụ về từ viết tắt được sử dụng làm từ đầu tiên của một định danh có vỏ lạc đà.

+0

Ồ, tôi biết. Có những ngoại lệ mặc dù: "DB" chẳng hạn. Về mặt thẩm mỹ, tôi thấy nó dễ đọc hơn khi thấy 'XYZ.Blah' hơn' Xyz.Blah'. Đặc biệt đối với tên công ty viết tắt. Do đó ... tôi muốn ngăn chặn thông điệp cho trường hợp đó. :) – michael

+0

Ồ, và tôi xin lỗi. Tôi có nghĩa là "viết tắt" không viết tắt. Tên công ty của tôi được viết tắt là XYZ. Tôi sẽ sửa nó. – michael

+0

@Michael: Nó thậm chí còn xa lạ đối với * viết tắt * là tất cả các thủ đô, thành thật mà nói. Lưu ý rằng các ngoại lệ được đề cập trong tài liệu và tôi mong đợi StyleCop sẽ biết điều đó. Trong khi * bạn * có thể tìm thấy nó dễ đọc hơn để xem XYZ.Blah, tôi chắc chắn sẽ tìm thấy điều ngược lại - đang được sử dụng cho các quy ước .NET bình thường. –

0

Nếu bạn đang kiểm tra tên qua StyleCop, bạn có thể sử dụng StyleCop+ (quy tắc tùy chỉnh) có hỗ trợ danh sách viết tắt có thể định cấu hình.

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