विज़ुअल स्टूडियो में "सभी चेतावनियों को त्रुटियों के अलावा समझें ..."


124

दृश्य स्टूडियो में, मैं अपने कोड को संकलित करने से रोकने के लिए "त्रुटियों के रूप में चेतावनी का विकल्प" विकल्प चुन सकता हूं यदि कोई चेतावनी है। हमारी टीम इस विकल्प का उपयोग करती है, लेकिन दो चेतावनी हैं जिन्हें हम चेतावनी के रूप में रखना चाहते हैं।

चेतावनियों को दबाने का एक विकल्प है, लेकिन हम उन्हें चेतावनी के रूप में दिखाना चाहते हैं, इसलिए यह काम नहीं करेगा।

ऐसा प्रतीत होता है कि हम जो व्यवहार चाहते हैं उसे प्राप्त करने का एकमात्र तरीका है कि हम चेतावनी के रूप में माने जाने वाले दो को छोड़कर प्रत्येक C # चेतावनी संख्या की सूची "विशिष्ट चेतावनियों" पाठ बॉक्स में दर्ज करें।

रखरखाव सिरदर्द के अलावा, इस दृष्टिकोण का सबसे बड़ा नुकसान यह है कि कुछ चेतावनियों में नंबर नहीं होते हैं, इसलिए उन्हें स्पष्ट रूप से संदर्भित नहीं किया जा सकता है। उदाहरण के लिए, "इस संदर्भ को हल नहीं कर सका। विधानसभा 'डेटा ....' का पता नहीं लगा सका।"

क्या किसी को ऐसा करने का एक बेहतर तरीका पता है?


उन लोगों के लिए स्पष्ट करना जो तुरंत नहीं देखते कि यह क्यों उपयोगी है। इस बारे में सोचें कि अधिकांश चेतावनियाँ कैसे काम करती हैं। वे आपको बताते हैं कि आपके द्वारा लिखे गए कोड में कुछ बंद है। उन्हें ठीक करने में लगभग 10 सेकंड का समय लगता है, और इससे कोड बेस क्लीनर रहता है।

"अप्रचलित" चेतावनी इससे बहुत अलग है। कभी-कभी इसे ठीक करने का मतलब सिर्फ एक नई विधि हस्ताक्षर का उपभोग करना है। लेकिन अगर एक पूरी कक्षा अप्रचलित है, और आपके पास इसका उपयोग कोड की सैकड़ों हजारों लाइनों के माध्यम से बिखरा हुआ है, तो इसे ठीक करने में सप्ताह या उससे अधिक लग सकते हैं। आप नहीं चाहते कि निर्माण को लंबे समय तक तोड़ा जाए, लेकिन आप निश्चित रूप से इसके बारे में एक चेतावनी देखना चाहते हैं। यह सिर्फ एक काल्पनिक मामला नहीं है - यह हमारे साथ हुआ है।

शाब्दिक "# चेतावनी" चेतावनी भी अद्वितीय है। मैं अक्सर इसे चेक करना चाहता हूं , लेकिन मैं बिल्ड को तोड़ना नहीं चाहता।


क्या आप कृपया अपनी बड़ी संख्या में स्थान डाल सकते हैं? इसने रैपिंग लाइन को भर दिया है।
रे

गावद मैं जटिल नियमों से नफरत करता हूं जो लोगों द्वारा बनाए जाते हैं, कुछ विशिष्ट व्यक्ति के अहंकार को शांत करने के लिए अक्सर।
जॉन लिमजप

21
मैं अप्रचलित चेतावनी के बारे में उनकी बात देखता हूं, यह मनमाना नहीं है।
एड।

मेरे अनुभव में आपके निर्माण में एक भी चेतावनी देने की अनुमति है जैसे कि पहला एसक्यूएन / वेट जोड़ना। जल्द ही उनमें से दसवां हिस्सा होगा। सभी सेटअपों में मुझे याद है कि एक डेवलपर वीएस में त्रुटि सूची विंडो में कम से कम 10 चेतावनियां देख सकता है। मैं शर्त लगा सकता हूं कि जैसा कि आपके पास 5 से अधिक चेतावनियाँ हैं, एक टीम में अधिकांश देव एक नए स्थान पर नहीं जा पाएंगे - आप सेटअप में इसका मतलब है कि वे चेतावनी को स्पॉट नहीं करेंगे कि विधि अप्रचलित है जो कि ख़राब होती है यह चेतावनी देने का पूरा उद्देश्य :) इस नील के साथ आपका अनुभव क्या है?
23

