Exemplarische Vorgehensweise: Erstellen eines benutzerdefinierten Bereitstellungsschritts für SharePoint-Projekte

Wenn Sie ein SharePoint-Projekt bereitstellen, führt Visual Studio 2010 in einer bestimmten Reihenfolge eine Reihe von Bereitstellungsschritten aus. Visual Studio enthält viele integrierte Bereitstellungsschritte, Sie können aber auch eigene Schritte erstellen.

In dieser exemplarischen Vorgehensweise erstellen Sie einen benutzerdefinierten Bereitstellungsschritt, um Projektmappen auf einem SharePoint-Server zu aktualisieren. Visual Studio beinhaltet integrierte Bereitstellungsschritte für viele Aufgaben, z. B. für das Zurücknehmen oder Hinzufügen von Projektmappen, es ist jedoch kein Bereitstellungsschritt zum Aktualisieren von Projektmappen enthalten. Beim Bereitstellen einer SharePoint-Lösung nimmt Visual Studio normalerweise zuerst die Projektmappe (sofern bereits bereitgestellt) zurück und stellt dann die ganze Projektmappe erneut bereit. Weitere Informationen zu den integrierten Bereitstellungsschritten finden Sie unter Bereitstellen von SharePoint-Lösungspaketen.

Diese exemplarische Vorgehensweise enthält die folgenden Aufgaben:

  • Erstellen einer Visual Studio-Erweiterung, die zwei Hauptaufgaben ausführt:

    • Es wird ein benutzerdefinierter Bereitstellungsschritt definiert, um SharePoint-Lösungen zu aktualisieren.

    • Es wird eine Projekterweiterung erstellt, die eine neue Bereitstellungskonfiguration definiert. Eine Bereitstellungskonfiguration ist ein Satz von Bereitstellungsschritten, die für ein bestimmtes Projekt ausgeführt werden. Die neue Bereitstellungskonfiguration beinhaltet den benutzerdefinierten Bereitstellungsschritt und mehrere integrierte Bereitstellungsschritte.

  • Erstellen von zwei benutzerdefinierten SharePoint-Befehlen, die von der Erweiterungsassembly aufgerufen werden. SharePoint-Befehle sind Methoden, die von Erweiterungsassemblys aufgerufen werden können, um APIs im SharePoint-Serverobjektmodell zu verwenden. Weitere Informationen finden Sie unter Aufrufe in die SharePoint-Objektmodelle.

  • Erstellen eines Visual Studio-Erweiterungspakets (VSIX) zum Bereitstellen beider Assemblys.

  • Testen des neuen Bereitstellungsschritts.

Vorbereitungsmaßnahmen

Zum Durchführen dieser exemplarischen Vorgehensweise werden auf dem Entwicklungscomputer die folgenden Komponenten benötigt:

Kenntnisse der folgenden Konzepte sind hilfreich, wenn auch für die Durchführung der exemplarischen Vorgehensweise nicht erforderlich:

Erstellen der Projekte

Zum Abschließen dieser exemplarischen Vorgehensweise müssen Sie drei Projekte erstellen:

  • Ein VSIX-Projekt für die Erstellung des VSIX-Pakets zum Bereitstellen der Erweiterung.

  • Ein Klassenbibliotheksprojekt, von dem die Erweiterung implementiert wird. Für dieses Projekt muss .NET Framework 4 als Zielversion verwendet werden.

  • Ein Klassenbibliotheksprojekt, das die benutzerdefinierten SharePoint-Befehle definiert. Für dieses Projekt muss .NET Framework 3.5 als Zielversion verwendet werden.

Beginnen Sie mit der exemplarischen Vorgehensweise, indem Sie beide Projekte erstellen.

So erstellen Sie das VSIX-Projekt

  1. Starten Sie Visual Studio.

  2. Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.

  3. Erweitern Sie im Dialogfeld Neues Projekt den Knoten Visual C# oder Visual Basic, und klicken Sie dann auf Erweiterungen.

    Tipp

    Der Knoten Erweiterungen ist nur verfügbar, wenn Sie Visual Studio 2010 SDK installieren. Weitere Informationen finden Sie im Abschnitt zu den erforderlichen Komponenten und Voraussetzungen weiter oben.

  4. Wählen Sie im Kombinationsfeld am oberen Rand des Dialogfelds .NET Framework 4 aus.

  5. Klicken Sie auf die Vorlage VSIX Project.

  6. Geben Sie im Feld Name die Zeichenfolge UpgradeDeploymentStep ein.

  7. Klicken Sie auf OK.

    Visual Studio fügt das UpgradeDeploymentStep-Projekt zum Projektmappen-Explorer hinzu.

So erstellen Sie das Erweiterungsprojekt

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektmappenknoten, klicken Sie auf Hinzufügen und dann auf Neues Projekt.

    Tipp

    In Visual Basic-Projekten wird der Projektmappenknoten nur im Projektmappen-Explorer angezeigt, wenn das Kontrollkästchen Projektmappe immer anzeigen in Allgemein, Projekte und Projektmappen, Dialogfeld "Optionen" aktiviert ist.

  2. Erweitern Sie im Dialogfeld Neues Projekt den Knoten Visual C# oder Visual Basic, und klicken Sie anschließend auf Windows.

  3. Wählen Sie im Kombinationsfeld am oberen Rand des Dialogfelds die Option .NET Framework 4 aus.

  4. Wählen Sie die Projektvorlage Klassenbibliothek aus.

  5. Geben Sie im Feld Name den Namen DeploymentStepExtension ein.

  6. Klicken Sie auf OK.

    Visual Studio fügt das Projekt DeploymentStepExtension der Projektmappe hinzu und öffnet die standardmäßige Class1-Codedatei.

  7. Löschen Sie die Class1-Codedatei aus dem Projekt.

