لماذا يستخدم تطبيقي دائمًا أحدث إصدار من GAC بدلاً من الإصدار المشار إليه؟

StackOverflow https://stackoverflow.com//questions/10700669

سؤال

سياق

لدي إصداران مختلفان من التجميع المثبت في GAC، الإصدار 1.0 والإصدار 2.0.لقد قمت بإنشاء تطبيق يشير إلى 1.0 كإصدار محدد.

مشكلة

عندما أقوم بتشغيل التطبيق الخاص بي، فإنه سيتم دائمًا تحميل الإصدار 2.0 بينما يشير التطبيق على وجه التحديد إلى الإصدار 1.0.

سؤال

لماذا يحدث هذا؟كيف يمكنني إجبار تطبيقي على تحميل الإصدار الذي تم تجميعه من أجله؟

لا يبدو لي أن هذا له أي علاقة بإعادة توجيه الربط لأن تطبيقي لم يكن على علم بالإصدار 2.0 عندما قمت بإنشائه وأن البيانات التعريفية المرجعية "إصدار محدد" مضبوطة على "صحيح".

شكرًا.


يحرر:

التجميع الذي أشير إليه هو في الواقع Oracle.DataAccess من حزمة ODAC.لقد لاحظت أن التجميعات الأخرى المسماة Policy.x.xxx.Oracle.DataAccess تم نشرها في GAC.


تحرير 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>

على الرغم من أنني أضفت إعادة توجيه الربط المعكوس إلى تكوين التطبيق الخاص بي، يبدو أن السياسة في GAC لها الأولوية.لقد وجدت مقالة MSDN معالجة الموضوع واقتراح تجاهل السياسة بهذا التكوين:

<publisherPolicy apply="no" />

لكنه لا يزال لا يعمل...


تحرير 3:

لقد حاولت إزالة السياسة من GAC وأعدت تشغيل جهازي.لقد نجحت أخيرًا.لا يبدو الأمر وكأنه تطوير حل مريح ولكن هذه السياسة عطلت أحد طلباتي مما يعني أن تعطيل السياسة هو الشيء الصحيح الذي يجب فعله في حالتي.


التعديل النهائي:

أعطاني إيغور الإجابة الصحيحة.كل ما كان علي فعله للتغلب على هذه السياسات هو استخدام publisherPolicy الإعداد في قسم التكوين الصحيح:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
      <publisherPolicy apply="no"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>
هل كانت مفيدة؟

المحلول

بعد قيامك بتحرير سؤالك، يصبح من الواضح أن هذا هو ملف السياسة الذي يؤثر على ربط التجميع.

في حالة Oracle يوجد ملف يسمى Policy.X.Y.Oracle.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 Installer وإعادة التوجيه Oracle.DataAccess.dll إلى الإصدار الأحدث، حيث تعتقد Oracle أن المكتبة متوافقة مع الإصدارات السابقة.

يحرر:إذا كنت لا تريد تطبيق سياسة الناشر لجمعية معينة, ، ضع العنصر في العنصر:

<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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top