विभिन्न कारणों से मुझे अक्सर कोड लिखने के लिए वांछनीय लगता है जो .NET Framework 2.0 या 3.5 के साथ संगत है या .NET कॉम्पैक्ट फ्रेमवर्क के साथ संगत है, लेकिन यह एक समस्या है कि नए .NET ढांचे में कई "छोटी" विशेषताएं हैं जो पुराने ढांचे या कॉम्पैक्ट फ्रेमवर्क में उपलब्ध नहीं हैं।नई .NET फ्रेमवर्क सुविधाओं का समर्थन करने के लिए "संगतता पैक"?
उदाहरण के लिए, मुझे लगता है कि एक्सटेंशन विधियां वास्तव में उपयोगी हैं, लेकिन संकलक इसके लिए System.Runtime.CompilerServices.ExtensionAttribute
पर निर्भर करता है। आप आसानी से इस विशेषता को परिभाषित कर सकते हैं और फिर .NET Framework 2.0 (C# 3.0+ के तहत) में एक्सटेंशन विधियों का उपयोग कर सकते हैं। इसी तरह, मैन्युअल रूप से छोटे .NET 4 प्रकारों को Tuple<T1,T2>
और Lazy<T>
परिभाषित करना बहुत मुश्किल नहीं है। वैसे, यदि आप .NET 2.0 में LINQ का उपयोग करना चाहते हैं, तो आप LinqBridge का उपयोग कर सकते हैं।
अब मान लें कि आप ExtensionAttribute
सार्वजनिक बनाते हैं ताकि आपके द्वारा लिखे गए अन्य असेंबली इसका उपयोग कर सकें। यह पहले ठीक है, लेकिन क्या होगा यदि आप एक तृतीय पक्ष लाइब्रेरी का उपयोग करना चाहते हैं, जो भी एक ही विचार था? आप उस लाइब्रेरी का संदर्भ जोड़ते हैं और अब आपके पास नाम टकराव है। उफ़।
मैंने यह भी देखा है कि कुछ नई पुस्तकालय केवल .NET 4.0 या 3.5 के लिए उपलब्ध हैं, भले ही उनके पास केवल मामूली निर्भरताएं हों जिन्हें संगतता पैक या लिंकक्रिज का उपयोग करके हल किया जा सके।
यह सुनिश्चित होगा कि पुराने .NET संस्करणों के लिए "संगतता पैक" थे, जो कि छोटे डीएलएल में इन छोटी सुविधाओं को परिभाषित करते हैं जिन्हें आप किसी भी आकार की परियोजनाओं में शामिल कर सकते हैं। क्या ऐसी किसी वस्तु का अस्तित्व है?
अद्यतन: चुप्पी के आधार पर, मुझे लगता है कि ऐसी कोई चीज़ नहीं है। यदि रुचि है तो मैं खुद को ऐसी ओएसएस लाइब्रेरी बना सकता हूं। तो मेरा नया सवाल यह है कि, छोटे .NET 4 की विशेषताएं (डब्ल्यूसीएफ/डब्ल्यूपीएफ जैसे राक्षसों के विपरीत) क्या आप याद करेंगे यदि आप .NET 2, .NET 3.5, .NETCF या Silverlight के लिए लिख रहे थे? मैं सूची से शुरू करेंगे ...
ExtensionAttribute
Func<...>
औरAction<...>
प्रतिनिधियों (.NET 2 में नहीं)- LINQ करने वाली वस्तुओं (नहीं में (.NET 2 में नहीं)। नेट 2)
Tuple<...>
(नहीं .NET में 3,5)Lazy<T>
औरLazy<T,TMetadata>
(नहीं .NET 3.5)- अभिव्यक्ति पेड़ (.NET 2 में नहीं है; .NET 3.5 में अधूरा)
- जेनिक्स वैरिएंस (.NET 2 में मौजूद है लेकिन सी # 3 और वीबी 9 से पहुंच योग्य)
Reflection.Emit
(.NETCF से अनुपलब्ध; वास्तव में एक छोटी सी सुविधा नहीं है लेकिन मुझे बहुत याद आती है)
मैं Theraot के पुस्तकालय का उपयोग कर नेट 2.0 के लिए [dotNetLiquid] (http://dotliquidmarkup.org/) को संकलित करने में सक्षम था, और उनके सभी इकाई परीक्षण सफलतापूर्वक (अच्छी तरह से गुजरती हैं, एक को छोड़कर - लेकिन यह है कि एक विफल रहता है, भले ही मैं के लिए निर्माण नेट 4)। [LinqBridge] का उपयोग (http://www.albahari.com/nutshell/linqbridge.aspx) के लिए पर्याप्त नहीं है, क्योंकि यह भाव का समर्थन नहीं करता था। – anikiforov