So erstellen Sie das SharePoint-Befehlsprojekt

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektmappenknoten, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Neues Projekt.

    Tipp

    In Visual Basic-Projekten wird der Projektmappenknoten nur im Projektmappen-Explorer angezeigt, wenn das Kontrollkästchen Projektmappe immer anzeigen in Allgemein, Projekte und Projektmappen, Dialogfeld "Optionen" aktiviert ist.

  2. Erweitern Sie im Dialogfeld Neues Projekt hinzufügen Visual C# oder Visual Basic, und klicken Sie dann auf Windows.

  3. Klicken Sie auf die Projektvorlage Klassenbibliothek.

  4. Wählen Sie im Kombinationsfeld am oberen Rand des Dialogfelds .NET Framework 3.5 aus.

  5. Geben Sie im Feld Name die Zeichenfolge SharePointCommands ein.

  6. Klicken Sie auf OK.

    Visual Studio fügt der Projektmappe das Projekt SharePointCommands hinzu und öffnet die Class1-Standardcodedatei.

  7. Löschen Sie die Class1-Codedatei aus dem Projekt.

Konfigurieren der Projekte

Bevor Sie Code für den benutzerdefinierten Bereitstellungsschritt schreiben, müssen Sie Codedateien und Assemblyverweise hinzufügen und die Projekte konfigurieren.

So konfigurieren Sie das Projekt "DeploymentStepExtension"

  1. Fügen Sie im Projekt DeploymentStepExtension zwei Codedateien mit den folgenden Namen hinzu:

    • UpgradeStep

    • DeploymentConfigurationExtension

  2. Klicken Sie im Menü Projekt auf Verweis hinzufügen.

  3. Halten Sie die Taste STRG gedrückt, und wählen Sie auf der Registerkarte .NET die folgenden Assemblys aus. Klicken Sie dann auf OK.

    • Microsoft.VisualStudio.SharePoint

    • System.ComponentModel.Composition

So konfigurieren Sie das SharePointCommands-Projekt

  1. Fügen Sie im Projekt SharePointCommands eine Codedatei mit dem Namen Commands hinzu.

  2. Klicken Sie im Projektmappen-Explorer auf den Projektknoten SharePointCommands.

  3. Klicken Sie im Menü Projekt auf Verweis hinzufügen.

  4. Halten Sie die Taste STRG gedrückt, und wählen Sie auf der Registerkarte .NET die folgenden Assemblys aus. Klicken Sie dann auf OK.

    • Microsoft.SharePoint

    • Microsoft.VisualStudio.SharePoint.Commands

Definieren des benutzerdefinierten Bereitstellungsschritts

Erstellen Sie eine Klasse, die den Upgradebereitstellungsschritt definiert. Um den Bereitstellungsschritt zu definieren, implementiert die Klasse die IDeploymentStep-Schnittstelle. Implementieren Sie diese Schnittstelle immer dann, wenn Sie einen benutzerdefinierten Bereitstellungsschritt definieren möchten.

