الذي سوف يستخدم برنامج التحويل البرمجي ASPX عند الرجوع إلى DLL واحد ولكن توجد إصدارات متعددة في مجلد BIN

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

سؤال

لديّ تطبيق ويب ASP.NET يحتوي على إشارة إلى "C: المراجع utils.varia.dll". هناك DLL آخر مشار إليه يستخدم الإصدار الموقّع من DLL هذا ('c: المراجع utils.varia.signed.dll').

الآن في ASPX الخاص بي ، لديّ توجيه الواردات التالي: <٪@@ استيراد اسم الاستيراد = "utils.varia" ٪>

تستخدم هذه الصفحة امتداد سلسلة من utils.varia.StringExtensions ExtensionClass.

لكن في وقت التشغيل أحصل على الخطأ التالي:

خطأ في التحويل

الوصف: حدث خطأ أثناء تجميع مورد مطلوب لخدمة هذا الطلب. يرجى مراجعة تفاصيل الخطأ المحددة التالية وتعديل رمز المصدر الخاص بك بشكل مناسب.

رسالة خطأ المترجم: CS0121: المكالمة غامضة بين الأساليب أو الخصائص التالية: 'Concentra.Utils.StringExtensions.ToShorTreadablestring (سلسلة ، int)' و "concenter.tils.StringExtensions.ToshorTreadablestring (string ، int) ''

لذلك أعتقد أن المترجم لا يعرف ما إذا كان سيتم أخذ طريقة التمديد من DLL الموقّع أو DLL العادي.

هل هذا الافتراض صحيح ، وإذا كان الأمر كذلك ، كيف يمكنني توجيهه إلى DLL الصحيح؟

يحرر
الشيء الغريب هو أن خطأ المترجم هذا يحدث فقط على الرمز داخل ملف ASPX. إذا استخدمت نفس الوظيفة في CodeBehind ، فكل شيء يعمل كما هو متوقع. هل يستطيع أحد شرح هذا من فضلكم؟

أيضًا ، لا يمكنني فقط الرجوع إلى الإصدار الموقّع بدلاً من ذلك لأن استخدام الإصدار الموقّع هو الاستثناء ، فكل المكونات الأخرى تستخدم غير موقعة (بصرف النظر عن 1 على ما يبدو).

هل كانت مفيدة؟

المحلول

يبدو أنك واجهت الكثير من المتاعب لإحياء "DLL Hell" عن قصد في التطبيق الخاص بك ، عندما يجعله بشكل افتراضي .NET من السهل تجنب ذلك. لماذا لديك نسختان من نفس التجميع الذي يتم الرجوع إليه في نفس التطبيق؟

تحتاج إلى إزالة أحد هذه المراجع (على الأرجح ، يجب أن تكون غير موقعة غير موقعة) ، واستخدام الرمز من ذلك. أو تغيير الآخر بحيث يكون رمزه مختلفًا.

نصائح أخرى

قم بتغيير تطبيق الويب للإشارة إلى الإصدار الموقّع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top