@ मायू, यह एक पहेली है। कई बार, मैंने चेतावनी को लंबे समय तक अनदेखा करते देखा है। लेकिन अंत में, या तो आप चेतावनी दिखाते हैं या आप कुछ भी नहीं दिखाते हैं। यदि आप चेतावनी दिखा रहे हैं, तो कम से कम किसी को इससे उपयोगी कुछ सीखने का मौका है। यदि आप अधिकांश चेतावनियों को त्रुटियों के रूप में मानते हैं, तो जो कुछ बचे हैं वे अधिक ध्यान दे सकते हैं।
नील

जवाबों:


155

आप WarningsNotAsErrorsप्रोजेक्ट फ़ाइल में -tag जोड़ सकते हैं ।

<PropertyGroup>
    ...
    ...
    <WarningsNotAsErrors>618,1030,1701,1702</WarningsNotAsErrors>
</PropertyGroup>

नोट: 612और 618दोनों अप्रचलित के बारे में चेतावनी दे रहे हैं, अंतर नहीं जानते हैं लेकिन जिस परियोजना पर मैं काम कर रहा हूं वह अप्रत्यक्ष रूप से चेतावनी 618 के साथ रिपोर्ट कर रही है।


24
612 और 618 के बीच का अंतर अप्रत्यक्ष योगदान की टिप्पणी है। टिप्पणी के बिना एक अप्रत्यक्ष योगदान 612 त्रुटि उत्पन्न करता है, और एक टिप्पणी के साथ 618 उत्पन्न करता है।
मार्को

@MarcoSpatz बिल्कुल फिर हम इलाज कर सकते हैं [Obsolete]जहां सदस्यों messageहै null, त्रुटियों के रूप में जब तक हम उन जहां जाने messageरहना चेतावनी केवल निर्धारित है। यदि errorपैरामीटर में सेट किया trueगया है ObsoleteAttribute, तो इसके बजाय एक CS0619 उत्पन्न होता है। यह काम नहीं करता है, तो लगता है messageहै null(लेकिन जो करना होगा [Obsolete(null, true)]वैसे भी?)।
जेपी स्टिग नीलसन

F # के लिए, --warnaserror-:618,1030बिल्ड-> अन्य झंडे फ़ील्ड पर उपयोग करें । यह परियोजना विकल्प एफ # परियोजनाओं के लिए अभी तक लागू नहीं है। github.com/Microsoft/visualfsharp/issues/3395
Asik

2
"WarningsNotAsErrors" जानने के लिए अच्छा है। यह मैन्युअल रूप से फ़ाइल को संपादित करने के बिना परियोजना सेटिंग्स में उपलब्ध होना चाहिए। धन्यवाद।
AFract

1
माइक्रोसॉफ्ट ने वास्तव में इसे खराब कर दिया (और 11 साल बाद, निश्चित चीजें नहीं हैं!)। परियोजना सेटिंग्स बदल जाती हैं <NoWarn>, जो ज्यादातर मामलों में हीन होती हैं और <WarningsNotAsErrors>यूआई में डालने में विफल होती हैं । कुडोस।
user2864740

13

/ वारनसेरोर / वारनसेरोर-: 618


1
आपके इनपुट के लिए धन्यवाद। भले ही वे आईडीई समस्या को हल नहीं करते हैं, ये अब तक की सबसे उपयोगी टिप्पणियाँ हैं।
नील

2
आप इसे कहाँ जोड़ते हैं?
चीच

@checho, उन स्विच को msbuild को कॉल करते समय कमांड लाइन पर जोड़ा जाएगा। हमारे उद्देश्यों के लिए, शीर्ष उत्तर अधिक उपयोगी है, क्योंकि हम जिस तरीके से msbuild कहते हैं, उसे संशोधित करने के बजाय इसे प्रोजेक्ट में सेंध लगा सकते हैं।
नील

MSBuild के साथ काम नहीं करता है 15.9.21 + g9802d43bc3: MSBUILD : error MSB1001: Unknown switch. Switch: /warnaserror-:618
पॉल बी।

3

या अधिक विशेष रूप से, आपके मामले में:

/ योद्धाओं / योद्धाओं-: 612,1030,1701,1702

इसे आपकी अल्पविराम से अलग की गई सूची के अलावा सभी चेतावनियों को त्रुटियों के रूप में मानना ​​चाहिए


1

आप चेतावनी क्यों देखते रहना चाहते हैं कि आप त्रुटियों के रूप में नहीं मान रहे हैं? मैं इस बारे में उलझन में हूं कि यह वांछनीय क्यों है - या तो आप उन्हें ठीक करते हैं या आप नहीं करते हैं।

