問題タブ [fxcop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - close メソッドで dispose パターンを正しく実装する方法 (CA1063)
フレームワーク設計ガイドライン (第 2 版、327 ページ) には次のように書かれています。
close がその地域の標準用語である場合は
Close()
、 に加えてmethod を提供することを検討してください。Dispose()
その際、Close の実装を同一にし、メソッドを明示的に
Dispose
実装することを検討することが重要です。IDisposable.Dispose
したがって、提供された例に従って、次のクラスを取得しました。
FxCop はそれを好まないようです:
CA1816 : Microsoft.Usage: 'SomeClass.Close()' は、'GC.SuppressFinalize(object)' を呼び出します。このメソッドは、通常、'IDisposable.Dispose' の実装内でのみ呼び出されます。詳細については、IDisposable パターンを参照してください。
CA1816 : Microsoft.Usage: 'SomeClass.IDisposable.Dispose()' を変更して、'GC.SuppressFinalize(object)' を呼び出します。これにより、オブジェクトが破棄されてスコープから外れると、オブジェクトの不要なファイナライズが防止されます。
CA1063 : Microsoft.Design : Dispose(true) を呼び出すように 'SomeClass.IDisposable.Dispose()' を変更し、現在のオブジェクト インスタンス (Visual Basic では 'this' または 'Me') で GC.SuppressFinalize を呼び出してから、戻り値。
CA1063 : Microsoft.Design : 'SomeClass.IDisposable.Dispose()' の名前を 'Dispose' に変更し、パブリックとして宣言され、シールされていることを確認してください。
- close メソッドを使用して dispose パターンを正しく実装するにはどうすればよいですか?
-また-
- 警告を抑制するにはどうすればよいですか?
私は試した
しかし、FxCop 1.36 はまだそれらを報告します。
編集: 提案されているように変更すると、この警告以外はすべてなくなります:
CA1063 : Microsoft.Design : 'SomeClass.IDisposable.Dispose()' の名前を 'Dispose' に変更し、パブリックとして宣言され、シールされていることを確認してください。
編集 2 : CODE_ANALYSIS は確かにありませんでした。ありがとう。
.net - メソッド呼び出しを防止するコード分析 (FxCop) ルールの記述方法
GC.WaitForFullGCComplete() や Application.DoEvents() などの特定のフレームワーク呼び出しを防ぐために、vs2008 用のコード分析ツールを作成するにはどうすればよいですか?
カスタム ルールで VisitMethodCall をオーバーライドしようとしましたが、Microsoft.FxCop.Sdk.MethodCall パラメーターに実際に何が含まれているかわかりません。ウェブ上で例が見つかりませんでした。
誰かが私を正しい方向に向けることができますか?
legacy - レガシーコードでFxCopをどのように始めますか?
FxCopをレガシーコードに導入した経験のある人はいますか?誰かがルールに違反するコードを導入した場合、ビルドを失敗させたいと思います。しかし、レガシーコードには9000を超える違反があるため、当面はこれは不可能です。
私が知っているエラーを抑制する唯一の方法はSuppressMessage属性を使用することですが、これはメソッドとGeneratedCodeAttributeでのみ機能します。この最後のものは、クラスと名前空間に使用できますが(正しく思い出せば)、生成されていないコードには使用しないでください(ここを参照)。
現在、違反を削除するために毎日時間がかかりますが、ビルドが失敗しないため、新しい違反が導入され続けています。
何か案は?
fxcop - FxCop がフィールドをデフォルト値に初期化することが悪いと考えるのはなぜですか?
デフォルトのデフォルト値をフィールドに割り当てる場合 (ここでは bool に false)、FxCop は次のように言います。
今、私はそのコードがいくらかの冗長性を導入している、int a = 0
または導入していることを知っていますbool ok = false
が、私の意見では、私の教師が正当に主張した非常に優れたコード実践のように思えます。
パフォーマンスの低下が非常に小さいだけでなく、さらに重要なことは、デフォルトに依存することは、デフォルトに付属するすべてのデータ型で、コードの一部を使用する各プログラマーの知識に依存することです。(日付時刻?)
真剣に、私はこれは非常に奇妙だと思います: あまりにも明白な間違いからあなたを守るはずのまさにそのプログラムが、パフォーマンスをいくらか向上させるためだけに、ここでそれを作ることを提案しています? (ここでは、一度だけ実行される初期化コードについて話しているのです! それだけ気にするプログラマーは、もちろん初期化を省略できます (おそらく C またはアセンブラーを使用する必要があります :-) )。
FxCop はここで明らかな間違いを犯していますか?
2 つの更新:
これは私の意見ではなく、大学(ベルギー)で教えられたことです。私は論拠アドベレカンディアムを使用したいわけで はありませんが、それが私の意見だけではないことを示すためです. そしてそれに関して:
申し訳ありませんが、これを見つけました:
.net - パラメータの命名:ファイル名またはファイル名?
ネーミングは文法的に正しいようにしています*。私はいつもfilename
の代わりに使用しましfileName
た。Java規則もこれを使用しているようですが、FxCopはを優先しfileName
ます。
それについてウィキペディアで議論があります。読めば読むほど、自分が正しいと感じます(これはごく普通のことです!:))。誰かが決定的な答えを持っていますか、それともこれは単に主観的なものですか?
*この投稿に文法エラーがないことを願っています!
c# - FxCop ルールは null 値と比較しない
これを行うfxcopのルールを作成しようとしています:
特定のクラスが null と比較された場合、エラーになります。
可能だと思いますか?
探していた型を見つけることができたが、値を見つける方法がわかりませんでした。
私はそのコードを持っていることを知っていますが、どこに行くべきかわかりません..
.net - ネーミング:価格表と価格表
「PriceList」と「Pricelist」のどちらが正しいですか?
FxCopによると:CA1702:Microsoft.Naming:タイプ名「PriceList」の複合語「PriceList」は個別の用語として存在します。使用法が1語であることが意図されている場合は、「Pricelist」のように大文字と小文字を区別してください。
編集:これは、タイトル、開始日/終了日などのオブジェクトです。
c# - FxCopルールを渡すようにイベントハンドラーを宣言する方法、特に送信者とeを含める方法は?
FxCopは、私が持っているイベントハンドラー宣言について不平を言っています。警告を数回読んだにもかかわらず、コードの何が問題になっているのかわかりません。
ユーザーコントロールのコード
コントロールを使用するページ内のコード
しかし、FxCopは次のように述べています。
慣例により、.NETイベントには、イベント送信者とイベントデータを指定する2つのパラメーターがあります。イベントハンドラの署名は、次の形式に従う必要があります:void MyEventHandler(object sender、EventArgs e)。より具体的なタイプを使用できる場合でも、「sender」パラメーターは常にSystem.Objectタイプです。'e'パラメータは常にSystem.EventArgsタイプです。イベントデータを提供しないイベントは、System.EventHandlerデリゲート型を使用する必要があります。イベントハンドラはvoidを返すため、各イベントを複数のターゲットメソッドに送信できます。ターゲットから返された値は、最初の呼び出し後に失われます。
c# - C#コード分析は保護された静的s_Fooを嫌います(CA1709、CA1707)
私は通常、フィールドの前とメンバーのm_
前にを追加します。private
s_
static
次のようなコードで
VS2008のコード分析によって次の警告が表示されます。
CA1709
:Microsoft.Naming:メンバー名「Bar.s_Random」の「s」の大文字と小文字を「S」に変更して修正します。CA1707
:Microsoft.Naming:メンバー名'Bar.s_Random'から下線を削除します。
この問題を解決するにはどうすればよいですか?単に削除する必要がありs_
ますか?または、この警告のグローバル抑制を追加しますか?
編集:私の会社にはコーディング標準がないので、コード用にそれらを定義するのは私次第です。(ええ、私は知っています...)
一般的に削除する必要があると思わs_
れる場合は、公式の情報源を提供していただければ幸いです。