60 votes

Comment ignorer l'avertissement du compilateur lors de l'utilisation de l'attribut Obsolete sur une classe utilisée avec un attribut KnownType ?

Nous essayons donc de déprécier certaines de nos classes existantes, et nous avons commencé à les marquer comme obsolètes avec l'attribut ObsoleteAttribute afin qu'elles cessent d'être utilisées. Le fait que l'utilisation de l'attribut KnownType avec un type qui est marqué avec l'attribut Obsolete et qui provoque un avertissement du compilateur est attendu. Cependant, dans notre projet, les avertissements sont traités comme des erreurs et il n'est pas possible d'ignorer l'avertissement. Existe-t-il une directive du compilateur permettant de supprimer cet avertissement ?

L'utilisation suivante provoque un avertissement du compilateur :

///ProductTemplateDataSet is marked with the Obsolete attribute
[KnownType(typeof(ProductTemplateDataSet))]
public class EntityCollectionBase : System.Data.DataSet
{
}

Edit : Je comprends l'utilisation des directives du compilateur pour ignorer les erreurs, mais cet avertissement du compilateur n'a pas de numéro.

0 votes

121voto

Jordão Points 29221

Utilisez cette option pour désactiver les avertissements correspondants juste avant la ligne incriminée :

#pragma warning disable 612, 618

Et réactivez les avertissements après cela :

#pragma warning restore 612, 618

Curieusement, il y a 2 avertissements liés à cela : CS0612 y CS0618 - l'un est pour [Obsolete] et l'autre pour [Obsolete("Message")] . Allez savoir...

4 votes

Si vous voulez éviter d'ajouter #pragma à votre code, vous pouvez consulter ma réponse ci-dessous.

65voto

MetaFight Points 513

Si vous voulez éviter d'avoir à poivrer votre code avec des #prgrama essayez ceci :
Dans votre fichier csproj, trouvez l'élément approprié de la section PropertyGroup et ajouter

<WarningsNotAsErrors>612,618</WarningsNotAsErrors>

Voici un extrait d'un de mes fichiers de projet :

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>TRACE;DEBUG</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <WarningsNotAsErrors>612,618</WarningsNotAsErrors>
    <NoWarn>
    </NoWarn>
    <WarningsAsErrors>
    </WarningsAsErrors>
</PropertyGroup>

J'ai utilisé cette méthode avec succès pour des projets VS2010, VS2012 et VS2013.

4 votes

En fait, le <NoWarn /> Le bloc est là où vous voulez le mettre. En spécifiant cette information dans le <WarningsNotAsErrors /> ne fera que rétrograder les erreurs en avertissements normaux (vous avez <TreatWarningsAsErrors /> mis à true).

9 votes

Je ne pense pas que cacher l'avertissement soit l'intention de l'OP. Après tout, ils ajoutent délibérément l'avertissement du Obsolete à leur propre code. Le problème est qu'ils ont également traiter les avertissements comme des erreurs activé, ce qui les empêche de construire leur projet. La solution que j'ai élaborée leur permet de préserver l'identité de l'utilisateur. Obsolete avertissement y construire leur projet.

1 votes

Ajoutez ces avertissements à la case "Supprimer les avertissements" dans les paramètres du projet (Projet -> Propriétés -> Construction) pour les masquer de la liste des avertissements.

5voto

MattC Points 2578

Pourriez-vous simplement utiliser un #pragma en indiquant le numéro d'alerte approprié ?

#pragma warning (Référence C#)

EDITAR

J'ai trouvé ça mais c'est un peu tard C# - Suppression sélective des avertissements personnalisés d'obsolescence

0 votes

D'accord, mais quel numéro d'alerte ? Ce n'est pas indiqué dans la sortie du compilateur.

0 votes

Vous pourriez y aller à fond : "Lorsqu'aucun numéro d'avertissement n'est spécifié, la désactivation désactive tous les avertissements et la restauration active tous les avertissements".

0 votes

"Avertissement comme erreur : 'classblah' est obsolète'. D:\Development\blah.cs '" ligne numéro 14 et colonne 12.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X