La suppression de “n'est jamais utilisé” et “n'est jamais attribué à la section” avertissements en C#

J'ai un HTTPSystemDefinitions.cs fichier en C# du projet qui décrit les plus anciennes de windows ISAPI pour la consommation en code managé.

Cela comprend l'ensemble des Structures pertinentes à l'ISAPI pas tous ou qui sont consommées par le code. Sur la compilation de tous les membres de ces structures sont à l'origine d'un avertissement comme suit:-

De La Zone D'Alerte 'UnionSquare.ISAPI.HTTP_FILTER_PREPROC_HEADERS.SetHeader " n'est jamais affecté, et aura toujours sa valeur par défaut null

ou

Avertissement Le champ 'UnionSquare.ISAPI.HTTP_FILTER_PREPROC_HEADERS.HttpStatus " n'est jamais utilisé

Peuvent-ils être désactivé avec #pragma warning disable? Si oui, quelle serait l'erreur correspondante des numéros? Si non, est-il autre chose que je peux faire? Gardez à l'esprit, je n'ai que faire de ce fichier, il est important que je reçois voir mises en garde comme ces provenant d'autres fichiers.

Modifier

Exemple struct:-

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
}
  • Pouvez-vous montrer à la déclaration de ces champs, ou plutôt, la structure qu'ils sont dans? c'est à dire. donner un exemple.
  • Exemple ajouté.
  • Si ce sont des interop définitions, puis, normalement, vous auriez mis [StructLayout(LayoutKind.Sequential)] pour assurer la disposition de la mémoire est correcte (dans l'implémentation actuelle, il sera même sans cet attribut, mais autant que je sache, il n'est pas garanti). Si je me souviens bien, le compilateur C# détecte la présence de cet attribut et supprime automatiquement ces mises en garde qu'il sait champs doivent être là pour l'interopérabilité. (Je peux me tromper à ce sujet, donc de poster un commentaire à la place d'une réponse).
  • C'est utile info je vais étudier je préfère l'avertissement de ne pas être généré plutôt que de les supprimer.
  • +1 pour l'utilisation de StructLayout. Il semble plus propre que de supprimer les mises en garde eux-mêmes.
  • Vous avez raison! Cela s'applique toujours pour .NET Standard projets sur VS2017.