برنامج WinForm .NET كتبته منذ بعض الوقت. لأنه يشير إلى الكثير من ملفات المكتبة، ولكن تم مؤخرًا تصحيح ملفات المكتبة هذه لبعض الأخطاء والخوارزميات. لكن ملف البرنامج الرئيسي لم يتغير كثيرًا. لذلك ليس الأمر مثل إعادة ترجمة البرنامج الرئيسي. لذلك تم نسخ جميع الإصدارات الجديدة من ملفات DLL إلى الدليل قيد التشغيل، على أمل أن يتمكن البرنامج الرئيسي من استدعاء الإصدار الجديد من ملف المكتبة مباشرة. اتضح أن ملفات المكتبة هذه تم توقيعها بالاسم القوي. يحدث خطأ بمجرد استدعاء البرنامج الرئيسي، يفيد بأنه لا يمكن العثور على ملف هذا الإصدار.
لاحقًا، قمت بفحص MSDN ووجدت أن مجرد إضافة عقدة وقت التشغيل إلى التكوين يكفي.
<وقت التشغيل>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<الجمعية التابعة>
<اسم التجميعاسم = "MyAssembly"
publicKeyToken="2b7c3a3291de04"
الثقافة = "محايدة" />
<bindingRedirect oldVersion="3.0.0.8"
الإصدار الجديد = "4.1.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
ومع ذلك، فإن الشرط الأساسي لذلك هو أن يكون PublicKeyToken لمكتبتي DLL متماثلين، مما يعني أنه يجب توقيعهما بنفس ملف sn.
بالطبع، إذا لم يتم توقيع ملف مكتبتك بالاسم القوي على الإطلاق، فلا داعي للنظر في مشكلات الإصدار.