C # - चयनात्मक रूप से कस्टम अप्रचलित चेतावनी को दबाएं


212

Obsoleteयदि एक निश्चित विधि का उपयोग किया जाता है, तो मैं एक चेतावनी दिखाने के लिए विशेषता (जैसा कि सिर्फ साथी प्रोग्रामर द्वारा सुझाया गया है) का उपयोग कर रहा हूं ।

क्या उन SuppressMessageबिंदुओं पर कोडअनलिसिस के समान चेतावनी को दबाने का एक तरीका है जहां उपयोग उचित है?

इसके लिए काम करने की आवश्यकता है [Obsolete("Some message")]जो चेतावनी 618 उत्पन्न करता है और सादे [Obsolete]विशेषता बिना संदेश के जो चेतावनी 612 उत्पन्न करता है।

जवाबों:


257

उपयोग करें #pragma warning disable:

using System;

class Test
{
    [Obsolete("Message")]
    static void Foo(string x)
    {
    }

    static void Main(string[] args)
    {
#pragma warning disable 0618
        // This one is okay
        Foo("Good");
#pragma warning restore 0618

        // This call is bad
        Foo("Bad");
    }
}

चेतावनी को बाद में पुनर्स्थापित करें ताकि आपको "खराब" कॉल याद न हों।


1
यह केवल तभी काम करता है जब मैं अपने अप्रचलित विशेषता के साथ संदेश नहीं देता। मेरे पास इस तरह का एक संदेश है: [अप्रचलित ("यही कारण है कि इस का उपयोग नहीं किया जाना चाहिए - इसके बजाय XYZ का उपयोग करें")]]। एक बार जब मैंने मैसेज डाल दिया, तो प्रज्ञा चेतावनी 612 काम करना बंद कर देती है और मुझे इसकी परवाह किए बिना चेतावनी मिल रही है। हो सकता है कि मुझे इसके बजाय किसी अन्य त्रुटि आईडी की आवश्यकता हो?
एलेक्स

2
यह पाया गया - अप्रचलित विशेषता में एक संदेश होने पर सही चेतावनी संख्या 618 है। धन्यवाद!
एलेक्स

2
गुडो - मैंने इसका मिलान करने के लिए अपना उदाहरण समायोजित किया है।
जॉन स्कीट

6
@ जॉर्ज: आप उन्हें यहाँ पा सकते हैं ।
जोर्डो

3
पहली जगह में चेतावनी / त्रुटि संख्या प्राप्त करने के बारे में मेरा जवाब देखें ।
ऐरन थोमा

131

आशय अप्रचलित के लिए चेतावनी निष्क्रिय करने के लिए है उपयोग , के निर्माण के साथ चिह्नित है कि क्या परवाह किए बिना [Obsolete]या [Obsolete("Message")]। इसलिए CS0612 और CS0618 दोनों का उपयोग करें :

#pragma warning disable 612, 618 

...

#pragma warning restore 612, 618 

3
यह भी ध्यान दें कि यदि अप्रचलित उपयोग एक ऐसे वर्ग में है जो अप्रचलित के रूप में चिह्नित है, तो चेतावनी नहीं होती है।
Redcalx

3
क्या एक त्रुटि के रूप में अच्छी तरह से अक्षम करने का एक तरीका है, मामले Obsoleteमें एक त्रुटि के रूप में चिह्नित किया गया था?
शिम्मी वेइटहैंडलर

2
@ शमी: यदि यह एक त्रुटि के रूप में चिह्नित है, तो आपको इसे ठीक करना होगा, त्रुटियों को दबाने का कोई तरीका नहीं है। यह एक वाक्यविन्यास समस्या हो सकती है, इसे इस साइट पर एक प्रश्न के रूप में पोस्ट करें, और आपको निश्चित रूप से एक अच्छा जवाब मिलेगा।
जोर्डो

18

यहां बताया गया है कि पहले स्थान पर चेतावनी / त्रुटि संख्या कैसे प्राप्त करें :

  1. अपने प्रोजेक्ट का पुनर्निर्माण करें।
  2. आउटपुट विंडो पर जाएं ।
  3. आप जिस चेतावनी / त्रुटि को दबाना चाहते हैं, उसकी रेखा देखें।
    उदाहरण के लिए:
    C:\Users\Username\Documents\Visual Studio 2010\Projects\Projectname\Classname.cs(203,7): warning CS0162: Unreachable code detected
  4. " " के बाद संख्या भाग की प्रतिलिपि बनाएँ CS
  5. फिर जॉन स्कीट ने कहा कि आगे बढ़ें ।

(बेहतर हमेशा के रूप में जॉन स्कीट कहते हैं आगे बढ़ें ...)


9

आप #pragmaचेतावनी को अक्षम करने के निर्देश की तलाश कर रहे हैं

अनिवार्य रूप से आप .cs फ़ाइल में कॉल साइट के ऊपर निम्न कमांड जोड़ते हैं।

#pragma warning disable 612
SomeMethodCall

612 अप्रचलित तरीकों को कॉल करने के लिए त्रुटि संदेश आईडी है


यह केवल तभी काम करता है जब मैं अपने अप्रचलित विशेषता के साथ संदेश नहीं देता। मेरे पास इस तरह का एक संदेश है: [अप्रचलित ("यही कारण है कि इस का उपयोग नहीं किया जाना चाहिए - इसके बजाय XYZ का उपयोग करें")]]। एक बार जब मैंने मैसेज डाल दिया, तो प्रज्ञा चेतावनी 612 काम करना बंद कर देती है और मुझे इसकी परवाह किए बिना चेतावनी मिल रही है। हो सकता है कि मुझे इसके बजाय किसी अन्य त्रुटि आईडी की आवश्यकता हो?
एलेक्स

2
यह पाया गया - अप्रचलित विशेषता में एक संदेश होने पर सही चेतावनी संख्या 618 है।
एलेक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.