2009-04-28 17 views
8

हमारे पास वीसी ++ में विकसित COM घटकों का एक सेट है। जब किसी घटक का संदर्भ .NET प्रोजेक्ट में जोड़ा जाता है तो विजुअल स्टूडियो एक इंटरऑप असेंबली उत्पन्न करता है। हमारे पास अब ऐसी असेंबली का एक सेट है।क्या असेंबली पर हस्ताक्षर किए जाने चाहिए?

हमारे दैनिक निर्माण को चलाने के दौरान हम डिजिटल हस्ताक्षर के साथ सभी उत्पादित बाइनरी पर हस्ताक्षर करते हैं। इंटरऑप असेंबली पर हस्ताक्षर नहीं किए जाते हैं क्योंकि हमें नहीं लगता कि हम लेखक हैं - कोई भी विजुअल स्टूडियो का उपयोग कर सकता है और उसी असेंबली का उत्पादन कर सकता है।

क्या हमें इंटरऑप असेंबली पर भी हस्ताक्षर करना चाहिए? क्या हमें उन्हें एक मजबूत नाम (sn.exe उपयोगिता) के साथ भी हस्ताक्षर करना चाहिए? ऐसा करने के कारण क्या हैं?

उत्तर

8

यह कुछ समय के लिए एक मुश्किल संतुलन रहा है। यह मुद्दा इस तथ्य से आता है कि आपको अपने कोड और के साथ अपने इंटरऑप असेंबली वितरित करने की आवश्यकता है, आप अपनी स्वयं की असेंबली पर हस्ताक्षर कर सकते हैं। यदि आप अपनी असेंबली पर हस्ताक्षर करते हैं तो इंटरपोल असेंबली समेत सभी असेंबली के संदर्भों पर भी हस्ताक्षर किए जाने चाहिए। तो आपको उन्हें साइन करना होगा।

यदि आप एक स्टैंडअलोन एप्लिकेशन वितरित कर रहे हैं तो कोई जोखिम नहीं है और आपको आगे बढ़ना चाहिए और अपने जीवन को आसान बनाने के लिए असेंबली पर हस्ताक्षर करना चाहिए।

यदि आप घटक पुस्तकालयों को वितरित कर रहे हैं, तो चीजें थोड़ा सा कठिन हो सकती हैं क्योंकि आपके पुस्तकालयों का उपयोग करने वाले अन्य डेवलपर अपनी स्वयं की इंटरऑप असेंबली उत्पन्न कर सकते हैं लेकिन उन्हें अपनी चाबियों से साइन कर सकते हैं। यह नामकरण और निर्भरता के सभी प्रकार के मुद्दों का कारण बनता है।

आपके इंटरऑप असेंबली कितने जटिल हैं इस पर निर्भर करते हुए - आप एक अलग सीएस /। वीबी फ़ाइल में प्रॉक्सी कोड उत्पन्न कर सकते हैं और इसे सीधे अपनी असेंबली में संकलित कर सकते हैं। तो आपको मजबूत नाम के मुद्दों के बारे में चिंता करने की आवश्यकता नहीं होगी।

+0

मैं सी # स्रोत कोड के लिए COM इंटरॉप प्रॉक्सी पैदा करने के बारे में एक सवाल अनुवर्ती पोस्ट किया है: http://stackoverflow.com/questions/1058289/how -do-i-gener-com-interop-proxies-in-c-source-code –

3

हम एसओ ऑब्जेक्ट्स के आसपास रैपर के रूप में उपकरण द्वारा उत्पादित हमारे इंटरऑप असेंबली के मजबूत नाम के लिए Sn.exe का उपयोग करते हैं। हमें ऐसा करने की जरूरत है क्योंकि उन्हें लोड करने वाली असेंबली पर हस्ताक्षर किए गए हैं, इसलिए उन्हें हस्ताक्षर करने की आवश्यकता है। यदि आप पूरी तरह से प्रवेश कर रहे हैं delaysign

tlbimp Some_COM.dll /delaysign /publickey:"Some_PublicKey.snk" /out:Some_COM2Lib.dll" 

जाहिर हटाने /:

इंटरॉप असेंबलियों उपयोग हम उत्पन्न करने के लिए।

assmeblies को संलेखित करने के लिए, यह मामला हो सकता है, लेकिन आप उनके लिए ज़िम्मेदार हैं। आप यह सुनिश्चित करना चाहते हैं कि उन्हें किसी और द्वारा प्रतिस्थापित नहीं किया गया है (गलती से या नहीं), इसलिए आपको अपने अन्य कोड पर लागू होने पर हस्ताक्षर/मजबूत नामों के समान स्तर को लागू करना चाहिए।

0

"keyfile" द्वारा "publickey" बदलें:

tlbimp Some_COM.dll /delaysign /keyfile:"Some_PublicKey.snk" /out:Some_COM2Lib.dll" 
+0

और क्या होता है? – sharptooth

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

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