Ein Ansatz zum Debuggen von Lösungen für SharePoint

  • Tutorial
Sie sind natürlich mit den möglichen Optionen für das Debuggen von Lösungen vertraut, die für SharePoint entwickelt und darin platziert werden. Wenn nicht, können Sie hier oder hier mehr darüber lesen , und ich werde nur kurz eine Abfolge möglicher Aktionen angeben.

Im Artikel selbst werde ich einen der Ansätze beschreiben, die dazu beitragen, das Debuggen der Geschäftslogik Ihrer Lösung zu vereinfachen.

Der Standardprozess zum Aktivieren des Debuggens und der Prozess selbst lauten wie folgt:

  1. Debugging in web.config aktivieren
    • CallStack = "true"
    • customErrors mode = "Aus"
    • compilation debug = "true"

  2. Debugging-Prozess
    • Prozessverbindung w3wp.exe / SPUCWorkerProcess.exe / OWSTimer.exe;
    • Festlegen der erforderlichen Haltepunkte;
    • Durchführen des erforderlichen Vorgangs und schrittweises Debuggen des Codes.



Nach jeder Änderung des Codes muss diese Lösung in SharePoint geladen werden, um das Debuggen auf diese Weise zu ermöglichen. Dies geht mit vielen zusätzlichen Vorgängen einher, z. B. dem Aufrufen einer vorhandenen Lösung, dem Hinzufügen einer neuen Lösung, dem Reaktivieren von Funktionen, dem Leeren des Caches usw. Bei jeder solchen Bereitstellung spielt es keine Rolle, ob sie im Studio oder manuell ausgeführt wird. Jeder einzelne Start dieser Art von Debugging nimmt viel Zeit in Anspruch. Wenn Sie nach jeder Änderung versuchen, den Code zu debuggen, dauert der Debugging-Vorgang viel länger als der eigentliche Entwicklungsprozess. Ein ähnlicher Ansatz hat natürlich ein großes Plus: Der Programmierer gewöhnt sich schnell daran, funktionsfähigen Code mit einer minimalen Anzahl von Debug-Prozessen zu schreiben.

Standard-Debugging-Prozess für SharePointNatürlich sind wir auch sehr praktisch. Ohne es, als ob ohne Hände, wenn die Entwicklung für mehr / weniger wichtige Daten debuggt werden muss oder wenn Ereignisse in SharePoint berücksichtigt werden müssen . Aber jetzt geht es nicht darum.

Die vorgeschlagene Option ist sehr einfach. Dies ist die Erstellung einer Konsolenanwendung, in der Objekte unserer Geschäftslogik erstellt, Methoden aufgerufen, Ergebnisse aufgezeichnet usw. werden. Anscheinend wird sofort alles klar, aber es ist besser, ein ähnliches Projekt Schritt für Schritt zu erstellen und zu prüfen, welche Probleme auftreten können und wie sie gelöst werden können:

1. Erstellen Sie ein neues Projekt mit der SharePoint 2013- Vorlage - Leeres Projekt und nennen Sie es SharePointApplication :


2. Wir geben die Art der Lösung an (Farm-Lösung. Wissen Sie, was der Unterschied zwischen Farm- und Sandbox-Lösung ist? Jetzt werden wir in einem anderen Artikel nicht näher darauf eingehen) und geben die Adresse unserer Websitesammlung in SharePoint an:


3. Erstellen Sie als Nächstes ein einfaches Beispiel und ohne großen Sinn die DEMO- Klasse mit der Erweiterungsmethode der SPWeb- Klasse , die für die Aktualisierung der gefilterten Listen dieses Knotens hinsichtlich der Eigenschaft verantwortlich ist, die für das Öffnen von Listenformularen in einem modalen Fenster verantwortlich ist oder nicht:

  • Fügen Sie dem Projekt eine neue Klasse hinzu und nennen Sie sie Demo.cs:



  • Fügen Sie in der Klasse den folgenden Code ein:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Microsoft.SharePoint;
    namespace SharePointApplication
    {
        static public class Demo
        {
            public static void UpdateNoDialog(this SPWeb Web, string Filter)
            {
                var Lists = new List();
                if (!String.IsNullOrEmpty(Filter))
                {
                    Lists = Web.Lists.Cast()
                              .Where(x => x.Title.ToLower().IndexOf(Filter.ToLower(), System.StringComparison.Ordinal) != -1)
                              .ToList();
                }
                Lists.ForEach(x =>
                {
                    x.NavigateForFormsPages = true;
                    x.Update();
                });
            }
        }
    }
    

  • Das Ergebnis ist das folgende Bild:


4. Erstellen Sie ein Webpart mit einem Filtereingabefeld und einer Aufruftaste für diese Methode:
  • Fügen Sie dem Projekt ein neues Webpart hinzu und nennen Sie es DemoWebPart

  • In der diesem Webpart zugeordneten Datei Elements.xml müssen Sie den Namen der Gruppe ( DemoGroup ) angeben, in der der erstellte Webpart angezeigt wird:

    
      
        
          
        
      

  • In der Datei DemoWebPart.webpart müssen Sie den Anzeigetitel und die Beschreibung des Webparts angeben:

    
      
        
          
          $Resources:core,ImportErrorMessage;
        
        
          
            Демонстрационная веб-часть
            Веб-часть для обновления списков по фильтру
          
        
      


  • In der Datei DemoWebPart.ascx müssen Sie den folgenden Code schreiben:
    <%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
    <%@ Assembly Name="Microsoft.Web.CommandUI, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
    <%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
    <%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
    <%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
    <%@ Import Namespace="Microsoft.SharePoint" %> 
    <%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="DemoWebPart.ascx.cs" Inherits="SharePointApplication.DemoWebPart.DemoWebPart" %>
    



  • In der Datei DemoWebPart.ascx.cs müssen Sie die Funktion hinzufügen:

    protected void ExecuteButton_OnClick(object sender, EventArgs e)
    {
    	try
    	{
    		SPContext.Current.Web.UpdateNoDialog(FilterBox.Text);
    		ResultLabel.Text = DateTime.Now.ToString()+" Завершено!";
    		ResultLabel.Visible = true;
    		ResultLabel.ForeColor = System.Drawing.Color.Green;
    	}
    	catch (Exception Error)
    	{
    		//Тут мы еще должны записать ошибку в лог.
    		ResultLabel.Text = DateTime.Now.ToString() + " Произошла ошибка! " + Error.Message;
    		ResultLabel.Visible = true;
    		ResultLabel.ForeColor = System.Drawing.Color.Red;                
    	}
    }
    



5. Stellen Sie die Lösung auf unserer Website


bereit. 6. Platzieren Sie das gewünschte Webpart auf der Seite und überprüfen Sie die Leistung.
  • Gehen Sie zu der Seite, auf der wir den Webpart hosten möchten

  • Klicken Sie im Menüband auf Seite - Ändern:

  • Wählen Sie im geänderten Formular Einfügen - Webpart - DemoGroup - Demo-Webpart und die Schaltfläche Hinzufügen aus:


     


  • Geben Sie den Filterwert an (z. B. MyLists) und klicken Sie auf die Schaltfläche Ausführen:


7. Wenn nun ein Fehler aufgetreten ist und nach der Ursache des Problems gesucht werden musste, müssen Sie den w3wp-Prozess verbinden und überwachen, was passiert, den Code ändern, erneut bereitstellen, überprüfen und so weiter. Der Hauptteil der Überprüfungen (zumindest die Geschäftslogik) kann in der Konsolenanwendung überprüft werden.

8. Fügen Sie unserer Lösung eine neue Konsolenanwendung hinzu und nennen Sie sie ExecuteApplication.




