Frage

Sieht so aus, als hätte ich beim Testen mit einem Sharepoint-Beispielprojekt einen ziemlich großen Fehler gemacht.Ironischerweise habe ich versucht, eine komponententestbare Lösung zu entwickeln, ohne zuerst viele der Tests zu schreiben.Ich bin noch ziemlich neu in SharePoint und wollte herausfinden, was ich mit SP und IoC machen kann / kann.

Ohne zu sehr ins Detail zu gehen, habe ich versehentlich einen Code geschrieben, der rekursiv ist und am Ende eine StackOverflowException auslöst.Keine große Sache, oder?Ziehen Sie einfach die Lösung zurück und entfernen Sie sie.Das Problem ist, dass dieser Code während eines Lösungsfeatures aufgerufen wird FeatureUninstalling verfahren in einer SPFeatureReceiver.

(Naja, nicht genau.Der Code wird während des Aufrufs aufgerufen SPFeatureReceiverstatischer Konstruktor.Wenn Sie sich fragen, warum, habe ich versucht, das Stammverzeichnis mit Castle Windsor zu erstellen, um Abhängigkeiten einzufügen, die während der Featureinstallations- und Featureuninstallationsmethoden verwendet werden können.)

Was passiert also, wenn Sie versuchen, entweder den zentralen Webadministrator oder Uninstall-SPSolution zu verwenden:

  1. Ein Job ist geplant, um die Lösung zurückzuziehen.
  2. Der Job wird ausgeführt und versucht, die Lösung zurückzuziehen.
  3. Der Job erstellt einen neuen SPFeatureReceiver, um FeatureUninstalling aufzurufen.
  4. Der (statische) SPFeatureReceiver-Konstruktor ruft Code auf, der versucht, das Stammverzeichnis zu erstellen, und löst dort eine StackOverflowException aus.
  5. Ich erhalte eine Popup-Nachricht, die angibt, dass OWSTIMER.exe hat eine Ausnahme festgestellt und fragt, ob ich debuggen möchte.
  6. OWSTIMER.exe startet neu und kehrt zu Schritt 2 zurück.

Daher die Frage:Wie ziehe ich eine nicht zurückziehbare Lösung zurück?

War es hilfreich?

Lösung

Haben Sie versucht, den fehlerhaften Code auszukommentieren, neu zu erstellen / neu zu verpacken und dann eine auszuführen Update-SPSolution befehl?

Der FeatureUninstalling ereignis tritt beim Entfernen auf, und ich glaube, es wird beim Upgrade nicht aufgerufen (das ist, was die FeatureUpgrading veranstaltung ist für).

Wenn Sie ein Upgrade erfolgreich durchführen und den fehlerhaften Code ersetzen können, können Sie die Lösung sicher entfernen.

Beim zweiten Gedanken würde mein obiger Vorschlag nicht funktionieren, denn wenn diese Ausnahme im Konstruktor und nicht im Ereignis auftritt, würde dies offensichtlich unabhängig von der Lösungsänderungsmethode (Upgrade vs.Deinstallieren).Sie könnten das manuell ersetzen.dll im GAC, nachdem der fehlerhafte Code entfernt und dann ein Zurückziehen versucht wurde.

Andere Tipps

Ich hatte eine ähnliche Idee wie @RJ Cuthbertsons Antwort in Bezug auf den GAC, aber es würde mich nichts von dort deinstallieren lassen. Bis ich das gefunden habe:

WICHTIG!Tun Sie dies niemals auf einem Produktionssystem und schalten Sie es danach immer wieder ein.

  1. Öffnen Sie die lokale Sicherheitsrichtlinie MMC

  2. Gehe zu Sicherheitseinstellungen -> Lokale Richtlinien -> Sicherheitsoptionen

  3. Suchen Sie nach "Benutzerkontensteuerung:Führen Sie alle Administratoren in der Administratorgenehmigung aus"und ändern Sie die Einstellung von Aktiviert in Deaktiviert

  4. Starten Sie neu und jetzt können die Assemblys gelöscht werden.

  5. Führen Sie die obigen Schritte aus, um die Einstellung der lokalen Sicherheitsrichtlinie wieder zu aktivieren, und starten Sie sie erneut, um sie erneut anzuwenden.

Nach Schritt 4 oben konnte ich Castle entfernen.Windsor.dll vom GAC, und danach funktionierte das Zurückziehen / Deinstallieren / Entfernen alles.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top