So definieren Sie den benutzerdefinierten Bereitstellungsschritt

  1. Doppelklicken Sie im Projekt DeploymentStepExtension auf die UpgradeStep-Codedatei.

  2. Fügen Sie folgenden Code in die Datei ein.

    Tipp

    Nach dem Hinzufügen dieses Codes weist das Projekt mehrere Kompilierungsfehler auf. Diese Fehler werden durch Code behoben, den Sie in späteren Schritten hinzufügen.

    Imports System
    Imports Microsoft.VisualStudio.SharePoint
    Imports Microsoft.VisualStudio.SharePoint.Deployment
    Imports System.ComponentModel.Composition
    
    Namespace Contoso.DeploymentSteps.Upgrade
    
        ' Export attribute: Enables Visual Studio to discover and load this deployment step.
        ' DeploymentStep attribute: Specifies the ID for this new deployment step.
        ' UpgradeStep class: Defines a new deployment step that can be used to upgrade a solution 
        '     on a SharePoint site.
        <Export(GetType(IDeploymentStep))> _
        <DeploymentStep("Contoso.DeploymentSteps.UpgradeSolution")> _
        Friend Class UpgradeStep
            Implements IDeploymentStep
    
            Private solutionName As String
            Private solutionFullPath As String
    
            Private Sub Initialize(ByVal stepInfo As IDeploymentStepInfo) _
                Implements IDeploymentStep.Initialize
                stepInfo.Name = "Upgrade solution"
                stepInfo.StatusBarMessage = "Upgrading solution..."
                stepInfo.Description = "Upgrades the solution on the local machine."
            End Sub
    
            ' Specifies whether the solution can be upgraded.
            Private Function CanExecute(ByVal context As IDeploymentContext) As Boolean _
                Implements IDeploymentStep.CanExecute
    
                ' SharePoint returns all the installed solutions names in lower case.
                solutionName = (context.Project.Package.Model.Name & ".wsp").ToLower()
                solutionFullPath = context.Project.Package.OutputPath
                Dim solutionExists As Boolean = _
                    context.Project.SharePointConnection.ExecuteCommand(Of String, Boolean)(
                    "Contoso.Commands.IsSolutionDeployed", solutionName)
    
                ' Throw exceptions in error cases because deployment cannot proceed.
                If context.Project.IsSandboxedSolution = True Then
                    Dim sandboxMessage As String = "Cannot upgrade the solution. Upgrade deployment " & _
                        "configuration does not support Sandboxed solutions."
                    context.Logger.WriteLine(sandboxMessage, LogCategory.Error)
                    Throw New InvalidOperationException()
                ElseIf solutionExists = False Then
                    Dim notDeployedMessage As String = String.Format("Cannot upgrade the solution. The IsSolutionDeployed " & _
                        "command cannot find the following solution on the SharePoint site: {0}.", solutionName)
                    context.Logger.WriteLine(notDeployedMessage, LogCategory.Error)
                    Throw New InvalidOperationException(notDeployedMessage)
                End If
    
                ' Execute step and continue with deployment.
                Return True
            End Function
    
            Private Sub Execute(ByVal context As IDeploymentContext) _
                Implements IDeploymentStep.Execute
                context.Logger.WriteLine("Upgrading solution: " & solutionName, LogCategory.Status)
                context.Project.SharePointConnection.ExecuteCommand("Contoso.Commands.UpgradeSolution", _
                    solutionFullPath)
            End Sub
    
        End Class
    End Namespace
    
    using System;
    using Microsoft.VisualStudio.SharePoint;
    using Microsoft.VisualStudio.SharePoint.Deployment;
    using System.ComponentModel.Composition;
    
    namespace Contoso.DeploymentSteps.Upgrade
    {
        // Enables Visual Studio to discover and load this deployment step.
        [Export(typeof(IDeploymentStep))]
    
        // Specifies the ID for this new deployment step.
        [DeploymentStep("Contoso.DeploymentSteps.UpgradeSolution")]
    
        // Defines a new deployment step that can be used to upgrade a solution on a SharePoint site.
        internal class UpgradeStep : IDeploymentStep
        {
            private string solutionName;
            private string solutionFullPath;
    
            // Implements IDeploymentStep.Initialize.
            public void Initialize(IDeploymentStepInfo stepInfo)
            {
                stepInfo.Name = "Upgrade solution";
                stepInfo.StatusBarMessage = "Upgrading solution...";
                stepInfo.Description = "Upgrades the solution on the local machine.";
            }
    
            // Implements IDeploymentStep.CanExecute. Specifies whether the solution can be upgraded.
            public bool CanExecute(IDeploymentContext context)
            {
                // SharePoint returns all the installed solutions names in lower case.
                solutionName = (context.Project.Package.Model.Name + ".wsp").ToLower();
                solutionFullPath = context.Project.Package.OutputPath;
                bool solutionExists = context.Project.SharePointConnection.ExecuteCommand<string, bool>(
                    "Contoso.Commands.IsSolutionDeployed", solutionName);
    
                // Throw exceptions in error cases because deployment cannot proceed.
                if (context.Project.IsSandboxedSolution)
                {
                    string sandboxMessage = "Cannot upgrade the solution. The upgrade deployment configuration " +
                        "does not support Sandboxed solutions.";
                    context.Logger.WriteLine(sandboxMessage, LogCategory.Error);
                    throw new InvalidOperationException(sandboxMessage);
                }
                else if (!solutionExists)
                {
                    string notDeployedMessage = string.Format("Cannot upgrade the solution. The IsSolutionDeployed " +
                        "command cannot find the following solution: {0}.", solutionName);
                    context.Logger.WriteLine(notDeployedMessage, LogCategory.Error);
                    throw new InvalidOperationException(notDeployedMessage);
                }
    
                // Execute step and continue with deployment.
                return true;
            }
    
            // Implements IDeploymentStep.Execute.
            public void Execute(IDeploymentContext context)
            {
                context.Logger.WriteLine("Upgrading solution: " + solutionName, LogCategory.Status);
                context.Project.SharePointConnection.ExecuteCommand("Contoso.Commands.UpgradeSolution",
                    solutionFullPath);
            }
        }
    }
    

Erstellen einer Bereitstellungskonfiguration, die den benutzerdefinierten Bereitstellungsschritt beinhaltet

Erstellen Sie eine Projekterweiterung für die neue Bereitstellungskonfiguration. Die neue Bereitstellungskonfiguration beinhaltet mehrere integrierte Bereitstellungsschritte und den neuen Bereitstellungsschritt für die Aktualisierung. Mit dieser Bereitstellungskonfiguration können SharePoint-Entwickler den Bereitstellungsschritt für Aktualisierungen sehr viel einfacher in SharePoint-Projekten verwenden.

Um die Bereitstellungskonfiguration zu erstellen, implementiert die Klasse die ISharePointProjectExtension-Schnittstelle. Implementieren Sie diese Schnittstelle immer dann, wenn Sie eine SharePoint-Projekterweiterung erstellen möchten.

