11

FxCop 10 は、次のことについて不平を言っています。

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.

問題は... XYZ は略語なので、会社名をすべて大文字で表示したいのです。名前の長いバージョンは長すぎて、有用な名前空間にはなりません。Microsoft は、頭字語が 2 文字しかないため、この種のものを回避します。

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

SuppressMessageAttributeそのため、この警告を抑制するためにa を追加することを検討していました。しかし、この1つのインスタンスにのみ影響を与えるように、適切に(またはどこに貼り付ければよいか)どのようにすればよいかわかりません。私が犯した他の間違いを見つけたいので、その名前空間内で何も抑制したくありません。私は msdn と google 検索を調べましたが、このインスタンスを具体的にターゲットにする方法を示すものは何も見つかりません。私が見つけた最も近いものは Scope = "namespace" でしたが、それが実際の名前空間に影響を与えることを意味するのか、それともその名前空間内のすべてに影響を与えるのかはわかりませんでした。

4

3 に答える 3

15

MSDN - CA1709: 識別子は正しく大文字と小文字を区別する必要があります:

独自の命名規則がある場合、または識別子が会社名や技術名などの適切な名前を表している場合は、この警告を抑制しても問題ありません。

コード分​​析カスタム辞書に特定の用語、略語、および頭字語を追加することもできます。ユーザー辞書に指定された用語は、このルールに違反しません。詳細については、「方法: コード分析ディクショナリをカスタマイズする」を参照してください。


そうは言っても、メッセージを抑制することが正当であると感じるのであれば、それはまったく難しいことではありません. FxCop 10 で、抑制したいメッセージを右クリックし、[コピー] > [抑制メッセージ] または [コピー] > [モジュールレベルの抑制メッセージ] に移動します。

SuppressMessageAttributeを適切な場所に配置する必要があります。1 つの場所を抑制する属性は、メソッド、フィールド、プロパティ、またはクラスの上など、その場所に配置する必要があります。

あなたのインスタンスでは、属性を配置する特定の場所はありません(デフォルトでは、としてコピーする必要があります[module: SuppressMessage(...)]。これは、特定のモジュールレベルの抑制である場合、ファイルの先頭に属していることを示していますファイル (たとえば、ファイルに固有のリソース) または、GlobalSuppressions.cs ファイルに属している可能性が高くなります。

using System.Diagnostics.CodeAnalysis;

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

必要に応じてプロパティを短くすることもできますがCheckId、CA1709 の意味を知っておくとよいでしょう。気に入らない場合は、これも機能します。

using System.Diagnostics.CodeAnalysis;

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

そして最後に...ビルドに「CODE_ANALYSIS」シンボルを含めない限り、これはすべて無駄になります。[プロパティ] > [ビルド] に移動し、条件付きコンパイル シンボルを追加します。

于 2011-06-17T17:53:51.533 に答える
6

アクリオニムは、 .NET命名規則ですべて大文字になることを意図したものではありません。たとえばHttpResponseなど。

キャピタライゼーションの慣習から:

頭字語の大文字と小文字は、頭字語の長さによって異なります。すべての頭字語は少なくとも2文字の長さです。これらのガイドラインの目的上、頭字語が正確に2文字である場合、それは短い頭字語と見なされます。3文字以上の頭字語は長い頭字語です。

次のガイドラインは、短い頭字語と長い頭字語の適切な大文字と小文字を指定します。識別子の大文字と小文字の規則は、頭字語の大文字と小文字の規則よりも優先されます。

キャメルケースの識別子の最初の単語を除いて、2文字の頭字語の両方の文字を大文字にしてください。

DBRateという名前のプロパティは、Pascalで大文字と小文字が区別される識別子の最初の単語として使用される短い頭字語(DB)の例です。ioChannelという名前のパラメーターは、キャメルケースの識別子の最初の単語として使用される短い頭字語(IO)の例です。

キャメルケースの識別子の最初の単語を除いて、頭字語の最初の文字だけを3文字以上大文字にしてください。

XmlWriterという名前のクラスは、Pascalで大文字と小文字が区別される識別子の最初の単語として使用される長い頭字語の例です。htmlReaderという名前のパラメーターは、キャメルケースの識別子の最初の単語として使用される長い頭字語の例です。

于 2011-06-17T14:00:16.253 に答える
0

StyleCopを介して名前をチェックする場合は、構成可能な略語リストをサポートするStyleCop + (カスタムルール)を使用できます。

于 2011-06-19T13:45:09.260 に答える