C#プロジェクトにHTTPSystemDefinitions.csファイルがあります。これは基本的に、マネージコードで使用するための古いWindows ISAPIを記述しています。
これには、ISAPIに関連するすべての構造や、コードによって消費される構造の完全なセットが含まれます。コンパイル時に、これらの構造体のすべてのフィールドメンバーが次のような警告を引き起こしています。
警告フィールド「UnionSquare.ISAPI.HTTP_FILTER_PREPROC_HEADERS.SetHeader」は決して割り当てられず、常にデフォルト値がnullになります
または
警告「UnionSquare.ISAPI.HTTP_FILTER_PREPROC_HEADERS.HttpStatus」フィールドは使用されません
これらは#pragma warning disable
で無効にできますか?もしそうなら、対応するエラー番号は何でしょうか?そうでない場合、私にできることは他にありますか?私はこのファイルに対してこれを行うだけであることに注意してください。他のファイルからこれらのような警告が表示されることが重要です。
編集
構造体の例:-
struct HTTP_FILTER_PREPROC_HEADERS
{
//
// For SF_NOTIFY_PREPROC_HEADERS, retrieves the specified header value.
// Header names should include the trailing ':'. The special values
// 'method', 'url' and 'version' can be used to retrieve the individual
// portions of the request line
//
internal GetHeaderDelegate GetHeader;
internal SetHeaderDelegate SetHeader;
internal AddHeaderDelegate AddHeader;
UInt32 HttpStatus; // New in 4.0, status for SEND_RESPONSE
UInt32 dwReserved; // New in 4.0
}
はい、これらは抑制できます。
通常、私は警告を抑制することに反対しますが、この場合、相互運用に使用される構造体は、使用するつもりがない(または使用できない)にもかかわらず、いくつかのフィールドが存在することを絶対に必要とするため、この場合、それは正当化されるべきだと思います。
通常、これらの2つの警告を抑制するには、問題のあるコードを修正します。最初の( "... is never used")は、通常、以前のバージョンのコードからの残り物のコード臭です。おそらくコードは削除されましたが、フィールドは残っていました。
2番目は、通常、誤って使用されたフィールドのコード臭です。たとえば、プロパティの新しい値をプロパティ自体に誤って書き戻し、バッキングフィールドに書き込めないことがあります。
「フィールドXYZは使用されない」の警告を抑制するには、次のようにします。
#pragma warning disable 0169
... field declaration
#pragma warning restore 0169
「Field XYZは決して割り当てられず、常にデフォルト値XX」を表示するための警告を抑制するには、次のようにします。
#pragma warning disable 0649
... field declaration
#pragma warning restore 0649
このような警告番号を自分で見つけるには(つまり、0169と0649を使用することをどのように知りましたか)、次のようにします。
関連するメッセージから4桁の警告コードをコピーします。これは次のようになります。
C:\ Dev\VS.NET\ConsoleApplication19\ConsoleApplication19\Program.cs(10,28):警告CS0649:フィールド「ConsoleApplication19.Program.dwReserved」は決して割り当てられず、常にデフォルト値0になります
警告: @ Jon Hanna によるコメントによると、おそらくこれについてはいくつかの警告があります。この質問と回答。
#pragma warning disable XYZK
、そのファイルの残りの部分の警告を無効にします、または少なくとも対応する#pragma warning restore XYZK
見つかった。これらの警告を無効にする行の数を最小限にします。上記のパターンは、1行だけの警告を無効にします。これらの警告を修正する別の「解決策」は、構造体public
を作成することです。コンパイラはフィールドがアセンブリの外部で使用されている(割り当てられている)かどうかをコンパイラが認識できないため、警告は発行されません。
つまり、「相互運用」コンポーネントは通常パブリックではなく、internal
またはprivate
である必要があります。
VSにSystem.ComponentModel.INotifyPropertyChanged
の実装スケルトンを生成させ、イベントはCS0067警告をトリガーするフィールドとして実装されました。
受け入れられた答えで与えられた解決策の代替としてフィールドをプロパティに変換し、警告が消えました。
これは、プロパティ宣言の構文シュガーがフィールドにコンパイルされ、フィールドを参照するゲッターおよび/またはセッターメソッド(この場合は追加/削除)にコンパイルされるため、これは理にかなっています。これはコンパイラを満たし、警告は発生しません。
struct HTTP_FILTER_PREPROC_HEADERS
{
//
// For SF_NOTIFY_PREPROC_HEADERS, retrieves the specified header value.
// Header names should include the trailing ':'. The special values
// 'method', 'url' and 'version' can be used to retrieve the individual
// portions of the request line
//
internal GetHeaderDelegate GetHeader {get;set;}
internal SetHeaderDelegate SetHeader { get; set; }
internal AddHeaderDelegate AddHeader { get; set; }
UInt32 HttpStatus { get; set; } // New in 4.0, status for SEND_RESPONSE
UInt32 dwReserved { get; set; } // New in 4.0
}
C/C++ユーザーには(void)var;
未使用の変数の警告を抑制します。ビット演算子を使用して、C#で未使用の変数の警告を抑制することもできます。
uint test1 = 12345;
test1 |= 0; // test1 is still 12345
bool test2 = true;
test2 &= false; // test2 is now false
VS2010 C#4.0およびMono 2.10コンパイラでは、両方の式が未使用の変数警告を生成しません。