So erstellen Sie die Bereitstellungskonfiguration

  1. Doppelklicken Sie im Projekt DeploymentStepExtension auf die DeploymentConfigurationExtension-Codedatei.

  2. Fügen Sie folgenden Code in die Datei ein.

    Imports Microsoft.VisualStudio.SharePoint
    Imports Microsoft.VisualStudio.SharePoint.Deployment
    Imports System.ComponentModel.Composition
    
    Namespace Contoso.DeploymentSteps.Upgrade
    
        ' Export attribute: Enables Visual Studio to discover and load this project-level extension.
        ' DeploymentConfigurationExtension class: Defines a project-level extension. The extension creates 
        '     a new deployment configuration that includes the upgrade deployment step.
        <Export(GetType(ISharePointProjectExtension))> _
        Friend Class DeploymentConfigurationExtension
            Implements ISharePointProjectExtension
    
            Private Sub Initialize(ByVal projectService As ISharePointProjectService) _
                Implements ISharePointProjectExtension.Initialize
                AddHandler projectService.ProjectInitialized, AddressOf ProjectInitialized
            End Sub
    
            ' Creates the new deployment configuration.
            Private Sub ProjectInitialized(ByVal Sender As Object, ByVal e As SharePointProjectEventArgs)
                Dim deploymentSteps As String() = New String() _
                {
                    DeploymentStepIds.PreDeploymentCommand, _
                    DeploymentStepIds.RecycleApplicationPool, _
                    "Contoso.DeploymentSteps.UpgradeSolution", _
                    DeploymentStepIds.PostDeploymentCommand _
                }
                Dim retractionSteps As String() = New String() _
                {
                    DeploymentStepIds.RecycleApplicationPool, _
                    DeploymentStepIds.RetractSolution
                }
                Dim configuration As IDeploymentConfiguration = e.Project.DeploymentConfigurations.Add( _
                    "Upgrade", deploymentSteps, retractionSteps)
                configuration.Description = "This is the upgrade deployment configuration"
            End Sub
    
        End Class
    End Namespace
    
    using Microsoft.VisualStudio.SharePoint;
    using Microsoft.VisualStudio.SharePoint.Deployment;
    using System.ComponentModel.Composition;
    
    namespace Contoso.DeploymentSteps.Upgrade
    {
        // Enables Visual Studio to discover and load this project-level extension.
        [Export(typeof(ISharePointProjectExtension))]
    
        // Defines a project-level extension. The extension creates a new deployment configuration that includes the
        // upgrade deployment step.
        internal class DeploymentConfigurationExtension : ISharePointProjectExtension
        {
            // Implements ISharePointProjectExtension.Initialize.
            public void Initialize(ISharePointProjectService projectService)
            {
                projectService.ProjectInitialized += ProjectInitialized;
            }
    
            // Creates the new deployment configuration.
            private void ProjectInitialized(object sender, SharePointProjectEventArgs e)
            {
                string[] deploymentSteps = new string[] 
                {
                    DeploymentStepIds.PreDeploymentCommand,
                    DeploymentStepIds.RecycleApplicationPool,
                    "Contoso.DeploymentSteps.UpgradeSolution",
                    DeploymentStepIds.PostDeploymentCommand 
                };
    
                string[] retractionSteps = new string[] 
                {
                    DeploymentStepIds.RecycleApplicationPool,
                    DeploymentStepIds.RetractSolution                
                };
    
                IDeploymentConfiguration configuration = e.Project.DeploymentConfigurations.Add(
                    "Upgrade", deploymentSteps, retractionSteps);
                configuration.Description = "This is the upgrade deployment configuration";
            }
        }
    }
    

Erstellen der benutzerdefinierten SharePoint-Befehle

Erstellen Sie zwei benutzerdefinierte Befehle, die einen Aufruf in das SharePoint-Serverobjektmodell durchführen. Ein Befehl ermittelt, ob bereits eine Projektmappe bereitgestellt wurde. Der zweite Befehl aktualisiert eine Projektmappe.

