次の方法で共有


チュートリアル: SharePoint プロジェクトに対するカスタムの配置手順の作成

SharePoint プロジェクトを配置する際は、Visual Studio 2010 によって一連の配置手順が特定の順序で実行されます。 Visual Studio には、さまざまな組み込みの配置手順が用意されていますが、配置手順を独自に作成することもできます。

このチュートリアルでは、SharePoint サーバーのソリューションをアップグレードするカスタムの配置手順を作成します。 Visual Studio には、ソリューションの取り消しや追加など、さまざまなタスクに関する組み込みの配置手順が用意されています。しかし、ソリューションをアップグレードするための配置手順は用意されていません。 既定では、SharePoint ソリューションを配置する際、Visual Studio は、まずソリューションを取り消したうえで (既にソリューションが配置されている場合)、ソリューション全体を再配置します。 組み込みの配置手順の詳細については、「SharePoint ソリューション パッケージの配置」を参照してください。

このチュートリアルでは、次のタスクについて説明します。

  • 次の 2 つの主要タスクを実行する Visual Studio の拡張機能を作成する。

    • SharePoint ソリューションをアップグレードするためのカスタムの配置手順を定義する。

    • 新しい配置構成を定義する、プロジェクトの拡張機能を作成する。 配置構成は、特定のプロジェクトについて実行される一連の配置手順です。 新しい配置構成には、カスタムの配置手順と、いくつかの組み込みの配置手順が含まれます。

  • 拡張機能のアセンブリから呼び出される 2 つのカスタム SharePoint コマンドを作成する。 SharePoint コマンドは、SharePoint サーバー オブジェクト モデルの API を使用するために拡張機能のアセンブリから呼び出すことのできるメソッドです。 詳細については、「SharePoint オブジェクト モデルの呼び出し」を参照してください。

  • 両方のアセンブリを配置するための Visual Studio Extension (VSIX) パッケージを構築する。

  • 新しい配置手順をテストする。

必須コンポーネント

このチュートリアルを実行するには、開発コンピューターに次のコンポーネントが必要です。

  • サポート対象エディションの Microsoft Windows、SharePoint、および Visual Studio。 詳細については、「SharePoint ソリューションの開発要件」を参照してください。

  • Visual Studio 2010 SDK。 このチュートリアルでは、拡張機能を配置するための VSIX パッケージを、SDK の VSIX プロジェクト テンプレートを使用して作成します。 詳細については、「Visual Studio の SharePoint ツールの拡張」を参照してください。

次の概念に関する知識があると役に立ちますが、チュートリアルを実行するうえで必須というわけではありません。

プロジェクトの作成

このチュートリアルを実行するには、3 つのプロジェクトを作成する必要があります。

  • 拡張機能を配置するために VSIX パッケージを作成する VSIX プロジェクト。

  • プロジェクトの拡張機能を実装するクラス ライブラリ プロジェクト。 このプロジェクトは .NET Framework 4 を対象にする必要があります。

  • カスタムの SharePoint コマンドを定義するクラス ライブラリ プロジェクト。 このプロジェクトは .NET Framework 3.5 を対象にする必要があります。

この 2 つのプロジェクトを作成することから始めます。

VSIX プロジェクトを作成するには

  1. Visual Studio を起動します。

  2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

  3. [新しいプロジェクト] ダイアログ ボックスで、[Visual C#] ノードまたは [Visual Basic] ノードを展開し、[機能拡張] をクリックします。

    注意

    [機能拡張] ノードは、Visual Studio 2010 SDK がインストールされている場合にのみ使用できます。 詳細については、冒頭の「前提条件」を参照してください。

  4. ダイアログ ボックス上部のコンボ ボックスで、[.NET Framework 4] をクリックします。

  5. [VSIX プロジェクト] テンプレートをクリックします。

  6. [プロジェクト名] ボックスに「UpgradeDeploymentStep」と入力します。

  7. [OK] をクリックします。

    Visual Studio のソリューション エクスプローラーUpgradeDeploymentStep プロジェクトが追加されます。

拡張機能プロジェクトを作成するには

  1. ソリューション エクスプローラーでソリューション ノードを右クリックし、[追加] をクリックして、[新しいプロジェクト] をクリックします。

    注意

    Visual Basic プロジェクトでソリューション エクスプローラーにソリューション ノードが表示されるのは、[全般] ([オプション] ダイアログ ボックス - [プロジェクトおよびソリューション])[常にソリューションを表示] チェック ボックスがオンになっている場合だけです。

  2. [新しいプロジェクト] ダイアログ ボックスで、[Visual C#] ノードまたは [Visual Basic] ノードを展開し、[Windows] をクリックします。

  3. ダイアログ ボックス上部のコンボ ボックスで、[.NET Framework 4] を選択します。

  4. [クラス ライブラリ] プロジェクト テンプレートを選択します。

  5. [名前] ボックスに「DeploymentStepExtension」と入力します。

  6. [OK] をクリックします。

    Visual Studio によって、DeploymentStepExtension プロジェクトがソリューションに追加され、既定の Class1 コード ファイルが開きます。

  7. Class1 コード ファイルをプロジェクトから削除します。

SharePoint コマンド プロジェクトを作成するには

  1. ソリューション エクスプローラーでソリューション ノードを右クリックし、[追加] をポイントして [新しいプロジェクト] をクリックします。

    注意

    Visual Basic プロジェクトでソリューション エクスプローラーにソリューション ノードが表示されるのは、[全般] ([オプション] ダイアログ ボックス - [プロジェクトおよびソリューション])[常にソリューションを表示] チェック ボックスがオンになっている場合だけです。

  2. [新しいプロジェクトの追加] ダイアログ ボックスで、[Visual C#] または [Visual Basic] を展開し、[Windows] をクリックします。

  3. [クラス ライブラリ] プロジェクト テンプレートをクリックします。

  4. ダイアログ ボックス上部のコンボ ボックスで、[.NET Framework 3.5] を選択します。

  5. [プロジェクト名] ボックスに「SharePointCommands」と入力します。

  6. [OK] をクリックします。

    ソリューションに SharePointCommands プロジェクトが追加され、既定の Class1 コード ファイルが開きます。

  7. Class1 コード ファイルをプロジェクトから削除します。

プロジェクトの構成

カスタムの配置手順を作成するためのコードを記述する前に、コード ファイルおよびアセンブリ参照を追加し、プロジェクトを構成しておく必要があります。

DeploymentStepExtension プロジェクトを構成するには

  1. DeploymentStepExtension プロジェクトに、次の 2 つのコード ファイルを追加します。

    • UpgradeStep

    • DeploymentConfigurationExtension

  2. [プロジェクト] メニューの [参照の追加] をクリックします。

  3. [.NET] タブで、Ctrl キーを押しながら次のアセンブリを選択し、[OK] をクリックします。

    • Microsoft.VisualStudio.SharePoint

    • System.ComponentModel.Composition

SharePointCommands プロジェクトを構成するには

  1. SharePointCommands プロジェクトに、Commands というコード ファイルを追加します。

  2. ソリューション エクスプローラーで、[SharePointCommands] プロジェクト ノードをクリックします。

  3. [プロジェクト] メニューの [参照の追加] をクリックします。

  4. [.NET] タブで、Ctrl キーを押しながら次のアセンブリを選択し、[OK] をクリックします。

    • Microsoft.SharePoint

    • Microsoft.VisualStudio.SharePoint.Commands

カスタムの配置手順の定義

アップグレードの配置手順を定義するクラスを作成します。 配置手順を定義するため、このクラスに IDeploymentStep インターフェイスを実装します。 このインターフェイスは、カスタムの配置手順を定義する場合に必ず実装します。

カスタムの配置手順を定義するには

  1. DeploymentStepExtension プロジェクトで、UpgradeStep コード ファイルをダブルクリックします。

  2. このファイルに次のコードを貼り付けます。

    注意

    このコードを追加した直後は、いくつかのコンパイル エラーが発生します。 これらのエラーは、この後の手順でコードを追加すると解消されます。

    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);
            }
        }
    }
    

カスタムの配置手順を含んだ配置構成の作成

新しい配置構成用のプロジェクトの拡張機能を作成します。 この配置構成には、いくつかの組み込みの配置手順と新しいアップグレードの配置手順が含まれます。 SharePoint の開発者は、この配置構成によって、SharePoint プロジェクトに対するアップグレードの配置手順を容易に利用できます。

配置構成を作成するため、このクラスに ISharePointProjectExtension インターフェイスを実装します。 このインターフェイスは、SharePoint プロジェクトの拡張機能を作成する場合に必ず実装します。

配置構成を作成するには

  1. DeploymentStepExtension プロジェクトで、DeploymentConfigurationExtension コード ファイルをダブルクリックします。

  2. このファイルに次のコードを貼り付けます。

    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";
            }
        }
    }
    

カスタム SharePoint コマンドの作成

SharePoint サーバー オブジェクト モデルを呼び出す 2 つのカスタム コマンドを作成します。 1 つはソリューションが配置済みかどうかを判断するコマンドで、もう 1 つはソリューションをアップグレードするコマンドです。

SharePoint コマンドを定義するには

  1. SharePointCommands プロジェクトの Commands コード ファイルをダブルクリックします。

  2. このファイルに次のコードを貼り付けます。

    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);
            }
        }
    }
    

チェックポイント

この段階で、カスタムの配置手順および SharePoint コマンドに必要なすべてのコードがプロジェクトに揃ったことになります。 エラーが発生することなく 2 つのプロジェクトをコンパイルできるかどうか、ソリューションをビルドして確認してください。

ソリューションをビルドするには

  • [ビルド] メニューの [ソリューションのビルド] をクリックします。

拡張機能を配置するための VSIX パッケージの作成

拡張機能を配置するには、ソリューションで VSIX プロジェクトを使用して VSIX パッケージを作成します。 まず、VSIX プロジェクトに含まれている source.extension.vsixmanifest ファイルを変更して、VSIX パッケージを構成します。 次に、ソリューションをビルドして VSIX パッケージを作成します。

VSIX パッケージを構成および作成するには

  1. ソリューション エクスプローラーUpgradeDeploymentStep プロジェクトで、source.extension.vsixmanifest ファイルをダブルクリックします。

    Visual Studio によってマニフェスト エディターでファイルが開きます。 source.extension.vsixmanifest ファイルが、すべての VSIX パッケージで必要とされる extension.vsixmanifest ファイルの基礎となります。 このファイルの詳細については、「VSIX Extension Schema Reference」を参照してください。

  2. [製品名] ボックスに「Upgrade Deployment Step for SharePoint Projects」と入力します。

  3. [作成者] ボックスに「Contoso」と入力します。

  4. [説明] ボックスに「Provides a custom upgrade deployment step that can be used in SharePoint projects」(SharePoint プロジェクト用のカスタム アップグレード配置手順) と入力します。

  5. エディターの [コンテンツ] セクションで、[コンテンツの追加] をクリックします。

  6. [コンテンツの追加] ダイアログ ボックスで、[コンテンツ タイプの選択] ボックスの一覧の [MEF コンポーネント] をクリックします。

    注意

    この値は、extension.vsixmanifest ファイル内の MefComponent 要素に対応します。 この要素は、VSIX パッケージ内の拡張機能アセンブリの名前を指定します。 詳細については、「MEFComponent Element (VSX Schema)」を参照してください。

  7. [ソースの選択] の下にある [プロジェクト] をクリックし、その横のボックスの [DeploymentStepExtension] を選択します。

  8. [OK] をクリックします。

  9. マニフェスト エディターの [コンテンツの追加] をもう一度クリックします。

  10. [コンテンツの追加] ダイアログ ボックスで、[コンテンツの種類の選択] リスト ボックスの [カスタム拡張機能の種類] をクリックします。

    注意

    この値は、extension.vsixmanifest ファイル内の CustomExtension 要素に対応します。 Visual Studio の拡張機能に追加するカスタム拡張機能は、この要素によって指定されます。 詳細については、「CustomExtension Element (VSX Schema)」を参照してください。

  11. [種類] ボックスに「SharePoint.Commands.v4」と入力します。

    注意

    この値は、extension.vsixmanifest ファイル内の CustomExtension 要素の Type 属性に対応します。 カスタム SharePoint コマンドを含んでいるすべてのカスタム拡張機能アセンブリには、Sharepoint.Commands.v4 の値が必須です。

  12. [ソースの選択] の下にある [プロジェクト] をクリックし、その横のボックスの [SharePointCommands] を選択します。

  13. [OK] をクリックします。

  14. [ビルド] メニューの [ソリューションのビルド] をクリックします。 エラーが発生することなくソリューションがコンパイルされることを確認します。

  15. UpgradeDeploymentStep プロジェクトのビルド出力フォルダーを開きます。 このフォルダーに UpgradeDeploymentStep.vsix ファイルが格納されていることを確認します。

    既定では、プロジェクト ファイルに格納されているフォルダー の ..\bin\Debug フォルダーがビルド出力フォルダーです。

アップグレードの配置手順をテストする準備

アップグレードの配置手順をテストするために、まず、SharePoint サイトにサンプル ソリューションを配置する必要があります。 まず、Visual Studio の実験用インスタンスで拡張機能のデバッグを開始します。 次に、配置手順のテストに使用するリスト定義とリスト インスタンスを作成して、SharePoint サイトに配置します。 次に、そのリスト定義とリスト インスタンスに変更を加えて再配置し、SharePoint サイト上のソリューションが既定の配置プロセスではどのように上書きされるかを確認します。

このチュートリアルの以降の手順で、リスト定義とリスト インスタンスを変更し、SharePoint サイトでアップグレードします。

拡張機能のデバッグを開始するには

  1. 管理者特権で Visual Studio を再起動し、UpgradeDeploymentStep ソリューションを開きます。

  2. DeploymentStepExtension プロジェクトで、UpgradeStep コード ファイルを開き、CanExecute メソッドおよび Execute メソッド内の最初のコード行にブレークポイントを追加します。

  3. F5 キーを押してデバッグを開始します。

  4. Visual Studio によって、拡張機能が %UserProfile%\AppData\Local\Microsoft\VisualStudio\10.0Exp\Extensions\Contoso\Upgrade Deployment Step for SharePoint Projects\1.0 にインストールされ、Visual Studio の実験用インスタンスが開始されます。 このインスタンスの Visual Studio でアップグレードの配置手順をテストします。

リスト定義とリスト インスタンスを作成するには

  1. Visual Studio の実験用インスタンスで、[ファイル] メニューの [新規] をポイントし、[プロジェクト] をクリックします。

  2. [新しいプロジェクト] ダイアログ ボックスで [Visual C#] を展開し、[SharePoint] を展開して、[2010] をクリックします。

  3. ダイアログ ボックスの上部のコンボ ボックスで、[.NET Framework 3.5] が選択されていることを確認します。 Microsoft SharePoint Foundation 2010 および Microsoft SharePoint Server 2010 のプロジェクトには、このバージョンの .NET Framework が必要です。

  4. プロジェクト テンプレートの一覧で [リスト定義] をクリックします。

  5. [プロジェクト名] ボックスに「EmployeesListDefinition」と入力します。

  6. [OK] をクリックします。

  7. SharePoint カスタマイズ ウィザードで、デバッグ用のサイトの URL を入力します。

  8. [この SharePoint ソリューションの信頼レベル][ファーム ソリューションとして配置する] をクリックします。

    注意

    このアップグレードの配置手順はサンドボックス ソリューションをサポートしていません。

  9. [次へ] をクリックします。

  10. [リスト定義の設定の選択] ページで、[リスト定義の表示名] に「Employees List」と入力します。

  11. [リスト定義の種類] から [連絡先] を選択します。

  12. [このリスト定義のリスト インスタンスを追加する] チェック ボックスがオンになっていることを確認します。

  13. [完了] をクリックします。

    プロジェクトが作成され、エディターでリスト定義の Elements.xml ファイルが開きます。

  14. ソリューション エクスプローラー[EmployeesListDefinition] プロジェクト ノードを右クリックし、[プロパティ] をクリックします。

  15. プロジェクト プロパティの [SharePoint] タブで、[デバッグ後に自動取り消し] チェック ボックスをオフにします。

  16. ソリューション エクスプローラーで、[ListDefinition1] ノードを展開し、子の [ListInstance1] ノードを展開します。

  17. [ListInstance1] ノードの子である Elements.xml ファイルをダブルクリックします。 エディターで Elements.xml ファイルが開きます。

  18. このファイルの既定の XML を次の XML に置き換えます。 この XML によって、リストの名前が Employees に変更されます。 また、Jim Hance という名前の従業員の項目が追加されます。

    <?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>
    

リスト定義とリスト インスタンスを配置するには

  1. ソリューション エクスプローラーで、EmployeesListDefinition というプロジェクト ノードをクリックします。

  2. [プロパティ] ウィンドウで、[アクティブな配置構成] プロパティが [既定] に設定されていることを確認します。

  3. F5 キーを押します。

  4. プロジェクトが正常にビルドされていること、新しい [Employees] リストに SharePoint サイトが開くこと、およびリストに Jim Hance のエントリが含まれることを確認します。

  5. Web ブラウザーを閉じます。

リスト定義とリスト インスタンスに変更を加えて再配置するには

  1. EmployeesListDefinition プロジェクトで、ListInstance1 プロジェクト項目の子の Elements.xml ファイルをダブルクリックします。

  2. Data 要素とその子を削除し、リストから Jim Hance のエントリを削除します。 作業後の XML ファイルの内容を次に示します。

    <?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. [ListDefinition1] プロジェクト項目の子である Schema.xml ファイルをダブルクリックします。

  4. このファイル内で、BaseViewID="1" という文字列を探します。 この文字列は次の手順で変更する View 要素の属性です。

  5. この View 要素以下の ViewFields 子要素を探します。

  6. ViewFields 要素から、Name 属性がそれぞれ Attachments と HomePhone に設定されている 2 つの子 FieldRef 要素を削除します。 SharePoint サイトの Employees リストの既定の表示から、これらのフィールドが削除されます。 作業後の ViewFields 要素は、次のようになります。

    <ViewFields>
      <FieldRef Name="LinkTitle" />
      <FieldRef Name="FirstName" />
      <FieldRef Name="Company" />
      <FieldRef Name="WorkPhone" />
      <FieldRef Name="Email" />
    </ViewFields>
    
  7. F5 キーを押します。 [配置競合] ダイアログ ボックスが表示されます。 このダイアログ ボックスは、同じソリューションが既に配置されている SharePoint サイトにソリューション (リスト インスタンス) を配置しようとすると表示されます。

    最終的に、アップグレードの配置手順を実行するときには、このダイアログ ボックスは表示されなくなります。

  8. [自動的に解決] をクリックします。 Visual Studio によって SharePoint サイト上のリスト インスタンスが削除され、プロジェクトのリスト項目が配置されます。さらに、SharePoint サイトが開いて [Employees] リストが表示されます。

  9. 次の事項を確認します。

    • [添付ファイル] 列および [電話番号 (自宅)] 列がこのリストのビューに表示されないこと。

    • リストが空になっていること。 既定の配置構成を使用してソリューションを再配置した場合、Employees リストが、プロジェクト内の新しい空のリストに置き換えられます。

配置手順のテスト

これで、アップグレードの配置手順をテストする準備ができました。 まず、SharePoint でリスト インスタンスに項目を追加します。 次に、リスト定義とリスト インスタンスに変更を加えた後、SharePoint サイト上のリスト定義とリスト インスタンスをアップグレードします。その際、アップグレードの配置手順では新しい項目が上書きされないことを確認します。

リストに手動で項目を追加するには

  1. SharePoint サイトのリボンで、[アイテム] タブをクリックします。

  2. [新規] グループの [新しいアイテム] をクリックします。

  3. "姓" フィールドに「Ruth」と入力します。

  4. "名" フィールドに「Andy」と入力します。

  5. [会社名] フィールドに「Contoso」と入力します。

  6. [保存] をクリックします。 新しい項目がリストに表示されることを確認します。 アップグレードの配置手順では、このリストの内容は上書きされません。この項目は後で、そのことを確認するために使用します。

  7. Web ブラウザーを閉じます。

アップグレードの配置手順をテストするには

  1. Visual Studio の実験用インスタンスのソリューション エクスプローラーで、[EmployeesListDefinition] プロジェクト ノードをクリックします。

  2. [プロパティ] ウィンドウで、[アクティブな配置構成] プロパティを [アップグレード] に設定します。 これが新しいアップグレードの配置手順を含んだ独自の配置構成です。

  3. [ListDefinition1] プロジェクト項目の子である Schema.xml ファイルをダブルクリックします。

  4. 前に変更した ViewFields 要素を探します。

  5. ViewFields 要素から、Name 属性がそれぞれ WorkPhone と Email に設定されている 2 つの子 FieldRef 要素を削除します。 SharePoint サイトの Employees リストの既定の表示から、これらのフィールドが削除されます。 作業後の ViewFields 要素は、次のようになります。

    <ViewFields>
      <FieldRef Name="LinkTitle" />
      <FieldRef Name="FirstName" />
      <FieldRef Name="Company" />
    </ViewFields>
    
  6. F5 キーを押します。 Visual Studio のもう一方のインスタンスで、先ほど CanExecute メソッドに設定したブレークポイントで、コードが停止していることを確認します。

  7. 再度 F5 キーを押します。 先ほど Execute メソッドに設定したブレークポイントで、コードが停止していることを確認します。

  8. 最後にもう一度 F5 キーを押します。 [Employees] リストに対する SharePoint サイト。

  9. クイック起動領域で [Employees] リストをクリックします。

  10. 次の事項を確認します。

    • 先ほど手動で追加した Andy Ruth という項目がまだリストに存在すること。

    • [(電話番号 (会社)] 列と [電子メール アドレス] 列がこのリストのビューに表示されないこと。

    アップグレードの配置構成によって、SharePoint サイト上の既存の Employees リスト インスタンスが変更されます。 仮にアップグレードではなく、既定の配置構成を使用した場合、配置の競合が発生します。 その場合、Visual Studio は、Employees リストを置き換えることによって競合の解決を図るため、Andy Ruth という項目は削除されます。

開発コンピューターのクリーンアップ

アップグレードの配置手順のテストが終わったら、リスト インスタンスおよびリスト定義を SharePoint サイトから削除し、さらに配置手順の拡張機能を Visual Studio から削除します。

SharePoint サイトからリスト インスタンスを削除するには

  1. SharePoint サイトで [Employees] リストが開いていない場合は開きます。

  2. SharePoint サイトのリボンで、[リスト] タブをクリックします。

  3. [リスト] タブで、[設定] グループの [リストの設定] をクリックします。

  4. [権限と管理][このリストの削除] をクリックします。 確認のメッセージで [OK] をクリックすると、リストがごみ箱に送られます。

  5. Web ブラウザーを閉じます。

SharePoint サイトからリスト定義を削除するには

  • Visual Studio の実験用インスタンスの [ビルド] メニューで [取り消し] をクリックします。

    SharePoint サイトからリスト定義が取り消されます。

拡張機能をアンインストールするには

  1. Visual Studio の実験用インスタンスの [ツール] メニューで、[拡張機能マネージャー] をクリックします。

    [拡張機能マネージャー] ダイアログ ボックスが表示されます。

  2. 拡張機能の一覧で、[Deployment Step for SharePoint Projects] を選択し、[アンインストール] をクリックします。

  3. 確認のダイアログ ボックスが表示されたら、[はい] をクリックして、拡張機能をアンインストールします。

  4. [今すぐ再起動] をクリックするとアンインストールは完了です。

  5. Visual Studio の両方のインスタンス (UpgradeDeploymentStep ソリューションを開いた Visual Studio の実験用インスタンスとインスタンス) を閉じます。

参照

その他の技術情報

SharePoint のパッケージ化と配置の拡張