असेंबली नाम की मजबूत का उपयोग क्यों करें?


107

मजबूत नामित विधानसभाओं का उपयोग करने के क्या फायदे हैं?

ऐसी कौन सी चीजें हैं जो एक सामान्य सभा के साथ नहीं की जा सकती हैं?

जवाबों:


92

मुझे पहले अपनी विधानसभा के मजबूत नामकरण के लाभों की सूची दें:

  1. अपनी असेंबली का नामकरण करने से आप अपनी असेंबली को ग्लोबल असेंबली कैश (GAC) में शामिल कर सकते हैं। इस प्रकार यह आपको कई अनुप्रयोगों के बीच साझा करने की अनुमति देता है।

  2. मजबूत नामकरण उस विधानसभा के लिए एक अद्वितीय नाम की गारंटी देता है। इस प्रकार कोई भी एक ही विधानसभा नाम का उपयोग नहीं कर सकता है।

  3. मजबूत नाम एक विधानसभा के संस्करण वंश की रक्षा करता है। एक मजबूत नाम यह सुनिश्चित कर सकता है कि कोई भी आपके विधानसभा के बाद के संस्करण का उत्पादन करने में सक्षम नहीं है। एप्लिकेशन उपयोगकर्ताओं को यह सुनिश्चित किया जाता है कि वे जिस विधानसभा को लोड कर रहे हैं उसका एक संस्करण उसी प्रकाशक से आता है, जिस संस्करण के साथ एप्लिकेशन बनाया गया था।

Microsoft से अधिक मजबूत नामकरण सशक्त-नामांकित असेंबली ( MSDN ) में है।


1
क्या आप आइटम 4 पर निश्चित हैं? मुझे लगता है कि शायद यह व्यवहार हाल ही में बदल गया है। मैंने इसे संशोधित करके विफल होने के लिए एक दृढ़ता से नामित विधानसभा की लोडिंग प्राप्त करने का प्रयास किया, लेकिन यह बिना घटना के लोड हो गया।
जेन्स

19
# 4 के संबंध में जो गलत है। इसे छेड़छाड़ से बचाने के लिए नहीं बनाया गया है। अधिक के लिए blogs.msdn.com/b/shawnfa/archive/2005/12/13/… देखें ।
कॉलिन बोवन

1
@ RobV8R हमारी निर्भरता का 90% Openource है, निजी कुंजी सार्वजनिक git repos (Microsoft सिफारिशों के अनुसार) में हैं और जो कोई भी उन्हें चाहता है उसके लिए उपलब्ध है।
ट्रैम्पस्टर

1
@ RobV8R आप यहां समझौता शब्द का उपयोग नहीं कर सकते, इसका मतलब यह होगा कि यह पहली जगह में एक रहस्य है। Microsoft दिशानिर्देश हैं कि निजी कुंजी को आपके पास सार्वजनिक स्रोत भंडार में रखा जाना चाहिए। निजी चाबियों से समझौता नहीं किया जाता है वे जानबूझकर प्रकाशित किए जाते हैं। यह देखते हुए कि निजी कुंजी ज्ञात है, और इसका उपयोग मूल परियोजनाओं के ओपनसोर्स कोड को संशोधित करने वाले लोगों द्वारा किया जा सकता है (अन्यथा लाइसेंस का कई मामलों में उल्लंघन किया जाएगा) तो ऐसा करने वाले लोग एक अलग संस्करण संख्या का उपयोग करेंगे लेकिन एक ही कुंजी, इसमें एक बाध्यकारी पुनर्निर्देशन की आवश्यकता होगी।
ट्रैम्पस्टर

1
@ RobV8R जो मुझे मूल रूप से मिल रहा था, वह यह है कि कई लोगों का मानना ​​है कि मजबूत नामकरण यह गारंटी देता है कि आपकी निर्भरता एक असेंबली के एक विशिष्ट संस्करण पर बंद है, और यह केवल मामला नहीं है, एक साधारण बाध्यकारी पुनर्निर्देशन आपके द्वारा उपयोग किए गए संस्करण को बदल सकता है। एक ही निजी कुंजी के साथ हस्ताक्षर किए गए थे। और जैसा कि मैंने कहा है कि निजी कुंजियाँ जानबूझकर हमारे अधिकांश आश्रितों के लिए प्रकाशित की जाती हैं।
ट्रैम्पस्टर

9

ऐसी कौन सी चीजें हैं जो एक सामान्य सभा के साथ नहीं की जा सकती हैं?

चूंकि नुगेट के उदय के साथ शुरू होने वाली सभी चर्चाओं ने पूरी तरह से मजबूत नामांकित असेंबली से छुटकारा पाने का सुझाव दिया, जो मेरी कंपनी ने कोशिश की और जब यह अनुप्रयोग सेटिंग्स की बात आती है, तो व्यवहार का एक महत्वपूर्ण बदलाव आया:

यदि आप VisualStudio द्वारा प्रदान की गई स्वचालित ऐप या उपयोगकर्ता स्कोप की गई एप्लिकेशन सेटिंग्स का उपयोग करते हैं (सिस्टम से कनेक्ट कर रहा है। स्थित है।

लेकिन मजबूत नाम के बिना EXE के स्थान (= पथ) का उपयोग हैश मान बनाने के लिए किया जाएगा जो पहले से ही DEBUG और RELEASE बिल्ड के बीच भिन्न होता है, जिससे% निर्देशिका LOCALAPPDATA% के अंदर कई निर्देशिकाएं बनाई जाती हैं, जिसका नाम "YourAppleation.exe_Url_dfg8778d6fs7g6d7f8g69sdf" है। यह ClickOnce परिनियोजन के लिए अनुपयोगी बनाता है, जहां इंस्टॉलेशन डायरेक्टरी हर अपडेट के साथ बदलती रहती है।


5

मैं जोड़ना चाहूंगा कि एक मजबूत नाम के बिना आप कॉन्फ़िगर फ़ाइलों में बाइंडिंग पुनर्निर्देश का उपयोग नहीं कर सकते।

यह काम नहीं करेगा:

  <dependentAssembly>
    <assemblyIdentity name="MyAssembly.MyComponent" publicKeyToken="null" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>

आपके पास एक सार्वजनिक कुंजी टोकन होना चाहिए

  <dependentAssembly>
    <assemblyIdentity name="MyAssembly.MyComponent" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>

9
यदि आप मजबूत नाम नहीं रखते हैं तो बाइंडिंग रीडायरेक्ट की आवश्यकता नहीं है।
ट्रैम्पस्टर

0

बस एक उदाहरण: मैं सुरक्षा में अधिक जोर देते हुए एक उत्तर देना चाहूंगा । मामले में हम असेंबलियों को एक स्रोत कोड के साथ बनाते हैं जिसे हम किसी तीसरे पक्ष के लिए फिर से उपयोग नहीं करना चाहते हैं लेकिन हम चाहते हैं कि यह परीक्षण योग्य हो, हम एक असेंबली पर दृढ़ता से हस्ताक्षर कर सकते हैं और केवल उन असेंबलियों के लिए आंतरिक रूप से दृश्यमान बना सकते हैं एक ही हस्ताक्षर।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.