मेरे पास कुछ कोड है जो रिलीज बिल्ड और डीबग बिल्ड के बीच अलग-अलग व्यवहार करता है। यह डीबग में सही ढंग से व्यवहार करता है लेकिन रिलीज में नहीं।यह प्रोग्राम रिलीज बिल्ड में अगर ब्लॉक में प्रवेश करता है लेकिन डीबग बिल्ड में क्यों नहीं है?
मेरे पास एक ऐसा फ़ंक्शन है जो ReadOnlyCollection<MyCustomClass>
देता है।
var result = new List<MyCustomClass>();
...
var list1 = this.returnEmptyList();
var list2 = this.returnListWithOneItem();
if (list1.Count == 0 && list2.Count == 0)
{
functionOutVariable = string.Empty;
return result.AsReadOnly();
}
समस्या निवारण के प्रयोजनों मैं कोड को सरल बनाया और एक सामान्य फैशन में चर नाम दिया है के लिए, और तरीकों returnEmptyList
और returnListWithOneItem
यहां दिए गए हैं:: एक अनुभाग यह है जाहिर है
private List<string> returnEmptyList()
{
return new List<string>();
}
private List<string> returnListWithOneItem()
{
return new List<string> {"something"};
}
यह if
ब्लॉक में प्रवेश कभी नहीं करना चाहिए क्योंकि list2.Count
हमेशा 1 होना चाहिए, लेकिन जब मैं एक रिलीज के निर्माण में इस पर अमल, यह करता:
तो वहाँ स्पष्ट रूप से कुछ अनुकूलन के बाद से आप देख सकते हैं कि list1
दुर्गम है चल रहा है, और जब यह के माध्यम से आगे बढ़ लाइन 416 निष्पादित और फिर तुरंत कूद गया 421. लाइन मैं जानकारी देनी होगी कि मेरी समाधान उपयोग में सभी विधानसभाओं। नेट फ्रेमवर्क 4.6.2, और मैं विजुअल स्टूडियो 2017 संस्करण 15.3.5 चला रहा हूं।
जब मैं डीबग और इस पर अमल करने का निर्माण बदलने के लिए, यह लाइन 416, 417 निष्पादित करता है, और लाइन 418 पर यह पता चलता है list1.Count
0 और list2.Count
1 है, और इसे सही ढंग से नहींif
ब्लॉक में प्रवेश करता है।
मैं इसे पुन: उत्पन्न करने के लिए एक परीक्षण प्रोजेक्ट बनाने की कोशिश कर रहा हूं लेकिन मैं नहीं कर सकता। मैं इसके निचले भाग तक पहुंचने के लिए किसी भी तरह की तलाश में हूं। मुझे सिर्फ एक फिक्स नहीं चाहिए जो इसे दूर कर दे - मुझे यह समझने की ज़रूरत है कि मैं क्या गलत कर रहा हूं।
यह कंपाइलर में एक बग की तरह लगता है। क्या आप प्रत्येक निर्माण में संकलित आईएल पोस्ट कर सकते हैं? – SLaks
** रिलीज ** मोड में डिबगिंग समस्याग्रस्त हो सकती है: वर्तमान कथन सूचक सटीक नहीं हो सकता है और यदि आपके पास ** अनुकूलन कोड ** सक्षम है तो चर अनुकूलित हो सकते हैं। प्रोजेक्ट प्रॉपर्टी पर जाएं और ** बिल्ड ** टैब के अंतर्गत जांचें। यदि आवश्यक हो तो अक्षम करें, और आप इसे पूरा करने के बाद इसे फिर से सक्षम करना चाहेंगे। –
और बाद में आप इस फ़ंक्शन में क्या करते हैं, यदि "if" ब्लॉक दर्ज नहीं किया गया है? – Evk