2010-08-11 9 views
14

विभिन्न कारणों से मुझे अक्सर कोड लिखने के लिए वांछनीय लगता है जो .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 से अनुपलब्ध; वास्तव में एक छोटी सी सुविधा नहीं है लेकिन मुझे बहुत याद आती है)

उत्तर

5

Theraot के पुस्तकालय

आप नेट के साथ शुरू सशर्त संकलन करने के लिए 2.0 धन्यवाद पुराने संस्करणों के लिए नेट कोड का एक बड़ा भाग backport को Theraot's Libraries से उपयोग Theraot.Core उपयोग कर सकते हैं।

उल्लेख किया सुविधाओं में से निम्नलिखित शामिल हैं:

  • ExtensionAttribute
  • Func<...> और Action<...> प्रतिनिधियों
  • Tuple<...>
  • Lazy<T> और Lazy<T,TMetadata>
  • LINQ करने वाली वस्तुओं अभिव्यक्ति ट्रे एस एस

भी शामिल निम्नलिखित विशेषताएं प्रश्न में वर्णित नहीं हैं:

  • HashSet<T>
  • SortedSet<T>
  • ThreadLocal<T>
  • IObservable<T> और IObserver<T>
  • BigInteger
  • ConcurrentDictionary<Tkey, TValue>
  • आदि ...

नोट: System.Threading.Tasks के लिए समर्थन की योजना बनाई है।

अफसोस की बात है कि लेखन के समय केवल कुछ ही दस्तावेज उपलब्ध हैं, फिर भी बीसीएल से व्यवहार पर कोई अंतर एक बग माना जा सकता है, और reported via github हो सकता है।

+0

मैं Theraot के पुस्तकालय का उपयोग कर नेट 2.0 के लिए [dotNetLiquid] (http://dotliquidmarkup.org/) को संकलित करने में सक्षम था, और उनके सभी इकाई परीक्षण सफलतापूर्वक (अच्छी तरह से गुजरती हैं, एक को छोड़कर - लेकिन यह है कि एक विफल रहता है, भले ही मैं के लिए निर्माण नेट 4)। [LinqBridge] का उपयोग (http://www.albahari.com/nutshell/linqbridge.aspx) के लिए पर्याप्त नहीं है, क्योंकि यह भाव का समर्थन नहीं करता था। – anikiforov

0

मुझे नहीं पता कि ऐसी सूची कितनी उपयोगी होगी, क्योंकि यह आकार में संभावित रूप से राक्षसी है। सीएलआर 2.0, 3.0 & 3.5 के लिए समान है, इसलिए इन पोस्ट-2.0 सुविधाओं में से कोई भी "compatibilty पैक" में अपना रास्ता बना सकता है।

-Oisin

3

यह वास्तव में एक "compatilibity पैक" नहीं है, लेकिन जब से तुम LinqBridge उल्लेख किया ... एक और "बैकपोर्टेड सुविधा" मैं अक्सर Reactive Extensions (Rx) में समानांतर एक्सटेंशन मिल गया (अन्य बातों के अलावा) का उपयोग फ्रेमवर्क 3.5 एसपी 1 के लिए (System.Threading.dll में)।इसमें टास्क समांतर लाइब्रेरी और समांतर LINQ (PLINQ) का पूर्ण कार्यान्वयन शामिल है।

.NET 4.0 के लिए माइक्रोसॉफ्ट से Async Targeting Pack for Visual Studio 2012 (nuget) है। जो कई Async विस्तार विधियों को प्रदान करता है और C# 5 कंपाइलर का उपयोग करते हुए async/await कीवर्ड के लिए समर्थन प्रदान करता है।

इसी प्रकार .NET 3.5 के लिए AsyncBridge है जो async/await प्रदान करने के लिए प्रतिक्रियाशील एक्सटेंशन की टीपीएल लाइब्रेरी पर बनाता है। .NET 4.0 के लिए AsyncBridge का एक संस्करण भी है, लेकिन मुझे यकीन नहीं है कि आप माइक्रोसॉफ्ट से एक को क्यों चाहते हैं।

1

.NET 3.5 के लिए आप FSharp.Core.dll का उपयोग F # Runtime से .NET Framework 2.0 के लिए कर सकते हैं।

"कोर पुस्तकालय (FSharp.Core.dll) शामिल में इस पुनर्वितरण पैकेज सिस्टम नामस्थान कि .नेट फ्रेमवर्क के समान हैं 4 एपीआई कि एफ # विकास के लिए आवश्यक हैं में कुछ APIs शामिल हैं।"

http://msdn.microsoft.com/en-us/library/ee829875%28v=vs.100%29.aspx

इसमें शामिल हैं System.Tuple एट अल और System.Lazy<T> (नहीं Lazy<T,TMetadata> हालांकि।) उन्हें इस्तेमाल करने के लिए बस का संदर्भ FSharp.Core.dll

संपादित करें:।।। में FSharp.Core.dll है लेज़ी बाहर कर देता है एक ड्रॉप-इन प्रतिस्थापन नहीं, लेकिन एक इंटरऑप-क्लास के अधिक। इसमें समान गुण हैं लेकिन समान रचनाकार नहीं हैं। बल्कि इसे बनाया गया है जैसे कि:

Lazy<string> lazy = Microsoft.FSharp.Control.LazyExtensions.CreateFromValue("test"); 
संबंधित मुद्दे