क्या दो अलग बिल्ड / सॉल्यूशन फाइल काम करते हैं - या एक स्क्रिप्ट को कॉपी करने के लिए और फिर चेतावनी / चेतावनी स्तर को संशोधित करने के लिए उपयुक्त है। ऐसा लगता है कि शायद आप संकलक के कुछ निष्पादन को स्क्वाव करना चाहते हैं, लेकिन अन्य जिन्हें आप जारी रखना चाहते हैं।

इसलिए अलग-अलग संकलक स्विच जाने के लिए एक अच्छा तरीका है। आप इसे अलग-अलग लक्ष्यों के साथ कर सकते हैं - एक लेबल डिबग या रिलीज़ और दूसरे ने चेतावनी के बारे में उपयुक्त लेबल दिया।


7
अधिकांश चेतावनियाँ मेरे कोड में एक साधारण भ्रम की वजह से होती हैं (जैसे मैंने एक चर घोषित किया जिसका मैं उपयोग नहीं करता)। एक अप्रचलित चेतावनी अक्सर किसी और के कोड में बदलाव के कारण होती है। इसे ठीक करने में कई सप्ताह लग सकते हैं। #warning एक चेतावनी है जो मुझे कोड में चाहिए (संभवतः एक दीर्घकालिक फिक्स)।
नील

4
दूसरे शब्दों में, चेतावनी है कि मैं अपना निर्माण नहीं तोड़ना चाहता। यदि #warning बिल्ड को तोड़ता है, तो मैं कभी भी एक की जांच नहीं कर सकता। यदि अप्रचलित ने बिल्ड को तोड़ दिया है, तो एक और टीम जिस पर हम निर्भर करते हैं, अनजाने में एक अप्रचलित विशेषता जोड़कर हमारी टीम के निर्माण को तोड़ सकते हैं।
नील

@ मैं आपकी कुछ दलीलों से सहमत हूं, लेकिन आपके द्वारा उपयोग किए जा रहे एक संस्करण को हटाने में अधिक समय नहीं लगता है और आप निश्चित रूप से जानना चाहते हैं कि किसी अन्य टीम ने कुछ अप्रचलित कर दिया है।
tymtam

@mayu, आपकी टिप्पणी के लिए धन्यवाद। मैं एक ऐसे संस्करण के बारे में सहमत हूं जिसका आप उपयोग नहीं करते हैं। इसलिए मैं संकलक को एक त्रुटि के रूप में मानूंगा। मैं यह भी मानता हूं कि आप जानना चाहते हैं कि कब कुछ अप्रचलित है। लेकिन अगर आपके कोड को अप्रचलित करने के लिए कुछ समय के लिए प्रतिबंधात्मक रूप से लंबा समय लगता है, तो आपके विकल्प 1 हैं) इस चेतावनी को चेतावनी 2 के रूप में मानें) अपने बिल्ड को लंबे समय तक टूटे रहने दें 3) कुछ अन्य समाधान जैसे कि चेतावनी को त्रुटियों के रूप में बंद करना। त्रुटियों के रूप में अधिकांश चेतावनियों के साथ, आपकी चेतावनियों की सूची कम रहने की संभावना है, इसलिए जब आप दिखाते हैं तो आपको नोटिस करने की अधिक संभावना होती है। आपका पसंदीदा समाधान क्या है?
नील

1
@mayu, एक अन्य टीम (चाहे एक ही कंपनी के भीतर या उसके बाहर) वैध रूप से यह संवाद करना चाह सकती है कि किसी वर्ग, विधि, अन्य घटक को कुछ समय के लिए चरणबद्ध किया जा रहा है। किसी लाइब्रेरी के उपभोक्ताओं को यह संकेत देने के लिए एक विशेषता जोड़ना एक अच्छा तरीका है। मैं ऐसा करने के लिए परेशानी के रूप में नहीं देखता। वास्तव में, विशेषता को जल्द से जल्द जोड़ना यह सुनिश्चित करने का एक अच्छा तरीका है कि अन्य भविष्य के परिवर्तनों से अवगत हों।
नील

1

मैं त्रुटियों के रूप में उपचार चेतावनी का उपयोग कर रहा हूं।

एक दुर्लभ मामलों में, जब कुछ स्वीकार्य चेतावनी दिखाई देती है (यानी एक्सएमएल क्रमांकन वर्गों पर अप्रचलित सदस्य को संदर्भित करना, या लापता प्रलेखन), तो इसे स्पष्ट रूप से #pragma अक्षमता से दबा दिया जाना चाहिए (और वैकल्पिक रूप से एक स्वच्छ कोड नहीं होने के कारण प्रदान किया जा सकता है) एक टिप्पणी के साथ)।

