2012-05-22 12 views
8

प्रसंगमेरा एप्लिकेशन हमेशा संदर्भित संस्करण के बजाय नवीनतम जीएसी संस्करण का उपयोग क्यों करता है?

मैं एक विधानसभा GAC, संस्करण 1.0 और 2.0 संस्करण में स्थापित की 2 अलग संस्करण है। मैंने एक ऐसा एप्लिकेशन बनाया जो 1.0 को एक विशिष्ट संस्करण के रूप में संदर्भित कर रहा है।

अंक

जब मैं अपने आवेदन चलाने के लिए, यह हमेशा संस्करण 2.0 लोड जबकि आवेदन विशेष रूप से संस्करण 1.0 का संदर्भ होगा।

प्रश्न

क्यों हो रहा है? मैं अपने एप्लिकेशन को उस संस्करण को लोड करने के लिए कैसे मजबूर कर सकता हूं जिसके लिए इसे संकलित किया गया है?

ऐसा प्रतीत नहीं होता है कि बाध्यकारी रीडायरेक्ट के साथ इसका कोई संबंध नहीं है क्योंकि मेरा एप्लिकेशन संस्करण 2.0 के बारे में भी जागरूक नहीं था जब मैंने इसे बनाया और संदर्भ "विशिष्ट संस्करण" मेटाडाटा सत्य पर सेट किया गया है।

धन्यवाद।


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

विधानसभा मैं संदर्भित कर रहा हूँ वास्तव में ODAC पैकेज से Oracle.DataAccess है। मैंने देखा कि अन्य असेंबलीयां पॉलिसी.एक्स.xxx.Oracle.DataAccess नामक हैं जहां जीएसी में प्रकाशित किया गया है।


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

Oracle.DataAccess नीति में देखने के बाद मैं विन्यास बाध्यकारी रीडायरेक्ट को परिभाषित मिला:

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/> 
      <bindingRedirect oldVersion="4.112.0.0-4.112.3.0" newVersion="4.112.3.0"/> 
     </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

हालांकि मैं उलट जोड़ा में अनुप्रेषित बाध्यकारी मेरी आवेदन विन्यास, जीएसी में नीति प्राथमिकता प्रतीत होती है। मैंने पाया एक MSDN article विषय के इलाज और इस विन्यास के साथ नीति की अनदेखी करने का सुझाव दे:

<publisherPolicy apply="no" /> 

लेकिन यह अभी भी काम नहीं करता है ...


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

मैं जीएसी से पॉलिसी को हटाने की कोशिश की और मेरी मशीन रीबूट की। अंततः यह काम किया। यह एक confortable समाधान विकास की तरह महसूस नहीं करता है, लेकिन इस नीति ने मेरे आवेदन में से एक तोड़ दिया है जिसका मतलब है कि पॉलिसी को अक्षम करना मेरे मामले में करना सही है।


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

इगोर मुझे सही जवाब दिया।सभी मैं उन नीतियों वैकल्पिक हल के लिए करना था सही configruation खंड में publisherPolicy सेटिंग का उपयोग करने के लिए था:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
     <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/> 
     <publisherPolicy apply="no"/> 
    </dependentAssembly> 
    </assemblyBinding> 
</runtime> 
+0

आप की जाँच क्या आपके संदर्भित विधानसभा के लिए कोई प्रकाशक नीति नहीं थी ? –

+0

@IgorKorkhov: हाँ मुझे GAC में Policy.x.xxx.MyAssembly नाम नामक कुछ मिली। मुझे इस तरह के तंत्र से अवगत नहीं था। मैं अपना प्रश्न संपादित करता हूं और आप एक उत्तर सबमिट कर सकते हैं। धन्यवाद। – Ucodia

+0

टेंगेंशियल प्रश्न: समस्या क्या है जिससे आप V1 का उपयोग करना चाहते हैं? मैं कभी-कभी ओरेकल का उपयोग करता हूं, इसलिए पूर्ववर्ती अग्रसर है :) – Ian

उत्तर

7

के बाद आप अपने प्रश्न यह स्पष्ट हो जाता है कि इस जिन्हें संयोजन के बंधन को प्रभावित करता है नीति फ़ाइल है संपादित किया है।

ओरेकल के मामले में इस के समान एक फ़ाइल की सामग्री के साथ Policy.XYOracle.DataAccess.config कहा जाता है:

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/> 
      <bindingRedirect oldVersion="10.1.0.000-10.2.0.100" newVersion="10.2.0.100"/> 
     </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

नीति ओरेकल इंस्टालर के द्वारा स्थापित किया है और पुनर्निर्देश है नवीनतम संस्करण के लिए Oracle.DataAccess.dll, चूंकि ओरेकल का मानना ​​है कि पुस्तकालय पिछड़ा संगत है।

संपादित करें: यदि आप प्रकाशक नीति एक विशेष विधानसभा पर लागू होने के नहीं करना चाहते हैं, तत्व में तत्व डाल:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
     <assemblyIdentity name="myAssembly" publicKeyToken="..." culture="en-us" /> 
     <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" /> 
      <publisherPolicy apply="no" /> 
    </dependentAssembly> 
</assemblyBinding> 
+0

मैंने '' के साथ प्रयास किया लेकिन इस मुद्दे को हल नहीं किया। मैंने [यहां] पढ़ा है (http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx) कि मैं नीतियों को अनदेखा करने के लिए '' का उपयोग कर सकता हूं लेकिन फिर भी वही समस्या। .. – Ucodia

+0

@Ucodia: यह अजीब है। क्या आप अपने ऐप में v4.112.3.0 का संदर्भ दे रहे हैं? हो सकता है कि यह देखने के लिए कि क्या यह काम करेगा या नहीं, आपको संस्करणों की एक श्रृंखला (कहना, '0.0.0.0-4.65535.65535.65535') शामिल करना चाहिए? –

+0

मैं विशेष रूप से 4.112.2.1 का संदर्भ देता हूं। मैंने कुछ नए निष्कर्षों के साथ अपना प्रश्न अपडेट किया। ऐसा लगता है कि जीएसी में प्रकाशित नीति किसी भी एप्लिकेशन कॉन्फ़िगरेशन को ओवरराइड करता है। – Ucodia

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