سؤال

يبدو أنني ارتكبت خطأً كبيرًا جدًا عند إجراء بعض الاختبارات باستخدام نموذج لمشروع Sharepoint.ومن المفارقات أنني كنت أحاول زيادة حل وحدة قابل للاختبار، دون كتابة العديد من الاختبارات أولاً.ما زلت جديدًا جدًا على SharePoint، وأردت استكشاف ما يمكنني وما لا يمكنني فعله باستخدام SP وIoC.

لذلك، دون الخوض في الكثير من التفاصيل، كتبت عن طريق الخطأ بعض التعليمات البرمجية المتكررة وينتهي الأمر بطرح StackOverflowException.لا صفقة كبيرة، أليس كذلك؟فقط قم بسحب المحلول وإزالته.تكمن المشكلة في أنه يتم استدعاء هذا الرمز أثناء ميزة الحل FeatureUninstalling الطريقة في أ SPFeatureReceiver.

(حسنا، ليس بالضبط.ينتهي الأمر بالاستدعاء بالرمز أثناء SPFeatureReceiverمنشئ ثابت.إذا كنت تتساءل عن السبب، فقد كنت أحاول إنشاء الجذر باستخدام Castle Windsor من أجل إدخال التبعيات التي يمكن استخدامها أثناء طريقتي FeaturesInstalling وFeatureUninstalling.)

إذن ما يحدث عند محاولة استخدام مسؤول الويب المركزي أو Uninstall-SPSolution هو:

  1. تمت جدولة مهمة لسحب الحل.
  2. يتم تنفيذ المهمة ويحاول سحب الحل.
  3. تقوم المهمة بإنشاء SPFeatureReceiver جديد لاستدعاء ميزة إلغاء التثبيت.
  4. يستدعي المُنشئ SPFeatureReceiver (الثابت) التعليمات البرمجية التي ستحاول إنشاء الجذر، وفي داخله، ينتهي الأمر بطرح StackOverflowException.
  5. أتلقى رسالة منبثقة تشير إلى أن OWSTIMER.exe واجه استثناءً، وتسألني عما إذا كنت أرغب في تصحيح الأخطاء.
  6. تتم إعادة تشغيل OWSTIMER.exe والرجوع إلى الخطوة رقم 2.

ومن هنا السؤال:كيفية التراجع عن حل غير قابل للسحب؟

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

المحلول

هل حاولت التعليق على الكود المخالف، وإعادة البناء/إعادة التعبئة، ثم تشغيل ملف Update-SPSolution يأمر؟

ال FeatureUninstalling يحدث الحدث عند الإزالة، وأعتقد أنه لن يتم استدعاؤه عند الترقية (وهذا ما حدث FeatureUpgrading الحدث ل).

إذا تمكنت من الترقية بنجاح واستبدال الكود المخالف، فستتمكن بعد ذلك من إزالة الحل بأمان.

عند التفكير مرة أخرى، لن ينجح اقتراحي أعلاه، لأنه إذا حدث هذا الاستثناء في المنشئ، بدلاً من الحدث، فمن الواضح أنه سيظل يتم استدعاؤه بغض النظر عن طريقة تعديل الحل (الترقية مقابل الترقية).الغاء التثبيت).يمكنك استبدال ملف .dll يدويًا في GAC بعد إزالة الكود المخالف، ثم محاولة التراجع.

نصائح أخرى

لقد كانت لدي فكرة مماثلة ل إجابة @ RJ Cuthbertson فيما يتعلق بـ GAC، لكنه لن يسمح لي بإلغاء تثبيت أي شيء من هناك. حتى وجدت هذا:

مهم!لا تفعل ذلك مطلقًا على نظام الإنتاج، وقم دائمًا بإعادة تشغيله بعد ذلك.

  1. افتح سياسة الأمان المحلية MMC

  2. انتقل إلى إعدادات الأمان -> السياسات المحلية -> خيارات الأمان

  3. حدد موقع "التحكم في حساب المستخدم:قم بتشغيل جميع المسؤولين في موافقة المسؤول" وقم بتغيير الإعداد من ممكّن إلى معطل

  4. أعد التشغيل والآن يمكن حذف التجميعات.

  5. اتبع الخطوات المذكورة أعلاه لإعادة تمكين إعداد سياسة الأمان المحلية وإعادة التشغيل مرة أخرى لإعادة تطبيقه.

بعد الخطوة رقم 4 أعلاه، تمكنت من إزالة Castle.Windsor.dll من GAC، وبعد ذلك، نجحت عملية التراجع/إلغاء التثبيت/الإزالة.

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