2010-12-27 5 views
7

मैं एक तकनीकी पुस्तकालय वर्ग विकसित कर रहा हूं जिसका उपयोग दोनों प्रकार के फ्रेमवर्क (कॉम्पैक्ट या नहीं) पर किया जा सकता है।.NET Framework और .NET कॉम्पैक्ट फ्रेमवर्क पर लाइब्रेरी को संकलित कैसे करें?

ऐसी पुस्तकालय विकसित करने का सबसे अच्छा तरीका क्या है? डिफ़ॉल्ट रूप से .NET सुविधाओं (XP एम्बेडेड के लिए) का उपयोग करके और Windows CE (CF.NET का उपयोग करके) का उपयोग करते समय प्रतिबंध करते हैं?

धन्यवाद।

उत्तर

4

मैं आमतौर पर playform प्रति अलग DLLs होने से इस दृष्टिकोण है, तो के लिए चौराहे ज्यादा है मैं अक्सर उपलब्ध मंच सुविधाओं का उपयोग कर सकते हैं जब संभव (न तो है एक सख्त सबसेट/सुपरसेट, और लक्ष्य यदि आप बीट प्रदर्शन आदि चाहते हैं तो सीमित)।

अधिकांश विशेषताएं सामान्य हैं, इसलिए #if कोड (फीचर-विशिष्ट बिल्ड प्रतीकों के साथ) की मात्रा अक्सर न्यूनतम होती है।

प्रोजेक्ट फ़ाइलों को जोड़ने में भूलने के साथ समस्याओं से बचने के लिए, मैं csproj में एक रिकर्सिव वाइल्डकार्ड का उपयोग करता हूं, इसलिए सभी .cs फ़ाइलों को स्वचालित रूप से शामिल किया जाता है।

+0

इसका मतलब है कि आपके पास दो अलग-अलग परियोजनाएं हैं (एक .NET और एक CF.NET), दोनों एक ही स्रोत फ़ाइल सहित, लेकिन केवल प्रोजेक्ट प्रकार बदल रहा है? तो, जब आप एक प्रोजेक्ट को संशोधित करते हैं, तो दोनों स्वचालित रूप से संशोधित हो जाएंगे? –

+0

@ अर्नुद हां, बिल्कुल यही। –

+0

स्पष्टीकरण के लिए धन्यवाद :), मैं डिवाइस और बैटरी प्रबंधन की वजह से अनिवार्य रूप से दोनों ढांचे को अलग कर दूंगा ... (.NET में सीईएफ।नेट) –

1

प्रीप्रोसेसर निर्देशों का उपयोग करने पर विचार करें।

आप सामान्य .NET और CF के लिए एक ही lib के 2 संस्करण बना सकते हैं।

तरह:

#if (!COMPACT_FRAMEWORK) 
      // some code only for general .NET 
#endif 
+0

हां लेकिन डिफ़ॉल्ट रूप से, यह प्रोजेक्ट एक विंडोज प्रोजेक्ट (.NET FW) या स्मार्ट डिवाइस प्रोजेक्ट (CF.NET FW) होना चाहिए? –

+0

यह "कक्षा पुस्तकालय" होना चाहिए। – Incognito

+0

हां, लेकिन जब आप पहली बार प्रोजेक्ट प्रकार चुनते हैं तो आप (स्मार्ट या विंडोज एक) का उपयोग करेंगे। ;) –

2

मुझे लगता है कि .NET और .NET CF कोड अड्डों के बीच लाइब्रेरी कक्षाओं को साझा करने के दो दृष्टिकोण हैं।

कोड समान

अक्सर पुस्तकालयों जैसे हो सकते हैं, खासकर यदि वे बुनियादी पुस्तकालय हैं कि गणना, या व्यापार वर्गों है कि समान हैं कर रहे हैं। गैर-यूआई पुस्तकालयों के लिए यह अक्सर ऐसा होता है क्योंकि .NET CF ज्यादातर .NET का उप-समूह है।

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

कोड बहुत समान है, लेकिन विभिन्न

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

+0

मेरे मामले में, यह एक तकनीकी लाइब्रेरी (छोटा ढांचा) है जो सभी उपकरणों के एपीआई को चालू करना चाहिए। लेकिन इन सभी उपकरणों में एक ही ओएस संस्करण नहीं है (कुछ WinCE पर हैं, WinMobile पर अन्य, एक्सपी एम्बेडेड पर अन्य) और कुछ मामलों में बैटरी प्रबंधन अलग है, इसलिए मैंने सवाल पूछा है। केवल चीजें जो बदलती हैं वह डिवाइस की पावर स्थिति की जांच करने का तरीका है, इसलिए, आपके लिए सबसे अच्छा समाधान क्या होगा? जवाब के लिए धन्यवाद। –

+0

सबसे पहले, ओएस संस्करण से कोई फर्क नहीं पड़ता क्योंकि .NET इसे अलग करता है, इसलिए सभी मूलभूत सामग्री काम करेंगे। मैं शायद सीई 5.0 डब्ल्यू के लिए सीई/डब्ल्यूएम के लिए एक असेंबली का निर्माण करूंगा, और दूसरा एक्सपी एम्बेडेड के लिए। फिर कोड साझा करें और ifdefs कोई अंतर है। – skeeve

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