الذي سوف يستخدم برنامج التحويل البرمجي ASPX عند الرجوع إلى DLL واحد ولكن توجد إصدارات متعددة في مجلد BIN
-
29-09-2019 - |
سؤال
لديّ تطبيق ويب 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 من السهل تجنب ذلك. لماذا لديك نسختان من نفس التجميع الذي يتم الرجوع إليه في نفس التطبيق؟
تحتاج إلى إزالة أحد هذه المراجع (على الأرجح ، يجب أن تكون غير موقعة غير موقعة) ، واستخدام الرمز من ذلك. أو تغيير الآخر بحيث يكون رمزه مختلفًا.
نصائح أخرى
قم بتغيير تطبيق الويب للإشارة إلى الإصدار الموقّع.