次の方法で共有


チュートリアル: プロジェクト テンプレートに基づくサイト列プロジェクト項目の作成 (パート 1)

SharePoint プロジェクトは、1 つ以上の SharePoint プロジェクト項目のコンテナーです。 独自の SharePoint プロジェクト項目の種類を作成し、それらをプロジェクト テンプレートと関連付けることで、Visual Studio 2010 で SharePoint プロジェクト システムを拡張できます。 このチュートリアルでは、サイト内の列を作成するためのプロジェクト項目の種類を定義し、サイト内の列プロジェクト項目が含まれる新しいプロジェクトの作成に使用できるプロジェクト テンプレートを作成します。

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

  • サイト内の列のための SharePoint プロジェクト項目の新しい種類を定義する Visual Studio 拡張機能の作成。 プロジェクト項目の種類には、[プロパティ] ウィンドウに表示される単純なカスタム プロパティが含まれます。

  • 対応するプロジェクト項目用の Visual Studio プロジェクト テンプレートを作成する。

  • プロジェクト テンプレートおよび拡張機能アセンブリを配置するための Visual Studio Extension (VSIX) パッケージを作成する。

  • プロジェクト項目のデバッグとテストを行う。

これは、独立したチュートリアルです。 このチュートリアルを完了すると、プロジェクト テンプレートにウィザードを追加してプロジェクト項目を拡張できるようになります。 詳細については、「チュートリアル: プロジェクト テンプレートに基づくサイト列プロジェクト項目の作成 (パート 2)」を参照してください。

注意

このチュートリアル用の完全なプロジェクト、コード、およびその他のファイルを含むサンプルは、https://go.microsoft.com/fwlink/?LinkId=191369 からダウンロードできます。

必須コンポーネント

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

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

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

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

  • SharePoint のサイト内の列。 詳細については、「」を参照してください。

  • Visual Studio のプロジェクト テンプレート。 詳細については、「Visual Studio テンプレートの概要」を参照してください。

プロジェクトの作成

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

  • VSIX プロジェクト。 このプロジェクトは、サイト内の列プロジェクト項目とプロジェクト テンプレートを配置するための VSIX パッケージを作成します。

  • プロジェクト テンプレート プロジェクト。 このプロジェクトは、サイト内の列プロジェクト項目が含まれる新しい SharePoint プロジェクトを作成するために使用できるプロジェクト テンプレートを作成します。

  • クラス ライブラリ プロジェクト。 このプロジェクトは、サイト内の列プロジェクト項目の動作を定義する Visual Studio 拡張機能を実装します。

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

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

  1. Visual Studio を起動します。

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

  3. [新しいプロジェクト] ダイアログ ボックスの上部のコンボ ボックスで、[.NET Framework 4] が選択されていることを確認します。

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

    注意

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

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

  6. [名前] ボックスに、「SiteColumnProjectItem」と入力します。

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

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

プロジェクト テンプレート プロジェクトを作成するには

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

    注意

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

  2. [新しいプロジェクトの追加] ダイアログ ボックスの上部のコンボ ボックスで、[.NET Framework 4] が選択されていることを確認します。

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

  4. プロジェクト テンプレートの一覧で、[C# プロジェクト テンプレート] または [Visual Basic プロジェクト テンプレート] を選択します。

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

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

    Visual Studio によって SiteColumnProjectTemplate プロジェクトがソリューションに追加されます。

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

  8. Visual Basic プロジェクトを作成した場合は、次のファイルもプロジェクトから削除します。

    • MyApplication.Designer.vb

    • MyApplication.myapp

    • Resources.Designer.vb

    • Resources.resx

    • Settings.Designer.vb

    • Settings.settings

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

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

  2. [新しいプロジェクトの追加] ダイアログ ボックスの上部のコンボ ボックスで、[.NET Framework 4] が選択されていることを確認します。

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

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

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

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

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

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

拡張機能プロジェクトの構成

コード ファイルおよびアセンブリ参照を追加し、拡張機能プロジェクトを構成します。

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

  1. ProjectItemTypeDefinition プロジェクトで、SiteColumnProjectItemTypeProvider という名前の新しいコード ファイルを追加します。

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

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

    • Microsoft.VisualStudio.SharePoint

    • System.ComponentModel.Composition

新しい SharePoint プロジェクト項目の種類の定義

ISharePointProjectItemTypeProvider インターフェイスを実装するクラスを作成して、新しいプロジェクト項目の種類の動作を定義します。 このインターフェイスは、新しい種類のプロジェクト項目を定義するたびに必ず実装します。

新しい SharePoint プロジェクト項目の種類を定義するには

  1. ProjectItemTypeDefinition プロジェクトで、SiteColumnProjectItemTypeProvider コード ファイルを開きます。

  2. このファイル内のコードを次のコードで置き換えて、ファイルを保存します。

    Imports System
    Imports System.Diagnostics
    Imports System.ComponentModel
    Imports System.ComponentModel.Composition
    Imports Microsoft.VisualStudio.SharePoint
    
    Namespace Contoso.SharePointProjectItems.SiteColumn
    
        ' Export attribute: Enables Visual Studio to discover and load this extension.
        ' SharePointProjectItemType attribute: Specifies the ID for the new project item type. This string must match the value of the 
        '     Type attribute of the ProjectItem element in the .spdata file for the project item.
        ' SiteColumnProjectItemTypeProvider class: Defines a new type of project item.
        <Export(GetType(ISharePointProjectItemTypeProvider))> _
        <SharePointProjectItemType("Contoso.SiteColumn")> _
        Partial Friend Class SiteColumnProjectItemTypeProvider
            Implements ISharePointProjectItemTypeProvider
    
            Private WithEvents projectItemTypeDefinition As ISharePointProjectItemTypeDefinition
    
            ' Configures the behavior of the project item type.
            Private Sub InitializeType(ByVal projectItemTypeDefinition As ISharePointProjectItemTypeDefinition) _
                Implements ISharePointProjectItemTypeProvider.InitializeType
    
                projectItemTypeDefinition.SupportedDeploymentScopes = _
                    SupportedDeploymentScopes.Site Or SupportedDeploymentScopes.Web
                projectItemTypeDefinition.SupportedTrustLevels = SupportedTrustLevels.All
                Me.projectItemTypeDefinition = projectItemTypeDefinition
            End Sub
    
            ' Creates a custom property for this project item.
            Private Sub ProjectItemPropertiesRequested(ByVal Sender As Object,
                ByVal e As SharePointProjectItemPropertiesRequestedEventArgs) _
                Handles projectItemTypeDefinition.ProjectItemPropertiesRequested
    
                Dim properties As SiteColumnProperties = Nothing
    
                ' If the properties object already exists, get it from the project item's annotations.
                If False = e.ProjectItem.Annotations.TryGetValue(properties) Then
                    ' Otherwise, create a new properties object and add it to the annotations.
                    properties = New SiteColumnProperties(e.ProjectItem)
                    e.ProjectItem.Annotations.Add(properties)
                End If
                e.PropertySources.Add(properties)
            End Sub
        End Class
    
        Friend Class SiteColumnProperties
            Private projectItem As ISharePointProjectItem
            Private Const TestPropertyId As String = "Contoso.SiteColumnProperty"
            Private Const PropertyDefaultValue As String = "Default custom property value."
    
            Friend Sub New(ByVal projectItem As ISharePointProjectItem)
                Me.projectItem = projectItem
            End Sub
    
            'The property gets or sets a simple string value. 
            <DisplayName("Example Property")> _
            <DescriptionAttribute("This is an example property for site column project items.")> _
            <DefaultValue(PropertyDefaultValue)> _
            Public Property ExampleProperty As String
                Get
                    Dim propertyValue As String = Nothing
    
                    ' Get the current property value if it already exists; otherwise, return a default value.
                    If False = projectItem.ExtensionData.TryGetValue(TestPropertyId, propertyValue) Then
                        propertyValue = PropertyDefaultValue
                    End If
                    Return propertyValue
                End Get
                Set(ByVal value As String)
                    If value <> PropertyDefaultValue Then
                        ' Store the property value in the ExtensionData property of the project item.
                        ' Data in the ExtensionData property persists when the project is closed.
                        projectItem.ExtensionData(TestPropertyId) = value
                    Else
                        ' Do not save the default value.
                        projectItem.ExtensionData.Remove(TestPropertyId)
                    End If
                End Set
            End Property
        End Class
    End Namespace
    
    using System;
    using System.Diagnostics;
    using System.ComponentModel;
    using System.ComponentModel.Composition;
    using Microsoft.VisualStudio.SharePoint;
    
    namespace Contoso.SharePointProjectItems.SiteColumn
    {
        // Enables Visual Studio to discover and load this extension.
        [Export(typeof(ISharePointProjectItemTypeProvider))]
    
        // Specifies the ID for the new project item type. This string must match the value of the 
        // Type attribute of the ProjectItem element in the .spdata file for the project item.
        [SharePointProjectItemType("Contoso.SiteColumn")]
    
        // Defines a new type of project item.
        internal class SiteColumnProjectItemTypeProvider : ISharePointProjectItemTypeProvider
        {
            // Implements IProjectItemTypeProvider.InitializeType. Configures the behavior of the project item type.
            public void InitializeType(ISharePointProjectItemTypeDefinition projectItemTypeDefinition)
            {
                projectItemTypeDefinition.SupportedDeploymentScopes =
                   SupportedDeploymentScopes.Site | SupportedDeploymentScopes.Web;
                projectItemTypeDefinition.SupportedTrustLevels = SupportedTrustLevels.All;
    
                // Handle event to create a custom property for this project item.
                projectItemTypeDefinition.ProjectItemPropertiesRequested +=
                    projectItemTypeDefinition_ProjectItemPropertiesRequested;
            }
    
            // Creates a custom property for this project item.
            void projectItemTypeDefinition_ProjectItemPropertiesRequested(object sender,
                SharePointProjectItemPropertiesRequestedEventArgs e)
            {
                SiteColumnProperties properties = null;
    
                // If the Properties object already exists, get it from the project item's annotations.
                if (!e.ProjectItem.Annotations.TryGetValue(out properties))
                {
                    // Otherwise, create a new Properties object and add it to the annotations.
                    properties = new SiteColumnProperties(e.ProjectItem);
                    e.ProjectItem.Annotations.Add(properties);
                }
    
                e.PropertySources.Add(properties);
            }
        }
    
        internal class SiteColumnProperties
        {
            // This class defines the property behavior.
            private ISharePointProjectItem projectItem;
            private const string propertyId = "Contoso.SiteColumnProperty";
            private const string propertyDefaultValue = "Default custom property value.";
    
            internal SiteColumnProperties(ISharePointProjectItem projectItem)
            {
                this.projectItem = projectItem;
            }
    
            // The property gets or sets a simple string value. 
            [DisplayName("Example Property")]
            [DescriptionAttribute("This is an example property for site column project items.")]
            [DefaultValue(propertyDefaultValue)]
            public string ExampleProperty
            {
                get
                {
                    string propertyValue;
    
                    // Get the current property value if it already exists; otherwise, return a default value.
                    if (!projectItem.ExtensionData.TryGetValue(propertyId, out propertyValue))
                    {
                        propertyValue = propertyDefaultValue;
                    }
                    return propertyValue;
                }
                set
                {
                    if (value != propertyDefaultValue)
                    {
                        // Store the property value in the ExtensionData property of the project item. 
                        // Data in the ExtensionData property persists when the project is closed.
                        projectItem.ExtensionData[propertyId] = value;
                    }
                    else
                    {
                        // Do not save the default value.
                        projectItem.ExtensionData.Remove(propertyId);
                    }
                }
            }
        }
    }
    

Visual Studio プロジェクト テンプレートの作成

他の開発者がサイト内の列プロジェクト項目が含まれる新しい SharePoint プロジェクトを作成できるようにするには、プロジェクト テンプレートを作成します。 SharePoint プロジェクト テンプレートには、.csproj や .vbproj などの Visual Studio のすべてのプロジェクトで必要なファイルと、SharePoint プロジェクトに固有のファイルが含まれます。 詳細については、「SharePoint プロジェクト項目の項目テンプレートとプロジェクト テンプレートの作成」を参照してください。

この手順では、空の SharePoint プロジェクトを作成して SharePoint プロジェクトに固有のファイルを生成し、それらのファイルを SiteColumnProjectTemplate プロジェクトに追加して、それらのファイルがこのプロジェクトから生成されるテンプレートに含まれるようにします。 また、SiteColumnProjectTemplate プロジェクト ファイルを構成して、[新しいプロジェクトの追加] ダイアログ ボックス内でプロジェクト テンプレートが表示される場所を指定します。

プロジェクト テンプレートのファイルを作成するには

  1. Visual Studio の 2 つ目のインスタンスを管理者特権で起動します。

  2. BaseSharePointProject という名前の新しい空の SharePoint プロジェクトを作成します。 SharePoint カスタマイズ ウィザード[ファーム ソリューションとして配置する] を選択しないでください。

  3. 空の要素項目をプロジェクトに追加します。 項目に「Field1」という名前を付けます。

  4. プロジェクトを保存し、2 つ目の Visual Studio インスタンスを閉じます。

  5. SiteColumnProjectItem ソリューションが開いている Visual Studio のインスタンスで、ソリューション エクスプローラー[SiteColumnProjectTemplate] プロジェクト ノードを右クリックします。

  6. [追加] メニューの [既存の項目] をクリックします。

  7. [既存項目の追加] ダイアログ ボックスで、ファイル拡張子のドロップダウン リストをクリックし、[すべてのファイル (*.*)] を選択します。

  8. BaseSharePointProject プロジェクトが格納されているディレクトリに移動します。 このフォルダーで、key.snk を選択し、[追加] をクリックします。

    注意

    このチュートリアルでは、作成するプロジェクト テンプレートは、同じ key.snk ファイルを使用して、テンプレートを使用して作成される各プロジェクトに署名します。 このサンプルを拡張してプロジェクト インスタンスごとに新しい key.snk ファイルを作成する方法については、「チュートリアル: プロジェクト テンプレートに基づくサイト列プロジェクト項目の作成 (パート 2)」を参照してください。

  9. 手順 5. ~ 8. を繰り返して、BaseSharePointProject ディレクトリの指定されているサブフォルダーから次のファイルを追加します。

    • \Field1\Elements.xml

    • \Field1\SharePointProjectItem.spdata

    • \Features\Feature1\Feature1.feature

    • \Features\Feature1\Feature1.Template.xml

    • \Package\Package.package

    • \Package\Package.Template.xml

    これらのファイルを SiteColumnProjectTemplate プロジェクトに直接追加します。プロジェクト内に Field1、Features、または Package の各サブフォルダーを再度作成しないでください。 これらのファイルの詳細については、「SharePoint プロジェクト項目の項目テンプレートとプロジェクト テンプレートの作成」を参照してください。

[新しいプロジェクトの追加] ダイアログ ボックスでのプロジェクト テンプレートの表示方法を構成するには

  1. ソリューション エクスプローラーで、[SiteColumnProjectTemplate] プロジェクト ノードを右クリックし、[プロジェクトのアンロード] をクリックします。 ファイルの変更を保存するかどうかを確認するメッセージが表示されたら、[はい] をクリックします。

  2. [SiteColumnProjectTemplate] ノードを再度右クリックし、[SiteColumnProjectTemplate.csproj の編集] または [SiteColumnProjectTemplate.vbproj の編集] をクリックします。

  3. プロジェクト ファイルで次の VSTemplate 要素を見つけます。

    <VSTemplate Include="SiteColumnProjectTemplate.vstemplate">
    
  4. この VSTemplate 要素を次の XML に置き換えます。

    <VSTemplate Include="SiteColumnProjectTemplate.vstemplate">
      <OutputSubPath>SharePoint\SharePoint14</OutputSubPath>
    </VSTemplate>
    

    OutputSubPath 要素は、プロジェクトをビルドするとプロジェクト テンプレートが作成されるパス内の追加フォルダーを指定します。 ここで指定するフォルダーにより、プロジェクト テンプレートはユーザーが [新しいプロジェクトの追加] ダイアログ ボックスで [SharePoint] ノードの [2010] ノードをクリックしたときにのみ使用できるようになります。

  5. ファイルを保存して閉じます。

  6. ソリューション エクスプローラーで、[SiteColumnProjectTemplate] プロジェクトを右クリックし、[プロジェクトの再読み込み] をクリックします。

プロジェクト テンプレート ファイルの編集

SiteColumnProjectTemplate プロジェクトの次のファイルを編集して、プロジェクト テンプレートの動作を定義します。

  • AssemblyInfo.cs または AssemblyInfo.vb

  • Elements.xml

  • SharePointProjectItem.spdata

  • Feature1.feature

  • Package.package

  • SiteColumnProjectTemplate.vstemplate

  • ProjectTemplate.csproj または ProjectTemplate.vbproj

次の手順では、これらのファイルのいくつかに置き換え可能パラメーターを追加します。 置き換え可能パラメーターはトークンであり、先頭と末尾にはドル記号 ($) が付いています。 ユーザーがこのプロジェクト テンプレートを使用して新しいプロジェクトを作成するときに、Visual Studio によって自動的に新しいプロジェクト内のこれらのパラメーターが特定の値で置き換えられます。 詳細については、「置き換え可能パラメーター」を参照してください。

AssemblyInfo.cs ファイルまたは AssemblyInfo.vb ファイルを編集するには

  1. ソリューション エクスプローラーで、SiteColumnProjectTemplate プロジェクトの AssemblyInfo.cs ファイルまたは AssemblyInfo.vb ファイルをダブルクリックします。

  2. このファイルの先頭に次のステートメントを追加します。

    Imports System.Security
    
    using System.Security;
    

    SharePoint プロジェクトの [サンドボックス ソリューション] プロパティが [True] に設定されている場合、Visual Studio によって System.Security.AllowPartiallyTrustedCallersAttribute が AssemblyInfo コード ファイルに追加されます。 ただし、プロジェクト テンプレートの AssemblyInfo コード ファイルは、既定では System.Security 名前空間をインポートしません。 この using ステートメントまたは Imports ステートメントを追加して、コンパイル エラーが発生しないようにする必要があります。

  3. ファイルを保存して閉じます。

Elements.xml ファイルを編集するには

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

  2. ファイルの内容を次の XML で置き換えます。

    <?xml version="1.0" encoding="utf-8"?>
    <Elements xmlns="https://schemas.microsoft.com/sharepoint/">
      <Field ID="{$guid5$}" 
          Name="$safeprojectname$" 
          DisplayName="$projectname$" 
          Type="Text" 
          Group="Custom Columns">
      </Field>
    </Elements>
    

    新しい XML により、サイト内の列の名前、その基本型、およびギャラリーでサイト内の列が表示されるグループを定義する Field 要素が追加されます。 このファイルの内容の詳細については、「フィールド定義」を参照してください。

  3. ファイルを保存して閉じます。

SharePointProjectItem.spdata ファイルを編集するには

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

  2. ファイルの内容を次の XML で置き換えます。

    <?xml version="1.0" encoding="utf-8"?>
    <ProjectItem Type="Contoso.SiteColumn" DefaultFile="Elements.xml" 
                 xmlns="https://schemas.microsoft.com/VisualStudio/2010/SharePointTools/SharePointProjectItemModel">
      <Files>
        <ProjectItemFile Source="Elements.xml" Target="$safeprojectname$\" Type="ElementManifest" />
      </Files> 
    </ProjectItem>
    

    新しい XML により、ファイルは次のように変更されます。

    • ProjectItem 要素の Type 属性は、プロジェクト項目定義 (先ほど作成した SiteColumnProjectItemTypeProvider クラス) の SharePointProjectItemTypeAttribute に渡すものと同じ文字列に変更されます。

    • SupportedTrustLevels 属性と SupportedDeploymentScopes 属性が ProjectItem 要素から削除されます。 信頼レベルと配置のスコープは ProjectItemTypeDefinition プロジェクトの SiteColumnProjectItemTypeProvider クラスに指定されているため、これらの属性値は不要です。

    .spdata ファイルの内容の詳細については、「SharePoint プロジェクト項目スキーマのリファレンス」を参照してください。

  3. ファイルを保存して閉じます。

Feature1.feature ファイルを編集するには

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

  2. ファイルの内容を次の XML で置き換えます。

    <?xml version="1.0" encoding="utf-8"?>
    <feature xmlns:dm0="https://schemas.microsoft.com/VisualStudio/2008/DslTools/Core" dslVersion="1.0.0.0" Id="$guid4$" featureId="$guid4$" 
             imageUrl="" solutionId="00000000-0000-0000-0000-000000000000" title="Site Column Feature1" version=""
             deploymentPath="$SharePoint.Project.FileNameWithoutExtension$_$SharePoint.Feature.FileNameWithoutExtension$"
             xmlns="https://schemas.microsoft.com/VisualStudio/2008/SharePointTools/FeatureModel">
      <projectItems>
        <projectItemReference itemId="$guid2$" />
      </projectItems>
    </feature>
    

    新しい XML により、ファイルは次のように変更されます。

    • feature 要素の Id 属性と featureId 属性の値が $guid4$ に変更されます。

    • projectItemReference 要素の itemId 属性の値が $guid2$ に変更されます。

    .feature ファイルの詳細については、「SharePoint プロジェクト項目の項目テンプレートとプロジェクト テンプレートの作成」を参照してください。

  3. ファイルを保存して閉じます。

Package.package ファイルを編集するには

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

  2. ファイルの内容を次の XML で置き換えます。

    <?xml version="1.0" encoding="utf-8"?>
    <package xmlns:dm0="https://schemas.microsoft.com/VisualStudio/2008/DslTools/Core" dslVersion="1.0.0.0" 
             Id="$guid3$" solutionId="$guid3$" resetWebServer="false" name="$safeprojectname$" 
             xmlns="https://schemas.microsoft.com/VisualStudio/2008/SharePointTools/PackageModel">
      <features>
        <featureReference itemId="$guid4$" />
      </features>
    </package>
    

    新しい XML により、ファイルは次のように変更されます。

    • package 要素の Id 属性と solutionId 属性の値が $guid3$ に変更されます。

    • featureReference 要素の itemId 属性の値が $guid4$ に変更されます。

    .package ファイルの詳細については、「SharePoint プロジェクト項目の項目テンプレートとプロジェクト テンプレートの作成」を参照してください。

  3. ファイルを保存して閉じます。

SiteColumnProjectTemplate.vstemplate ファイルを編集するには

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

  2. ファイルの内容を XML の次のいずれかのセクションで置き換えます。 Visual C# プロジェクト テンプレートを作成している場合は、次の XML を使用します。

    <?xml version="1.0" encoding="utf-8"?>
    <VSTemplate Version="3.0.0" xmlns="https://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
      <TemplateData>
        <Name>Site Column</Name>
        <Description>Creates a new site column in SharePoint</Description>
        <FrameworkVersion>3.5</FrameworkVersion>
        <ProjectType>CSharp</ProjectType>
        <CreateNewFolder>true</CreateNewFolder>
        <CreateInPlace>true</CreateInPlace>
        <ProvideDefaultName>true</ProvideDefaultName>
        <DefaultName>SiteColumn</DefaultName>
        <LocationField>Enabled</LocationField>
        <EnableLocationBrowseButton>true</EnableLocationBrowseButton>
        <PromptForSaveOnCreation>true</PromptForSaveOnCreation>
        <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>
        <Icon>SiteColumnProjectTemplate.ico</Icon>
        <SortOrder>1000</SortOrder>
      </TemplateData>
      <TemplateContent>
        <Project TargetFileName="SharePointProject1.csproj" File="ProjectTemplate.csproj" ReplaceParameters="true">
          <ProjectItem ReplaceParameters="true" TargetFileName="Properties\AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>
          <ProjectItem ReplaceParameters="true" TargetFileName="Features\Feature1\Feature1.feature">Feature1.feature</ProjectItem>
          <ProjectItem ReplaceParameters="true" TargetFileName="Features\Feature1\Feature1.Template.xml">Feature1.template.xml</ProjectItem>
          <ProjectItem ReplaceParameters="true" TargetFileName="Package\Package.package">Package.package</ProjectItem>
          <ProjectItem ReplaceParameters="true" TargetFileName="Package\Package.Template.xml">Package.Template.xml</ProjectItem>
          <ProjectItem ReplaceParameters="true" TargetFileName="Field1\SharePointProjectItem.spdata">SharePointProjectItem.spdata</ProjectItem>
          <ProjectItem ReplaceParameters="true" TargetFileName="Field1\Elements.xml" OpenInEditor="true">Elements.xml</ProjectItem>
          <ProjectItem ReplaceParameters="false" TargetFileName="key.snk">key.snk</ProjectItem>
        </Project>
      </TemplateContent>
    </VSTemplate>
    

    Visual Basic プロジェクト テンプレートを作成している場合は、次の XML を使用します。

    <?xml version="1.0" encoding="utf-8"?>
    <VSTemplate Version="3.0.0" xmlns="https://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
      <TemplateData>
        <Name>Site Column</Name>
        <Description>Creates a new site column in SharePoint</Description>
        <FrameworkVersion>3.5</FrameworkVersion>
        <ProjectType>VisualBasic</ProjectType>
        <CreateNewFolder>true</CreateNewFolder>
        <CreateInPlace>true</CreateInPlace>
        <ProvideDefaultName>true</ProvideDefaultName>
        <DefaultName>SiteColumn</DefaultName>
        <LocationField>Enabled</LocationField>
        <EnableLocationBrowseButton>true</EnableLocationBrowseButton>
        <PromptForSaveOnCreation>true</PromptForSaveOnCreation>
        <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>
        <Icon>SiteColumnProjectTemplate.ico</Icon>
        <SortOrder>1000</SortOrder>
      </TemplateData>
      <TemplateContent>
        <Project TargetFileName="SharePointProject1.vbproj" File="ProjectTemplate.vbproj" ReplaceParameters="true">
          <ProjectItem ReplaceParameters="true" TargetFileName="My Project\AssemblyInfo.vb">AssemblyInfo.vb</ProjectItem>
          <ProjectItem ReplaceParameters="true" TargetFileName="Features\Feature1\Feature1.feature">Feature1.feature</ProjectItem>
          <ProjectItem ReplaceParameters="true" TargetFileName="Features\Feature1\Feature1.Template.xml">Feature1.template.xml</ProjectItem>
          <ProjectItem ReplaceParameters="true" TargetFileName="Package\Package.package">Package.package</ProjectItem>
          <ProjectItem ReplaceParameters="true" TargetFileName="Package\Package.Template.xml">Package.Template.xml</ProjectItem>
          <ProjectItem ReplaceParameters="true" TargetFileName="Field1\SharePointProjectItem.spdata">SharePointProjectItem.spdata</ProjectItem>
          <ProjectItem ReplaceParameters="true" TargetFileName="Field1\Elements.xml" OpenInEditor="true">Elements.xml</ProjectItem>
          <ProjectItem ReplaceParameters="false" TargetFileName="key.snk">key.snk</ProjectItem>
        </Project>
      </TemplateContent>
    </VSTemplate>
    

    新しい XML により、ファイルは次のように変更されます。

    • Name 要素が値 Site Column (これは [新しいプロジェクトの追加] ダイアログ ボックスに表示される名前です) に設定されます。

    • 各プロジェクト インスタンスに含まれているファイルごとに、ProjectItem 要素を追加します。

    .vstemplate ファイルの内容の詳細については、「Visual Studio テンプレート スキーマ参照」を参照してください。

  3. ファイルを保存して閉じます。

ProjectTemplate.csproj ファイルまたは ProjectTemplate.vbproj ファイルを編集するには

  1. ソリューション エクスプローラーで、SiteColumnProjectTemplate プロジェクトの ProjectTemplate.csproj ファイルまたは ProjectTemplate.vbproj ファイルをダブルクリックします。

  2. ファイルの内容を XML の次のいずれかのセクションで置き換えます。 Visual C# プロジェクト テンプレートを作成している場合は、次の XML を使用します。

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
        <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
        <SchemaVersion>2.0</SchemaVersion>
        <ProjectGuid>{$guid1$}</ProjectGuid>
        <OutputType>Library</OutputType>
        <AppDesignerFolder>Properties</AppDesignerFolder>
        <RootNamespace>$safeprojectname$</RootNamespace>
        <AssemblyName>$safeprojectname$</AssemblyName>
        <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
        <FileAlignment>512</FileAlignment>
        <ProjectTypeGuids>{BB1F664B-9266-4fd6-B973-E1E44974B511};{14822709-B5A1-4724-98CA-57A101D1B079};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
        <DebugSymbols>true</DebugSymbols>
        <DebugType>full</DebugType>
        <Optimize>false</Optimize>
        <OutputPath>bin\Debug\</OutputPath>
        <DefineConstants>DEBUG;TRACE</DefineConstants>
        <ErrorReport>prompt</ErrorReport>
        <WarningLevel>4</WarningLevel>
        <UseVSHostingProcess>false</UseVSHostingProcess>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
        <DebugType>pdbonly</DebugType>
        <Optimize>true</Optimize>
        <OutputPath>bin\Release\</OutputPath>
        <DefineConstants>TRACE</DefineConstants>
        <ErrorReport>prompt</ErrorReport>
        <WarningLevel>4</WarningLevel>
      </PropertyGroup>
      <PropertyGroup>
        <SignAssembly>true</SignAssembly>
        <AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
      </PropertyGroup>
      <ItemGroup>
        <Reference Include="System" />
        <Reference Include="System.Core" />
        <Reference Include="System.Data" />
        <Reference Include="System.Data.DataSetExtensions" />
        <Reference Include="System.Web" />
        <Reference Include="System.Xml" />
        <Reference Include="System.Xml.Linq" />
        <Reference Include="Microsoft.SharePoint" />
        <Reference Include="Microsoft.SharePoint.Security" />
      </ItemGroup>
      <ItemGroup>
        <Compile Include="Properties\AssemblyInfo.cs" />
      </ItemGroup>
      <ItemGroup>
        <None Include="Field1\SharePointProjectItem.spdata">
          <SharePointProjectItemId>{$guid2$}</SharePointProjectItemId>
        </None>
        <None Include="Field1\Elements.xml" />
      </ItemGroup>
      <ItemGroup>
        <None Include="key.snk" />
        <None Include="Package\Package.package">
          <PackageId>{$guid3$}</PackageId>
        </None>
        <None Include="Package\Package.Template.xml">
          <DependentUpon>Package.package</DependentUpon>
        </None>
        <None Include="Features\Feature1\Feature1.feature">
          <FeatureId>{$guid4$}</FeatureId>
        </None>
        <None Include="Features\Feature1\Feature1.Template.xml">
          <DependentUpon>Feature1.feature</DependentUpon>
        </None>
      </ItemGroup>
      <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
      <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\SharePointTools\Microsoft.VisualStudio.SharePoint.targets" />
    </Project>
    

    Visual Basic プロジェクト テンプレートを作成している場合は、次の XML を使用します。

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
        <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
        <ProductVersion>
        </ProductVersion>
        <SchemaVersion>
        </SchemaVersion>
        <ProjectGuid>{$guid1$}</ProjectGuid>
        <OutputType>Library</OutputType>
        <RootNamespace>$safeprojectname$</RootNamespace>
        <AssemblyName>$safeprojectname$</AssemblyName>
        <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
        <FileAlignment>512</FileAlignment>
        <ProjectTypeGuids>{BB1F664B-9266-4fd6-B973-E1E44974B511};{D59BE175-2ED0-4C54-BE3D-CDAA9F3214C8};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
        <OptionExplicit>On</OptionExplicit>
        <OptionCompare>Binary</OptionCompare>
        <OptionStrict>Off</OptionStrict>
        <OptionInfer>On</OptionInfer>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
        <DebugSymbols>true</DebugSymbols>
        <DebugType>full</DebugType>
        <DefineDebug>true</DefineDebug>
        <DefineTrace>true</DefineTrace>
        <OutputPath>bin\Debug\</OutputPath>
        <WarningLevel>4</WarningLevel>
        <UseVSHostingProcess>false</UseVSHostingProcess>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
        <DebugType>pdbonly</DebugType>
        <DefineDebug>false</DefineDebug>
        <DefineTrace>true</DefineTrace>
        <Optimize>true</Optimize>
        <OutputPath>bin\Release\</OutputPath>
        <UseVSHostingProcess>false</UseVSHostingProcess>
      </PropertyGroup>
      <PropertyGroup>
        <SignAssembly>true</SignAssembly>
        <AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
      </PropertyGroup>
      <ItemGroup>
        <Reference Include="System" />
        <Reference Include="System.Core" />
        <Reference Include="System.Data" />
        <Reference Include="System.Data.DataSetExtensions" />
        <Reference Include="System.Xml" />
        <Reference Include="System.Xml.Linq" />
        <Reference Include="Microsoft.SharePoint" />
        <Reference Include="Microsoft.SharePoint.Security" />
      </ItemGroup>
      <ItemGroup>
        <Import Include="Microsoft.VisualBasic" />
        <Import Include="System" />
        <Import Include="System.Collections" />
        <Import Include="System.Collections.Generic" />
        <Import Include="System.Data" />
        <Import Include="System.Diagnostics" />
        <Import Include="System.Linq" />
        <Import Include="System.Xml.Linq" />
        <Import Include="Microsoft.SharePoint" />
        <Import Include="Microsoft.SharePoint.Security" />
      </ItemGroup>
      <ItemGroup>
        <Compile Include="My Project\AssemblyInfo.vb" />
      </ItemGroup>
      <ItemGroup>
        <AppDesigner Include="My Project\" />
      </ItemGroup>
      <ItemGroup>
        <None Include="Features\Feature1\Feature1.feature">
          <FeatureId>{$guid4$}</FeatureId>
        </None>
        <None Include="Field1\SharePointProjectItem.spdata">
          <SharePointProjectItemId>{$guid2$}</SharePointProjectItemId>
        </None>
        <None Include="key.snk" />
        <None Include="Package\Package.package">
          <PackageId>{$guid3$}</PackageId>
        </None>
        <None Include="Package\Package.Template.xml">
          <DependentUpon>Package.package</DependentUpon>
        </None>
      </ItemGroup>
      <ItemGroup>
        <None Include="Features\Feature1\Feature1.Template.xml">
          <DependentUpon>Feature1.feature</DependentUpon>
        </None>
        <None Include="Field1\Elements.xml" />
      </ItemGroup>
      <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
      <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\SharePointTools\Microsoft.VisualStudio.SharePoint.targets" />
    </Project>
    

    新しい XML により、ファイルは次のように変更されます。

    • TargetFrameworkVersion 要素が変更され、.NET Framework 3.5 が指定されます。

    • プロジェクトの出力に署名するための SignAssembly 要素と AssemblyOriginatorKeyFile 要素が追加されます。

    • SharePoint プロジェクトによって使用されるアセンブリ参照用の新しい Reference 要素が追加されます。

    • Elements.xml や SharePointProjectItem.spdata などの、プロジェクトの既定のファイルごとに新しい要素を追加します。

  3. ファイルを保存して閉じます。

プロジェクト テンプレートを配置するための VSIX パッケージの作成

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

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

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

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

  2. [製品名] ボックスに、「Site Column」と入力します。

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

  4. [説明] ボックスに、「A SharePoint project for creating site columns」と入力します。

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

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

    注意

    この値は、extension.vsixmanifest ファイル内の ProjectTemplate 要素に対応します。 この要素は、プロジェクト テンプレートを格納する VSIX パッケージ内のサブフォルダーを示します。 詳細については、「ProjectTemplate Element (VSX Schema)」を参照してください。

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

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

  9. [コンテンツの追加] を再度クリックします。

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

    注意

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

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

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

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

プロジェクト テンプレートのテスト

これで、プロジェクト テンプレートをテストする準備ができました。 まず、Visual Studio の実験用インスタンスで SiteColumnProjectItem ソリューションのデバッグを開始します。 次に、Visual Studio の実験用インスタンスで、Site Column プロジェクトをテストします。 最後に、SharePoint プロジェクトをビルドして実行し、サイト内の列が正常に機能することを確認します。

ソリューションのデバッグを開始するには

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

  2. SiteColumnProjectItemTypeProvider コード ファイルを開き、InitializeType メソッドのコードの先頭行にブレークポイントを追加します。

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

    Visual Studio によって、拡張機能が %UserProfile%\AppData\Local\Microsoft\VisualStudio\10.0Exp\Extensions\Contoso\Site Column\1.0 にインストールされ、Visual Studio の実験用インスタンスが開始されます。 このインスタンスの Visual Studio でプロジェクト項目をテストします。

Visual Studio でプロジェクトをテストするには

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

  2. (プロジェクト テンプレートがサポートする言語に応じて) [Visual C#] または [Visual Basic] を展開し、[SharePoint] を展開して、[2010] をクリックします。

  3. プロジェクト テンプレートの一覧で、[Site Column] をクリックします。

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

  5. [OK] をクリックします。 新しいプロジェクトが Field1 という名前のプロジェクト項目と共にソリューション エクスプローラーに表示されます。

  6. Visual Studio のもう一方のインスタンスで、先ほど InitializeType メソッドに設定したブレークポイントで、コードが停止していることを確認します。 F5 キーを押して、プロジェクトのデバッグを続行します。

  7. ソリューション エクスプローラーで、[Field1] ノードをクリックし、F4 キーを押します。 [プロパティ] ウィンドウが開きます。

  8. プロパティ一覧に [Example Property] というプロパティが表示されることを確認します。

SharePoint でサイト内の列をテストするには

  1. ソリューション エクスプローラーで、[SiteColumnTest] ノードをクリックします。

  2. [プロパティ] ウィンドウで、[サイト URL] プロパティの横にあるテキスト ボックスをクリックし、「https://localhost」と入力します。 これにより、デバッグに使用する開発用コンピューター上のローカル SharePoint サイトが指定されます。

    注意

    既定では [サイト URL] プロパティは空です。これは、Site Column プロジェクト テンプレートに、プロジェクトを作成するときにこの値を収集するウィザードが用意されていないためです。 開発者にこの値を尋ね、新しいプロジェクトでこのプロパティを構成するウィザードを追加する方法については、「チュートリアル: プロジェクト テンプレートに基づくサイト列プロジェクト項目の作成 (パート 2)」を参照してください。

  3. F5 キーを押します。 サイト内の列がパッケージ化され、プロジェクトの [サイト URL] プロパティで指定された SharePoint サイトに配置されます。 Web ブラウザーには、このサイトの既定のページが表示されます。

    注意

    [スクリプト デバッグが無効] ダイアログ ボックスが表示された場合は、[はい] をクリックしてプロジェクトをデバッグします。

  4. [サイトの操作] メニューの [サイトの設定] をクリックします。

  5. [ギャラリー][サイト内の列] をクリックします。

  6. サイト内の列の一覧で、[SiteColumnTest] という名前の列を含む [ユーザー設定の列] グループがあることを確認します。

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

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

プロジェクトのテストが終わったら、プロジェクト テンプレートを Visual Studio の実験用インスタンスから削除します。

開発コンピューターをクリーンアップするには

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

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

  2. 拡張機能の一覧で、[Site Column] をクリックし、[アンインストール] をクリックします。

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

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

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

次の手順

このチュートリアルを完了すると、プロジェクト テンプレートにウィザードを追加できるようになります。 ユーザーが Site Column プロジェクトを作成するときに、ウィザードが、デバッグに使用するサイトの URL と、新しいソリューションがサンドボックス ソリューションかどうかをユーザーに尋ね、この情報を使用して新しいプロジェクトを構成します。 また、ウィザードは、列に関する情報 (基本型や、サイト内の列ギャラリーで列が表示されるグループなど) を収集し、この情報を新しいプロジェクトの Elements.xml ファイルに追加します。 詳細については、「チュートリアル: プロジェクト テンプレートに基づくサイト列プロジェクト項目の作成 (パート 2)」を参照してください。

参照

その他の技術情報

チュートリアル: プロジェクト テンプレートに基づくサイト列プロジェクト項目の作成 (パート 2)

SharePoint プロジェクト項目の種類の定義

SharePoint プロジェクト項目の項目テンプレートとプロジェクト テンプレートの作成

SharePoint プロジェクト システムの拡張機能におけるデータの保存

カスタム データの SharePoint ツールの拡張機能への関連付け