So definieren Sie die SharePoint-Befehle

  1. Doppelklicken Sie im Projekt SharePointCommands auf die Commands-Codedatei.

  2. Fügen Sie folgenden Code in die Datei ein.

    Imports System
    Imports System.IO
    Imports Microsoft.SharePoint
    Imports Microsoft.SharePoint.Administration
    Imports Microsoft.VisualStudio.SharePoint.Commands
    
    Namespace Contoso.DeploymentSteps.Upgrade
    
        Friend Class Commands
    
            ' Determines whether the specified solution has been deployed to the local SharePoint server.
            <SharePointCommand("Contoso.Commands.IsSolutionDeployed")> _
            Private Function IsSolutionDeployed(ByVal context As ISharePointCommandContext, ByVal solutionName As String) As Boolean
                Dim solution As SPSolution = SPFarm.Local.Solutions(solutionName)
                Return solution IsNot Nothing
            End Function
    
            ' Upgrades the specified solution to the local SharePoint server.
            <SharePointCommand("Contoso.Commands.UpgradeSolution")> _
            Private Sub UpgradeSolution(ByVal context As ISharePointCommandContext, ByVal fullWspPath As String)
                Dim solution As SPSolution = SPFarm.Local.Solutions(Path.GetFileName(fullWspPath))
                If solution Is Nothing Then
                    Throw New InvalidOperationException("The solution has not been deployed.")
                End If
                solution.Upgrade(fullWspPath)
            End Sub
    
        End Class
    End Namespace
    
    using System;
    using System.IO;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Administration;
    using Microsoft.VisualStudio.SharePoint.Commands;
    
    namespace Contoso.DeploymentSteps.Upgrade
    {
        internal class Commands
        {
            // Determines whether the specified solution has been deployed to the local SharePoint server.
            [SharePointCommand("Contoso.Commands.IsSolutionDeployed")]
            private bool IsSolutionDeployed(ISharePointCommandContext context, string solutionName)
            {
                SPSolution solution = SPFarm.Local.Solutions[solutionName];
                return solution != null;
            }
    
            // Upgrades the specified solution to the local SharePoint server.
            [SharePointCommand("Contoso.Commands.UpgradeSolution")]
            private void UpgradeSolution(ISharePointCommandContext context, string fullWspPath)
            {
                SPSolution solution = SPFarm.Local.Solutions[Path.GetFileName(fullWspPath)];
    
                if (solution == null)
                {
                    throw new InvalidOperationException("The solution has not been deployed.");
                }
    
                solution.Upgrade(fullWspPath);
            }
        }
    }
    

Checkpoint

An diesem Punkt in der exemplarischen Vorgehensweise ist der gesamte für den benutzerdefinierten Bereitstellungsschritt und die SharePoint-Befehle benötigte Code in die Projekte eingebunden. Erstellen Sie die Projektmappe, um sicherzustellen, dass beide Projekte ohne Fehler kompiliert werden.

So erstellen Sie die Projektmappe

  • Klicken Sie im Menü Erstellen auf Projektmappe erstellen.

Erstellen eines VSIX-Pakets zum Bereitstellen der Erweiterung

Zum Bereitstellen der Erweiterung erstellen Sie anhand des VSIX-Projekts in der Lösung ein VSIX-Paket. Konfigurieren Sie zuerst das VSIX-Paket, indem Sie die im VSIX-Projekt enthaltene Datei "source.extension.vsixmanifest" ändern. Erstellen Sie anschließend das VSIX-Paket, indem Sie die Lösung erstellen.

So erstellen und konfigurieren Sie das VSIX-Paket

  1. Doppelklicken Sie im Projektmappen-Explorer unter dem Projekt UpgradeDeploymentStep auf die Datei source.extension.vsixmanifest.

    Die Datei wird von Visual Studio im Manifest-Editor geöffnet. Die Datei "source.extension.vsixmanifest" bildet die Grundlage für die Datei "extension.vsixmanifest", die für alle VSIX-Pakete erforderlich ist. Weitere Informationen zu dieser Datei finden Sie unter VSIX Extension Schema Reference.

  2. Geben Sie im Feld Produktname den Namen Upgrade Deployment Step for SharePoint Projects ein.

  3. Geben Sie im Feld Autor den Namen Contoso ein.

  4. Geben Sie im Feld Beschreibung den Text Provides a custom upgrade deployment step that can be used in SharePoint projects ein.

  5. Klicken Sie im Editor im Abschnitt Inhalt auf die Schaltfläche Inhalt hinzufügen.

  6. Wählen Sie im Dialogfeld Inhalt hinzufügen im Listenfeldzum Auswählen eines Inhaltstyps die Option MEF-Komponente aus.

    Tipp

    Dieser Wert entspricht dem MefComponent-Element in der Datei "extension.vsixmanifest". Von diesem Element wird der Name einer Erweiterungsassembly im VSIX-Paket angegeben. Weitere Informationen finden Sie unter MEFComponent Element (VSX Schema).

  7. Aktivieren Sie unter Quelle auswählen das Optionsfeld Projekt, und wählen Sie im zugehörigen Listenfeld den Eintrag DeploymentStepExtension aus.

  8. Klicken Sie auf OK.

  9. Klicken Sie im Manifest-Editor erneut auf die Schaltfläche Inhalt hinzufügen.

  10. Wählen Sie im Dialogfeld Inhalt hinzufügen im Listenfeld zum Auswählen eines Inhaltstyps die Option Benutzerdefinierter Erweiterungstyp aus.

    Tipp

    Dieser Wert entspricht dem CustomExtension-Element in der Datei "extension.vsixmanifest". Dieses Element gibt eine benutzerdefinierte Erweiterung an, die Sie in die Visual Studio-Erweiterung einschließen möchten. Weitere Informationen finden Sie unter CustomExtension Element (VSX Schema).

  11. Geben Sie im Textfeld Typ den Text SharePoint.Commands.v4 ein.

    Tipp

    Dieser Wert entspricht dem Type-Attribut des CustomExtension-Elements in der Datei "extension.vsixmanifest". Der Wert Sharepoint.Commands.v4 muss für alle benutzerdefinierten Erweiterungsassemblys angegeben werden, die benutzerdefinierte SharePoint-Befehle enthalten.

  12. Aktivieren Sie unter Quelle auswählen das Optionsfeld Projekt, und wählen Sie im zugehörigen Listenfeld den Eintrag SharePointCommands aus.

  13. Klicken Sie auf OK.

  14. Klicken Sie im Menü Erstellen auf Projektmappe erstellen. Stellen Sie sicher, dass die Projektmappe fehlerfrei kompiliert werden kann.

  15. Öffnen Sie den Buildausgabeordner für das Projekt UpgradeDeploymentStep. Stellen Sie sicher, dass dieser Ordner jetzt die Datei UpgradeDeploymentStep.vsix enthält.

    Standardmäßig ist der Buildausgabeordner der Ordner "\bin\Debug" im Ordner mit der Projektdatei.

Vorbereiten des Tests für den Upgradebereitstellungsschritt

Um den Upgradebereitstellungsschritt zu testen, müssen Sie zuerst eine Beispielprojektmappe auf der SharePoint-Website bereitstellen. Debuggen Sie die Erweiterung zunächst in der experimentellen Instanz von Visual Studio. Erstellen Sie dann eine Listendefinition und eine Listeninstanz zum Testen des Bereitstellungsschritts, und stellen Sie diese auf der SharePoint-Website bereit. Anschließend bearbeiten Sie die Listendefinition und die Listeninstanz und stellen sie erneut bereit, um zu überprüfen, wie der Standardbereitstellungsprozess Projektmappen auf der SharePoint-Website überschreibt.

An späterer Stelle dieser exemplarischen Vorgehensweise ändern Sie die Listendefinition und Listeninstanz, um sie anschließend auf der SharePoint-Website zu aktualisieren.

So debuggen Sie die Erweiterung

  1. Starten Sie Visual Studio erneut mit Administratorrechten, und öffnen Sie die Projektmappe "UpgradeDeploymentStep".

  2. Öffnen Sie im Projekt "DeploymentStepExtension" die UpgradeStep-Codedatei, und fügen Sie in der ersten Codezeile in den CanExecute- und Execute-Methoden einen Haltepunkt hinzu.

  3. Drücken Sie die Taste F5, um mit dem Debuggen zu beginnen.

  4. Die Erweiterung wird unter "%UserProfile%\AppData\Local\Microsoft\VisualStudio\10.0Exp\Extensions\Contoso\Upgrade Deployment Step for SharePoint Projects\1.0" installiert, und eine experimentelle Instanz von Visual Studio wird gestartet. Sie testen den Upgradebereitstellungsschritt in dieser Instanz von Visual Studio.

So erstellen Sie die Listendefinition und die Listeninstanz

  1. Zeigen Sie in der experimentellen Instanz von Visual Studio im Menü Datei auf Neu, und klicken Sie dann auf Projekt.

  2. Erweitern Sie im Dialogfeld Neues Projekt den Eintrag Visual C#, erweitern Sie SharePoint, und klicken Sie dann auf 2010.

  3. Stellen Sie im Kombinationsfeld am oberen Rand des Dialogfelds sicher, dass .NET Framework 3.5 ausgewählt ist. Projekte für Microsoft SharePoint Foundation 2010 und Microsoft SharePoint Server 2010 erfordern diese Version von .NET Framework.

  4. Klicken Sie in der Liste der Projektvorlagen auf Listendefinition.

  5. Geben Sie im Feld Name die Zeichenfolge EmployeesListDefinition ein.

  6. Klicken Sie auf OK.

  7. Geben Sie im Assistenten zum Anpassen von SharePoint die URL der Website ein, die Sie zum Debugging verwenden möchten.

  8. Klicken Sie unter Wie lautet die Vertrauensebene für diese SharePoint-Lösung auf Als Farmlösung bereitstellen.

    Tipp

    Der Upgradebereitstellungsschritt unterstützt keine Sandkastenlösungen.

  9. Klicken Sie auf Weiter.

  10. Geben Sie auf der Seite Listendefinitionseinstellungen auswählen unter Wie lautet der Anzeigename der Listendefinition? den Namen Employees List ein.

  11. Wählen Sie unter Welchen Typ weist die Listendefinition auf? den Eintrag Kontakte aus.

  12. Stellen Sie sicher, dass das Kontrollkästchen Fügt eine Listeninstanz für diese Listendefinition hinzu aktiviert ist.

  13. Klicken Sie auf Fertig stellen.

    Visual Studio erstellt das Projekt und öffnet die Datei Elements.xml für die Listendefinition im Editor.

  14. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten EmployeesListDefinition, und klicken Sie auf Eigenschaften.

  15. Deaktivieren Sie auf der Registerkarte SharePoint der Projekteigenschaften das Kontrollkästchen Nach Debuggen automatisch zurückziehen.

  16. Erweitern Sie im Projektmappen-Explorer den Knoten ListDefinition1 und anschließend den untergeordneten Knoten ListInstance1.

  17. Doppelklicken Sie auf die Datei Elements.xml, die ein untergeordnetes Element des Knotens ListInstance1 ist. Die Datei Elements.xml wird im Editor geöffnet.

  18. Ersetzen Sie das Standard-XML in dieser Datei durch folgendes XML. Dieses XML ändert den Namen der Liste in Employees. Es fügt auch ein Element für einen Angestellten mit dem Namen Jim Hance hinzu.

    <?xml version="1.0" encoding="utf-8"?>
    <Elements xmlns="https://schemas.microsoft.com/sharepoint/">
      <ListInstance Title="Employees"
                    OnQuickLaunch="TRUE"
                    TemplateType="10000"
                    Url="Lists/Employees"
                    Description="Simple list to test upgrade deployment step">
        <Data>
          <Rows>
            <Row>
              <Field Name="Title">Hance</Field>
              <Field Name="FirstName">Jim</Field>
              <Field Name="Company">Contoso</Field>
            </Row>
          </Rows>
        </Data>
      </ListInstance>
    </Elements>
    

So stellen Sie die Listendefinition und die Listeninstanz bereit

  1. Klicken Sie mit der rechten Maustaste im Projektmappen-Explorer auf den Projektknoten EmployeesListDefinition.

  2. Stellen Sie im Eigenschaftenfenster sicher, dass die Eigenschaft Aktive Bereitstellungskonfiguration auf Standard festgelegt ist (dies ist die Standardeinstellung).

  3. Drücken Sie F5.

  4. Überprüfen Sie, ob das Projekt erfolgreich erstellt wird und die neue Liste Employees auf der SharePoint-Website geöffnet wird und einen Eintrag für Jim Hance enthält.

  5. Schließen Sie den Webbrowser.

So ändern Sie die Listendefinition und stellen die Listeninstanz erneut bereit

  1. Doppelklicken Sie im Projekt EmployeesListDefinition-Projekt auf die Datei Elements.xml, die ein untergeordnetes Element des Projektelements ListInstance1 ist.

  2. Entfernen Sie das Data-Element und die untergeordneten Elemente, um den Eintrag für Jim Hance aus der Liste zu entfernen. Wenn Sie fertig sind, sollte die Datei das folgende XML enthalten.

    <?xml version="1.0" encoding="utf-8"?>
    <Elements xmlns="https://schemas.microsoft.com/sharepoint/">
      <ListInstance Title="Employees"
                    OnQuickLaunch="TRUE"
                    TemplateType="10000"
                    Url="Lists/Employees"
                    Description="Simple list to test upgrade deployment step">
      </ListInstance>
    </Elements>
    
  3. Doppelklicken Sie auf die Datei Schema.xml, die ein untergeordnetes Element des Projektelements ListDefinition1 ist.

  4. Suchen Sie in dieser Datei nach der Zeichenfolge BaseViewID="1". Diese Zeichenfolge ist ein Attribut für ein View-Element, das Sie in den nächsten Schritten ändern.

  5. Suchen Sie unter diesem View-Element nach dem untergeordneten ViewFields-Element.

  6. Entfernen Sie unter dem ViewFields-Element die beiden untergeordneten FieldRef-Elemente, bei denen das Name-Attribut auf Attachments bzw. HomePhone festgelegt ist. Durch diese Aktion werden diese Felder nicht mehr in der Standardansicht der Liste Employees auf der SharePoint-Website angezeigt. Wenn Sie fertig sind, sollte das ViewFields-Element über den folgenden Inhalt verfügen.

    <ViewFields>
      <FieldRef Name="LinkTitle" />
      <FieldRef Name="FirstName" />
      <FieldRef Name="Company" />
      <FieldRef Name="WorkPhone" />
      <FieldRef Name="Email" />
    </ViewFields>
    
  7. Drücken Sie F5. Überprüfen Sie, ob das Dialogfeld Bereitstellungskonflikte angezeigt wird. Dieses Dialogfeld wird angezeigt, wenn Visual Studio versucht, eine Projektmappe (die Listeninstanz) auf einer SharePoint-Website bereitzustellen, auf der diese Projektmappe schon bereitgestellt wurde.

    Später in dieser exemplarischen Vorgehensweise werden Sie feststellen, dass dieses Dialogfeld nicht angezeigt wird, wenn Sie den Upgradebereitstellungsschritt ausführen.

  8. Klicken Sie auf Automatisch lösen. Die Listeninstanz auf der SharePoint-Website wird gelöscht, das Listenelement wird im Projekt bereitgestellt, und anschließend wird die Liste Employees auf der SharePoint-Website geöffnet.

  9. Überprüfen Sie folgende Details:

    • Die Spalten Anlagen und Telefon (privat) werden nicht in dieser Ansicht der Liste angezeigt.

    • Die Liste ist jetzt leer. Als Sie die Projektmappe mit der Bereitstellungskonfiguration Standard erneut bereitgestellt haben, wurde die Liste Employees durch die neue leere Liste im Projekt ersetzt.

Testen des Bereitstellungsschritts

Jetzt können Sie den Upgradebereitstellungsschritt testen. Fügen Sie zuerst der Listeninstanz in SharePoint ein Element hinzu. Ändern Sie die Listendefinition und die Listeninstanz, und aktualisieren Sie sie dann auf der SharePoint-Website, um zu bestätigen, dass das neue Element nicht durch den Upgradebereitstellungsschritt überschrieben wird.

So fügen Sie manuell ein neues Listenelement hinzu

  1. Klicken Sie im Menüband auf der SharePoint-Website auf die Registerkarte Elemente.

  2. Klicken Sie in der Gruppe Neu auf Neues Element.

  3. Geben Sie im Feld Nachname den Wert Ruth ein.

  4. Geben Sie im Feld Vorname den Wert Andy ein.

  5. Geben Sie im Feld Firma den Wert Contoso ein.

  6. Klicken Sie auf Speichern. Überprüfen Sie, ob das neue Element in der Liste angezeigt wird. Später in dieser exemplarischen Vorgehensweise verwenden Sie dieses Element, um sicherzustellen, dass der Upgradebereitstellungsschritt den Inhalt dieser Liste nicht überschreibt.

  7. Schließen Sie den Webbrowser.

So testen Sie den Upgradebereitstellungsschritt

  1. Klicken Sie in der experimentellen Instanz von Visual Studio im Projektmappen-Explorer auf den Projektknoten EmployeesListDefinition.

  2. Legen Sie im Eigenschaftenfenster die Eigenschaft Aktive Bereitstellungskonfiguration auf Upgrade fest. Dies ist die benutzerdefinierte Bereitstellungskonfiguration, die den neuen Upgradebereitstellungsschritt beinhaltet.

  3. Doppelklicken Sie auf die Datei Schema.xml, die ein untergeordnetes Element des Projektelements ListDefinition1 ist.

  4. Suchen Sie nach dem zuvor geänderten ViewFields-Element.

  5. Entfernen Sie unter dem ViewFields-Element die beiden untergeordneten FieldRef-Elemente, bei denen das Name-Attribut auf WorkPhone bzw. Email festgelegt ist. Durch diese Aktion werden diese Felder nicht mehr in der Standardansicht der Liste Employees auf der SharePoint-Website angezeigt. Wenn Sie fertig sind, sollte das ViewFields-Element über den folgenden Inhalt verfügen.

    <ViewFields>
      <FieldRef Name="LinkTitle" />
      <FieldRef Name="FirstName" />
      <FieldRef Name="Company" />
    </ViewFields>
    
  6. Drücken Sie F5. Überprüfen Sie, ob die Codeausführung in der anderen Instanz von Visual Studio an dem Haltepunkt unterbrochen wird, den Sie zuvor in der CanExecute-Methode festgelegt haben.

  7. Drücken Sie erneut F5. Überprüfen Sie, ob der Code an dem Haltepunkt unterbrochen wird, den Sie zuvor in der Execute-Methode festgelegt haben.

  8. Drücken Sie ein letztes Mal F5. Die SharePoint-Website wird mit der Liste Employees geöffnet.

  9. Klicken Sie im Schnellstartbereich auf die Liste Employees.

  10. Überprüfen Sie folgende Details:

    • Das Andy Ruth-Element, das Sie zuvor manuell hinzugefügt haben, befindet sich nach wie vor in der Liste.

    • Die Spalten Telefon (geschäftlich) und E-Mail-Adresse werden in dieser Ansicht der Liste nicht angezeigt.

    Die Bereitstellungskonfiguration Upgrade ändert die vorhandene Employees-Listeninstanz auf der SharePoint-Website. Wenn Sie die Bereitstellungskonfiguration Standard anstelle der Konfiguration Upgrade verwendet hätten, wäre ein Bereitstellungskonflikt aufgetreten. Visual Studio würde den Konflikt lösen, indem es die Liste Employees ersetzt. Das Andy Ruth-Element würde dabei gelöscht werden.

Bereinigen des Entwicklungscomputers

Nach dem Abschluss der Tests für den Upgradebereitstellungsschritt entfernen Sie die Listeninstanz und die Listendefinition von der SharePoint-Website. Entfernen Sie dann die Bereitstellungsschritterweiterung aus Visual Studio.

So entfernen Sie die Listeninstanz von der SharePoint-Website

  1. Öffnen Sie die Liste Employees auf der SharePoint-Website, wenn sie nicht bereits geöffnet ist.

  2. Klicken Sie im Menüband auf der SharePoint-Website auf die Registerkarte Liste.

  3. Klicken Sie auf der Registerkarte Liste in der Gruppe Einstellungen auf Listeneinstellungen.

  4. Klicken Sie unter Berechtigungen und Verwaltung auf Diese Liste löschen. Klicken Sie auf OK, um zu bestätigen, dass Sie die Liste an den Papierkorb senden möchten.

  5. Schließen Sie den Webbrowser.

So entfernen Sie die Listendefinition von der SharePoint-Website

  • Klicken Sie in der experimentellen Instanz von Visual Studio im Menü Erstellen auf Zurückziehen.

    Visual Studio nimmt die Listendefinition von der SharePoint-Website zurück.

So deinstallieren Sie die Erweiterung

  1. Klicken Sie in der experimentellen Instanz von Visual Studio im Menü Extras auf Erweiterungs-Manager.

    Das Dialogfeld Erweiterungs-Manager wird geöffnet.

  2. Klicken Sie in der Liste der Erweiterungen auf Deployment Step for SharePoint Projects, und klicken Sie dann auf Deinstallieren.

  3. Klicken Sie im angezeigten Dialogfeld auf Ja, um zu bestätigen, dass Sie die Erweiterung deinstallieren möchten.

  4. Klicken Sie auf Jetzt neu starten, um die Deinstallation abzuschließen.

  5. Schließen Sie beide Instanzen von Visual Studio (die experimentelle Instanz und die Instanz von Visual Studio, in der die Projektmappe "UpgradeDeploymentStep" geöffnet ist).

Siehe auch

Weitere Ressourcen

Erweitern von SharePoint-Packen und -Bereitstellen