2009-12-02 4 views
12

हाल ही में मैं कुछ छोटे .NET अनुप्रयोगों पर काम कर रहा हूं जो कुछ सामान्य कोड साझा करते हैं। कोड में यूनिट परीक्षण के लिए I/O कॉल को दूर करने के लिए कुछ इंटरफेस पेश किए गए हैं।सी #+ सी ​​स्थिर शैली पुस्तकालयों क्यों नहीं है?

मैं चाहता था कि एप्लिकेशन किसी बाहरी निर्भरता वाले स्टैंडअलोन EXEs न हों। यह स्थिर पुस्तकालयों के लिए सही उपयोग मामले की तरह लगता है। इसके बारे में सोचने के लिए आओ तीसरे पक्ष के नियंत्रण विक्रेताओं को भी इस मॉडल से फायदा हो सकता है।

क्या स्थिर पुस्तकालयों के साथ कुछ छुपे हुए नास्टियां हैं जिन्हें मैंने याद किया है?

क्या कोई कारण है कि सी # डिजाइनरों ने उन्हें छोड़ दिया?

संपादित करें: मुझे आईएलएमर्ज के बारे में पता है लेकिन यह स्थिर पुस्तकालयों के समान सुविधा प्रदान नहीं करता है।

उत्तर

11

.NET वास्तव में एक स्थिर लाइब्रेरी के नैतिक समकक्ष का समर्थन करता है। इसे नेटमॉड्यूल कहा जाता है (फ़ाइल एक्सटेंशन आमतौर पर .netmodule) होता है। इस blog post में इसके बारे में और पढ़ें। सावधान रहें कि यह विजुअल स्टूडियो बिल्ड टूल श्रृंखला द्वारा समर्थित नहीं है। मुझे लगता है कि extension methods एक समस्या भी है। ILMerge यह प्राप्त करने के लिए बेहतर टूल है।

+0

यह बहुत दिलचस्प है धन्यवाद। –

3

यह सीधे सी # से संबंधित नहीं है, बल्कि पूरे .NET छतरी के लिए है। निश्चित रूप से, ILMerge का उपयोग करके असेंबली मर्ज करना संभव है, लेकिन यह अभी भी एक शोध परियोजना है, लेकिन कम से कम इसके लाइसेंस परमिट वाणिज्यिक प्रयासों के लिए उपयोग करते हैं। इसके अलावा, रनटाइम (सीएलआर) को एक निष्पादन योग्य में समेकित नहीं किया जा सकता है, लक्ष्य प्लेटफार्म को अभी भी स्थापित करने के लिए .NET की आवश्यकता है।

संपादित करें:

मैं इससे पहले कि आप ILMerge के साथ अपनी पोस्ट संपादित इस टाइप किया गया था। मैं गलत हो सकता हूं लेकिन रनटाइम पर .NET-style गतिशील लिंकिंग से बचने से अतिरिक्त लाभ नहीं हैं। निष्पादन योग्य के साथ सैटेलाइट असेंबली को एक साथ रखने में कुछ भी गलत नहीं है। माइक्रोसॉफ्ट उन्हें जीएसी में डालने की सिफारिश नहीं करता है।

+0

मुझे पता है कि इसका कोई नुकसान नहीं है, लेकिन केवल एक एक्सई देने में सक्षम होना आसान है। –

1

स्थिर libs का उपयोग करने में यह कमी है कि यह रनटाइम प्रदाता (एमएस) द्वारा पैच करने योग्य नहीं है।

उदाहरण के लिए यदि आप स्थिर एमएफसी libs और एक सुरक्षित समस्या का उपयोग करते हैं या अन्य बग एमएफसी स्थिर libs में पाया जाता है, तो एमएस इसे पैच नहीं कर सकता (कोड पहले से ही आपके निष्पादन योग्य में है)। साझा डीएलएस का उपयोग करने के बिना ओएस स्तर पर एक आसान पैच की अनुमति देता है।

बेशक साझा किए गए libs में एक छोटी कमी है: निर्भरता ली जाती है और उन्हें सिस्टम पर स्थापित होना चाहिए।