2008-10-30 17 views
9

मैं सोच रहा हूं कि निर्भरताओं के संबंध में अन्य परियोजनाओं में पुस्तकालयों की रिलीज बनाने के दौरान हेरिस्टिक क्या हैं और यदि मुझे उन्हें शामिल करना चाहिए या नहीं।असेंबली विलय के लिए सर्वोत्तम अभ्यास?

मेरे समस्या है निम्नलिखित:

मैं एक CommonUtilities पुस्तकालय के रूप में नाम उपयोगिताओं कि एक से अधिक जगह में इस्तेमाल किया जा सकता का एक सेट का तात्पर्य यह प्रावधान है कि है। CommonUtilities की निर्भरताओं में log4net.dll (लॉगिंग फ्रेमवर्क) और Oracle.DataAccess.dll (डेटाबेस ड्राइवर) शामिल हैं।

मेरे पास माइप्रोजेक्ट नामक एक और प्रोजेक्ट है जिसमें मैं कॉमन यूटिलिटीज को शामिल करना चाहता हूं। MyProject भी Oracle.DataAccess पर निर्भर करता है।

यदि मैं आईएलएमर्ज का उपयोग करता हूं और कॉमन यूटिलिटीज को एक असेंबली में जोड़ता हूं CommonUtilities.dll और संदर्भ जो MyProject सब कुछ संकलित करता है लेकिन मुझे यकीन है कि मुझे स्पष्ट रूप से Oracle.DataAccess को MyProject से संदर्भित करना चाहिए क्योंकि यह एक निर्भरता है और असेंबली का उपयोग नहीं किया जाता है सीयू। Oracle.DataAccess के संदर्भ में एक साथ जोड़ना, साथ ही बयान का उपयोग करके संदिग्ध परिणामस्वरूप दो ओरेकल। डेटाएप असेंबली संदर्भित हैं।

आईएलएमर्ज/मेरे मामले में आंतरिककरण का उपयोग करके आंतरिक त्रुटियों के प्रकार के रूप में त्रुटियों को संकलित करने में परिणाम होता है। डेटाएप असेंबली को सामान्य उपयोगिताओं से वापस किया जा रहा है और जैसा कि वे आंतरिक माइप्रोजेक्ट चिह्नित हैं, लौटाए गए प्रकार को पहचान नहीं पाते हैं।

इस काम को करने का एकमात्र तरीका यह है कि इस विशेष असेंबली (Oracle.DataAccess) को सामान्य उपयोग में विलय न करें और केवल MyProject से संदर्भ दें। बदले में यह एक नई समस्या पैदा करता है: कौन सा Oracle.DataAccess.dll मुझे संदर्भित करना चाहिए - निर्भरता के साथ वितरित निर्भरता या नहीं?

क्या इस सब के बारे में जाने के अन्य तरीके हैं?

+0

मैं ilmerge पर मेरे सिर खरोंच - मैं एक एकल फाइल में सभी विधानसभाओं रखने के लिए एक फायदा नहीं दिख रहा। कोई भी मुझे प्रबुद्ध करने की देखभाल करता है? – cfeduke

उत्तर

5

छोटा है, आसान संस्करण:

किसी दिए गए विधानसभा के लिए एक प्रक्रिया के भीतर हर संदर्भ एक ही संस्करण उल्लेख होना चाहिए।

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

यहां तक ​​कि साथ log4net की तरह "वास्तव में निजी" सामान आप साझा कॉन्फ़िगरेशन अंतरिक्ष के लिए संभावनाओं करने से चूक सकते, एप्लिकेशन के सभी भागों के लिए एक आम जड़ लकड़हारा का उपयोग कर की तरह

। बेशक, इस मामले में अंतिम कॉल - हमेशा के रूप में - जिम्मेदार डेवलपर के साथ है।

भी इस अन्य प्रश्न के बारे में ILMerge and 3rd party assemblies देखें।

+0

