2012-03-26 11 views
9

जब भी मैं एक विधि में अपना लॉगर कहता हूं, उदा।क्या मैं एक निश्चित कक्षा के लिए सभी कोड विश्लेषण संदेशों को दबा सकता हूं?

CA1303 : Microsoft.Globalization: 
Method 'Database.Connect()' passes a literal 
string as parameter 'message' of a call to 'ILogger.Debug(string)'. 
Retrieve the following string(s) from a resource table instead: 
"Connecting to database...". 

वहाँ हर बार जब मैं ILogger के एक समारोह का उपयोग इस चेतावनी को दबाने के लिए एक रास्ता है:

_logger.Debug("Connecting to database..."); 

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

+0

या, आप के बजाय एक संसाधन मेज से स्ट्रिंग मिल सकता है और फिर आप कोई चेतावनी अब और नहीं होगा? – Msonic

+0

मुझे पता है, लेकिन मैं लॉग संदेशों के लिए ऐसा नहीं करना चाहता हूं। – xsl

+0

स्ट्रिंग को एक शाब्दिक के रूप में चिह्नित करने के लिए @ के साथ उपसर्ग करें, डीबग (@ "डेटाबेस से कनेक्ट हो रहा है ...") –

उत्तर

3

न तो FxCop/VS कोड विश्लेषण और न ही CA1303 नियम इस तरह से विशेष लक्ष्यों को अनदेखा करने के लिए कॉन्फ़िगर करने योग्य हैं।

  1. उल्लंघन को रोकें व्यक्तिगत रूप से,
  2. नियम अक्षम करें, या
  3. स्थानापन्न कि जिस तरह से आप पसंद करेंगे बर्ताव करता है कि कस्टम नियम: आप मूल रूप से तीन विकल्प हैं।

मैं, आप यह महसूस करते हैं कि आप CA1303 व्यवहार को नियंत्रित करने में सक्षम होना चाहिए बात की इस तरह के लिए # 3 की ओर झुक जाते हैं, लेकिन YMMV ... इसके अलावा, यह कुछ https://connect.microsoft.com/VisualStudio पर का अनुरोध पर विचार करना है या http://visualstudio.uservoice.com/forums/121579-visual-studio

1

यदि आप जेनरेटेडोड विशेषता को कक्षा में लागू करते हैं, तो कोड विश्लेषण आपकी कक्षा का विश्लेषण नहीं करेगा।

3

मैं इस मुद्दे में भाग गया और पाया कि सबसे आसान समाधान "संदेश" से कुछ और करने के लिए मेरे लॉगिंग विधि के पैरामीटर का नाम बदलना था।

CA1303 केवल तभी ट्रिगर होगा जब प्रासंगिक पैरामीटर या प्रॉपर्टी नाम में "टेक्स्ट", "संदेश" या "कैप्शन" होता है। यदि पैरामीटर Console.Write या Console.WriteLine पर पास किया गया है, तो पैरामीटर को "मान" या "प्रारूप" भी नहीं कहा जा सकता है।

+0

धन्यवाद। जबकि मुझे लगता है कि उचित समाधान '[लोकलाइज़ेबल (झूठा)]' का उपयोग करना है, System.ComponentModel.LocalizableAttribute दुर्भाग्यवश पोर्टेबल क्लास लाइब्रेरीज़ में उपलब्ध नहीं है। तो मेरे लिए 'message' से' logMsg' के पैरामीटर नाम को बदलने के लिए इसे हल किया गया (तब मुझे केवल CA1704 दबाया गया था: पहचानकर्ताओं को लॉग इंटरफ़ेस में सही ढंग से ठीक किया गया है)। – hlovdal

13

यदि आप ILogger इंटरफ़ेस को नियंत्रित करते हैं, तो आप Localizable विशेषता को झूठी मान के साथ लीवरेज कर सकते हैं ताकि यह संकेत मिलता है कि मान स्थानीयकरण योग्य नहीं है।

उदाहरण के लिए:

void Info([Localizable(false)] string message); 
+1

बिल्कुल वांछित क्या था। एक जवाब के रूप में चिह्नित किया जाना चाहिए था। –

संबंधित मुद्दे

 संबंधित मुद्दे