इस निर्देश की उपस्थिति भी पता लगाने की अनुमति देती है, जिन्होंने इस चेतावनी उल्लंघन (संस्करण नियंत्रण की "दोष" कार्रवाई द्वारा) स्वीकार कर लिया है , अगर कुछ सवाल हैं।


3
मैं इसका उपयोग भी करता हूं, हालांकि यह मेरे विवरण में वर्णित समस्याओं को हल नहीं करता है। मैं चेतावनी के रूप में व्यवहार किए गए कुछ चेतावनियों को छिपाना चाहता हूं, छिपा नहीं।
22

0

बस एक नियम क्यों नहीं कहा गया है "जो कोई भी इसके अंदर 612, 1030, 1701 या 1702 के अलावा किसी भी चेतावनी के साथ कोड में जांच करता है, उसे व्हाइटबोर्ड पर जाना होगा और एक सौ बार लिखना होगा 'मैं फिर से अस्वीकृत चेतावनियों वाले कोड की जांच नहीं करूंगा। ' "


9
सौभाग्य यह है कि ... चेतावनियों को त्रुटियों के रूप में मानना ​​समग्र कोड गुणवत्ता बढ़ाने के लिए एक बहुत ही महत्वपूर्ण कदम है और यह देवों को अपने कोड को ठीक करने के लिए मजबूर करेगा! सभी ओलों स्वचालन, शारीरिक श्रम है तो 20 वीं सदी: इश!
एंड्रियास मैग्यूसन

@AndreasMagnusson यदि केवल चेतावनियों की कमी वास्तव में कोड की गुणवत्ता को सुनिश्चित करती है ..
user2864740

2
@ user2864740: सहमत हैं, चांदी की गोलियां नहीं हैं। लेकिन यह इस आधार पर उपयोगी कुछ को खारिज करने के लिए एक बहुत ही आम गिरावट है कि यह एक चांदी की गोली नहीं है।
एंड्रियास मैग्यूसन 8


-4

ऐसा लगता है कि मूल समस्या वास्तव में त्रुटियों के रूप में आपके व्यवहार की चेतावनी का एक संयोजन है, जब वे स्पष्ट रूप से नहीं हैं, और चेक-इन की अनुमति देने वाली आपकी स्पष्ट नीति जो इसका उल्लंघन करती है। जैसा कि आप कहते हैं, आप चेतावनी के बावजूद काम जारी रखना चाहते हैं। आपने केवल कुछ चेतावनियों का उल्लेख किया है जिन्हें आप नजरअंदाज करना चाहते हैं, लेकिन क्या होगा अगर टीम के किसी अन्य व्यक्ति ने किसी अन्य प्रकार की चेतावनी का कारण बना दिया, जो आपको ठीक करने में समान रूप से लंबा लगेगा? क्या आप इसे भी अनदेखा नहीं कर पाएंगे?

तार्किक समाधान या तो 1 के लिए होगा) कोड को संकलित नहीं करने पर चेकइन को छोड़ दें (जिसका अर्थ है कि चेतावनी बनाने वालों को उन्हें ठीक करना होगा, क्योंकि वास्तव में, उन्होंने निर्माण को तोड़ दिया है), या 2) चेतावनियों को चेतावनी के रूप में मानते हैं। दो बिल्ड कॉन्फ़िगरेशन बनाएं, एक जो चेतावनी को त्रुटियों के रूप में व्यवहार करता है, जिसे नियमित रूप से चलाया जा सकता है ताकि यह सुनिश्चित किया जा सके कि कोड चेतावनी-मुक्त है, और दूसरा, जो केवल उन्हें चेतावनी के रूप में मानता है, और आपको किसी अन्य व्यक्ति द्वारा चेतावनी देने पर भी काम करने की अनुमति देता है।


1
चयनित उत्तर का उपयोग करते हुए, चेतावनी के रूप में व्यवहार किए गए चेतावनियों की सूची में जोड़ना आसान है। यह आपके प्रस्तावित समाधानों की तुलना में बहुत बेहतर काम करता है। चेतावनियां स्पष्ट रूप से त्रुटियां नहीं हैं, लेकिन अधिकांश चेतावनियों को गलत मानते हैं क्योंकि कोड का अर्थ उन चेतावनियों के साथ कभी भी चेक नहीं किया जाएगा।
22
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.