तकनीकी शब्दों में, क्या आप "एप्लिकेशन का एक हिस्सा संस्करण बेमेल की वजह से दूसरे से बात नहीं कर सकते" मतलब है। यदि आप अधिक विशिष्ट हो सकते हैं तो बहुत अच्छा होगा। – bentayloruk

+1

@bentayloruk: एक ही नाम वाले प्रकार अभी भी समान नहीं हैं अगर वे विभिन्न असेंबली से आते हैं। इसलिए, यदि आपका एप्लिकेशन का एक हिस्सा अपने एपीआई में v1.0 से ग्रुप ए को उजागर करता है, एक और हिस्सा ग्रुप ए के v1.1 संदर्भित पूर्व भाग के साथ बातचीत करने के लिए विफल हो सकता है। –

0

मैं कुछ लाभ में स्थानीय विधानसभाओं का एक समूह रखने

मैं अन्य विक्रेताओं से पुस्तकालयों मर्ज नहीं होता है (जो, मैं भी आप कर सकते हैं यकीन नहीं है) के संबंध में हो सकता है लगता है - क्योंकि वे अक्सर अपने स्वयं के लाइसेंस प्राप्त करें, और उन्हें अद्यतन करने के लिए आपको अपने कोड के एक नए संस्करण को फिर से वितरित करने की आवश्यकता होगी।

अपने पुस्तकालयों को विलय करना फायदेमंद हो सकता है यदि आपके पास निर्देशिका को साफ रखने के लिए कई पुस्तकालय हैं, या सुनिश्चित करें कि कुछ कोड हमेशा मुख्य निष्पादन असेंबली के साथ होंगे।

मुझे लगता है कि पुस्तकालयों को एक्सईई में विलय करने के साथ आईएलएमर्ज बेहतर होता है, ताकि आपके पास कई लोगों की बजाय एक फ़ाइल हो।

1

हम पुस्तकालयों को बिल्कुल मर्ज नहीं करते हैं। मैं पुस्तकालयों को विलय करने में बहुत अधिक लाभ नहीं देख सकता हूं कि आप नहीं मिल सकते हैं, बल्कि उन्हें पहले ही एक असेंबली में बना सकते हैं।

मैं EXE के साथ पुस्तकालयों को विलय करने में लाभ देख सकता हूं। यह असली आसान हो सकता है। एक साथ पुस्तकालयों को विलय करने में समस्या यह है कि उनके पास आपके EXE में निर्भरता के विभिन्न संस्करण हो सकते हैं और जो असहज बेडफेलो के लिए बना सकते हैं।

मुझे नहीं लगता कि विलय डीएलएस को एक साथ सबसे अच्छा अभ्यास माना जा सकता है, सिवाय इसके कि जब आप उन्हें EXE में विलय कर रहे हों तो एकाधिक फ़ाइलों के बजाय एक फ़ाइल प्रस्तुत करने के लिए।

4

सबसे बड़ा कारण हम प्रयोग ILMerge हमारे कहानियो कदम है कि और अधिक कठिन उल्टा करने के लिए बनाने के लिए है।/आंतरिक ध्वज का उपयोग करके उन्हें एक साथ विलय करके obfuscator तब सार्वजनिक कक्षाओं और विधियों का नाम बदल सकता है जिन्हें हमने मूल असेंबली में विलय कर दिया है।

आईएल विलय से प्रलेखन: "[आंतरिककरण] नियंत्रित करता है कि प्राथमिक असेंबली के अलावा असेंबली में प्रकारों में उनकी दृश्यता में संशोधन होता है या नहीं। जब यह सच होता है, तो उनके असेंबली के बाहर दिखाई देने वाले सभी गैर-मुक्त प्रकारों की उनकी दृश्यता होती है ताकि संशोधित वे मर्ज किए गए विधानसभा "

के बाहर से दिखाई विधानसभाओं अलग रखा जाता है तो अस्पष्टकर्ता उनका नाम बदल नहीं होगा नहीं हैं।

BTW Eazfuscator भयानक है, और नि: शुल्क है: http://www.foss.kharkov.ua/g1/projects/eazfuscator/dotnet/Default.aspx

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