2017-06-14 5 views
7

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

मेरे पास है:

#if DEBUG 
using MyAssembly; 
#endif 

बेशक MyAssembly परियोजना द्वारा संदर्भित की जा रही है। मैं MyAssembly.dll को रिलीज़ मोड पर नहीं भेजना चाहता हूं। क्या यह हासिल किया जा सकता है? इस संबंध में सशर्त ("DEBUG") सहायता का उपयोग करेंगे?

+2

'उपयोग के निर्देश' असेंबली के मामले में कुछ भी नहीं करते हैं - वे केवल नामस्थान के बारे में हैं। आप असेंबली संदर्भ को अपनी प्रोजेक्ट फ़ाइल में सशर्त बनाना चाहते हैं ... यद्यपि रिलीज मोड में असेंबली में कोड * कोड * को संदर्भित नहीं करता है, फिर भी सी # कंपाइलर संदर्भ का उपयोग नहीं करेगा, जहां तक ​​मैं ' मुझे पता है। (आपको हालांकि जांचना चाहिए - और मैं इसे सत्यापित करने के लिए संदर्भ को सशर्त बनाना चाहता हूं।) –

+0

धन्यवाद! प्रतिक्रिया प्रतिक्रिया जॉन! – Bati

उत्तर

8

संदर्भ जो आवश्यक नहीं हैं आमतौर पर संकलक द्वारा स्वचालित रूप से हटा दिए जाते हैं, हालांकि: पर Condition को शामिल करने के लिए आप csproj को बदलकर अधिक स्पष्ट हो सकते हैं। की तरह कुछ:

<PropertyGroup Condition="'$(Configuration)' == 'Debug'"> 
    <Reference Include="YourReference" /> 
</PropertyGroup> 

(यह भी हो सकता है एक <PackageReference> आदि)

+0

मार्क, जब आप कहते हैं कि "संदर्भ आमतौर पर हटा दिए जाते हैं" का अर्थ क्या है - यदि मेरा कोड #if DEBUG के अंतर्गत है, तो यह कोड रिलीज़ में नहीं चलेगा। लेकिन विधानसभा अभी भी तैनात की जा रही है। मैं अभी भी आपके वाक्यविन्यास की कोशिश कर रहा हूं .. कुछ त्रुटियां प्राप्त कर रहा हूं .. – Bati

+0

@ बाटी आपको आईएल की जांच करने की आवश्यकता होगी, लेकिन वास्तविक संदर्भ हटा दिया जाना चाहिए; हालांकि, आपको तैनाती कॉन्फ़िगरेशन की जांच करने की भी आवश्यकता होगी, क्योंकि आप उन चीजों को तैनात कर सकते हैं जो संदर्भ नहीं हैं। वास्तविक फ़ाइलों के बिना और अधिक कहना असंभव है। –

+0

संदर्भ नोड में शर्त जोड़ना इस तरह की चाल है: <संदर्भ शामिल = "MyAssembly", संस्करण = 2017.1.0.0, संस्कृति = तटस्थ, प्रोसेसर आर्किटेक्चर = एमएसआईएल "हालत =" '$ (कॉन्फ़िगरेशन)' == 'डीबग ''> – Bati

5

यह एक #if DEBUG अनुभाग में एक using निर्देश डाल करने के लिए बिल्कुल ठीक है, और यह कि निर्देश जब डिबग के लिए संकलित निकाल देंगे।

हालांकि, यह कहानी का एकमात्र हिस्सा है; यह आपके उद्देश्य को अपने आप पूरा नहीं करेगा। विजुअल स्टूडियो में सॉल्यूशन एक्सप्लोरर में संदर्भ अनुभाग भी हैं। आपको असेंबली के संदर्भ को भी हटाने की आवश्यकता होगी, या जब भी आप निर्माण करेंगे तब भी इसमें शामिल किया जाएगा।

मुझे विजुअल स्टूडियो उपयोगकर्ता इंटरफ़ेस में कुछ भी याद नहीं है जो आपको ऐसा करने देगा, लेकिन मुझे उम्मीद है कि यदि आप मैन्युअल रूप से प्रोजेक्ट फ़ाइल को संपादित करते हैं तो यह संभव होना चाहिए (यह सिर्फ एक MSBuild फ़ाइल है)। व्यक्तिगत रूप से, मैं उन चीजों से बचने के लिए बहुत मेहनत करता हूं जिनके लिए प्रोजेक्ट फ़ाइलों में मैन्युअल संपादन की आवश्यकता होती है। विजुअल स्टूडियो इन फ़ाइलों का स्वामित्व करने में सक्षम होना चाहता है, और आप विवाद पैदा कर सकते हैं, जहां आप और विजुअल स्टूडियो एक-दूसरे के परिवर्तनों को ओवरराइट करते हैं।

+0

आपके इनपुट के लिए धन्यवाद – Bati

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