9. Ändern Sie den Anwendungsstartmodus auf die x64-Plattform.
  • Gehen Sie zu den Projekteigenschaften:

  • Wechseln Sie zur Registerkarte "Erstellen" und geben Sie x64 im Feld "Ziel ausführen" an:



10. Installieren Sie die Konsolenanwendung mit dem auszuführenden Projekt:


11. Verbinden Sie die Bibliothek des benachbarten Projekts, in dem sich unsere Objekte und Methoden befinden, mit dem Projekt:




12. Stellen Sie in der Hauptmethode der Konsolenanwendung eine Verbindung zu unserer SharePoint-Site her, in deren Kontext wir arbeiten und die erforderliche Funktion aufrufen wir wollen überprüfen. Der Beispielcode lautet wie folgt:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.SharePoint;
using SharePointApplication;
namespace ExecuteApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var Site = new SPSite("http://cib_dev3/a/snitko/"))
            {
                using (var Web = Site.RootWeb)
                {
                    Web.UpdateNoDialog("MyLists");
                }
            }
        }
    }
}


13. Führen Sie das Projekt aus und überwachen Sie in Echtzeit, was passiert:


14. Wenn der folgende Fehler angezeigt wird ( Microsoft SharePoint wird im 32-Bit-Prozess nicht unterstützt. Verwenden Sie die ausführbare 64-Bit-Datei.), Haben wir wahrscheinlich die Position 9 nicht erfüllt Manchmal sieht der Fehler anders aus (zum Beispiel, dass die Site nicht verfügbar ist), aber das Wesentliche des Fehlers ist dasselbe:


15. Wenn nach Änderungen in der Klasse und dem nächsten Start des Projekts der folgende Fehler auftritt ( Methode nicht gefunden: "Void SharePointApplication.Demo.UpdateNoDialogNew (Microsoft. SharePoint.SPWeb, System.String) „) ,. :


In diesem Fall liegt es wahrscheinlich daran, dass die Assembly aus der benachbarten Lösung sowohl lokal (im Projekt) als auch im GAC vorhanden ist. Im GAC ist die Assembly jedoch älter, aber beim Start hat sie höhere Priorität. Es stellt sich also heraus, dass das Studio beim Schreiben von Code keine Fehler erzeugt, da es die lokale Assembly verwendet. Beim Starten der Lösung wird gemeldet, dass die Assembly (die sich im GAC befindet) nicht über die von Ihnen aufgerufenen Methoden verfügt. Dazu müssen Sie die geänderte Bibliothek des benachbarten Projekts in den GAC stellen, bevor Sie die Konsolenanwendung starten.

  • Need gacutil.exe finden (Teil des Windows SDK. Nehmen Sie die Dose, zum Beispiel hier ), einen Ordner im Dateisystem erstellen und den Inhalt des Archivs in den Ordner. Zum Beispiel C: \ gacutil.
  • Wechseln Sie zum SharePointApplication-Projekt (mit der Hauptgeschäftslogik) und zu den Projekteigenschaften auf der Registerkarte "Ereignisse erstellen":

  • Geben Sie im Feld Post Build Event den folgenden Code ein:
    "C:\gacutil\gacutil.exe" /i "$(TargetPath)
    


  • Es stellte sich heraus, dass sie die Installation der endgültigen Bibliothek des aktuellen Projekts (die sich im Pfad $ (TargetPath) befindet - das ist die Visual Studio-Konstante, die selbst den erforderlichen Pfad bildet) mit dem Dienstprogramm gacutil zum GAC hinzugefügt haben .
  • Infolgedessen tritt der Fehler beim Starten der Konsolenanwendung nicht mehr auf.



Herzlichen Glückwunsch ! Der Debugging-Prozess der Kerngeschäftslogik funktioniert jetzt auf ur.

Heute haben wir einen der Ansätze für ein bequemeres und schnelleres Debuggen von Lösungen auf SharePoint sowie mehrere allgemeine Probleme untersucht, auf die ein Entwickler bei der Verwendung dieses Ansatzes stoßen kann.


Jetzt auch beliebt: