سؤال

لدي موقع ويب قديم .NET 2005 يحتوي على بعض صفحات ASP وتواجه مشكلة مرجعية للكائن .NET DLL. تم تسليم مهمة الصيانة إليّ ولم يتم العثور على المطور الأصلي في أي مكان :( لقد بدأت في .NET بالفعل حتى لا أتقن التعامل مع هذا النوع من الجحيم.

على السهم أدناه هو المكان الذي أشجعه على مرجع كائن "(0x80131500) لم يتم تعيينه على مثيل لكائن."

Set objCommon = Server.CreateObject("Wrapper.CommonFunctions")
  Dim machineBuilding
--->>>  If objCommon.IsMachineAccount(strLogin, machineBuilding) Then

لقد تابعت بالفعل هذه الخطوات:

  1. regasm /tbl /codebase mycomdll.dll
  2. gacutil /i mycomdll.dll
  3. انسخ mycomdll.dll إلى دليل System32
  4. من وحدة التحكم ، تنفيذ ISSRESET
  5. إذا تم إنشاء DLL الخاص بك في Framework 2.0 قم بإنشاء ملف "dllHost.exe.config" في دليل System32 ووضع هذا:

<?xml version="1.0"?> <configuration> <startup> <supportedRuntime version="v2.0.50727"/> <requiredRuntime version="v2.0.50727"/> </startup> </configuration>

6.- أعد تشغيل IIS مع أمر ISSRESET

وكذلك هؤلاء:

  1. تحت خصائص المشروع أ. ضمن application Assembly معلومات i. تحقق من "اجعل التجميع com- مرئي". ب. تحت بناء أنا. تحقق من "سجل ل com interop"
  2. لا توقيعه.
  3. تأكد من أن IUSR لديه أذونات كاملة للملف.
  4. أعد تشغيل IIS عبر iisreset لطرح أي ذاكرة التخزين المؤقت.

وما زالت غير ناجحة في تشغيل التطبيق. هل هناك المزيد من الأفكار التي يجب التحقق منها أو فعلها؟ شكرًا!

أمير

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

المحلول 3

كانت المشكلة هي أن التطبيق يبحث عن ملف يحتوي على اسم مضيف قاعدة البيانات.

نصائح أخرى

قيمة hresult ذات صلة للغاية. ملاحظة "رمز المنشأة" في 0x80131500 ، 13 يشير إلى أن مصدر الخطأ يتم إدارة التعليمات البرمجية. لقد حصلت بالفعل على الترجمة الودية لـ 1500.

بمعنى آخر ، ألقى الكود المدار استثناء ولم يتم التعامل معه. هذا ليس من غير المألوف بالطبع ، الرمز المدارة عادة ما يلقي الاستثناءات. خاصة NullreferenceException ، الذي أثارته. تصحيح الأخطاء هذا ليس بهذه السهولة لأنك تقوم بتشغيل التعليمات البرمجية المدارة في عملية غير مُدارة. لست متأكدًا تمامًا من الإجراء المناسب بالنسبة لـ IIS ، عادة ما يتم ذلك باستخدام Tools + إرفاقه على العملية. أفضل طريقة لمعالجة ذلك هي عزل الرمز ، واكتب بعض اختبارات الوحدة.

بخلاف ذلك ، فإن متغير بناء الماكينة يصيبني كمرشح جيد لـ NRE. أنت لم تهيئته.

راجع للشغل: لا علاقة له بالتسجيل. أن ينتج نوعا مختلف جدا من الخطأ.

كان لدي حل مشابه لك ولكن لقد ولت منذ فترة طويلة. ومع ذلك ، لا يزال لدي بعض المعلومات حولها ، ولاحظت أن بيان Regasm الخاص بي مختلف.

regasm mycomdll.dll /tlb :mycomdll.tlb

مراجعاتك TBL بدلاً من TLB - ربما هذه هي المشكلة؟

أعتقد أيضًا أنه يجب عليك التحقق من قيم المعلمات ثم استدعاء الطريقة بقيم المعلمة هذه من خلال عميل .NET سريع ودائم لمعرفة ما إذا كانت الطريقة تطرح خطأ.

أريد أيضًا أن أؤكد أن رمز ASP الكلاسيكي الخاص بي يتطابق معك ...

set obj = server.CreateObject("mycomdll.myclass")
...
call obj.method(false)
...
myvar = obj.method2(param1, param2, param3)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top