チュートリアル: プロジェクト テンプレートに基づくサイト列プロジェクト項目の作成 (パート 1)
SharePoint プロジェクトは、1 つ以上の SharePoint プロジェクト項目のコンテナーです。独自の SharePoint プロジェクト項目の種類を作成し、それらをプロジェクト テンプレートと関連付けることで、Visual Studio で 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 SDK。このチュートリアルでは、SDK の VSIX プロジェクト テンプレートを使用して、プロジェクト項目を配置するための VSIX パッケージを作成します。詳細については、「Visual Studio の SharePoint ツールの拡張」を参照してください。
次の概念に関する知識があると役に立ちますが、チュートリアルを実行するうえで必須というわけではありません。
SharePoint のサイト内の列。詳細については、「列」を参照してください。
Visual Studio のプロジェクト テンプレート。詳細については、「Visual Studio テンプレートの概要」を参照してください。
プロジェクトの作成
このチュートリアルを実行するには、3 つのプロジェクトを作成する必要があります。
VSIX プロジェクト。このプロジェクトは、サイト内の列プロジェクト項目とプロジェクト テンプレートを配置するための VSIX パッケージを作成します。
プロジェクト テンプレート プロジェクト。このプロジェクトは、サイト内の列プロジェクト項目が含まれる新しい SharePoint プロジェクトを作成するために使用できるプロジェクト テンプレートを作成します。
クラス ライブラリ プロジェクト。このプロジェクトは、サイト内の列プロジェクト項目の動作を定義する Visual Studio 拡張機能を実装します。
この 2 つのプロジェクトを作成することから始めます。
VSIX プロジェクトを作成するには
Visual Studio を起動します。
メニュー バーで [ファイル]、[新規]、[プロジェクト] の順にクリックします。
[新しいプロジェクト] のダイアログ ボックスの上部に、[.NET Framework 4.5] が.NET Frameworkのバージョンの一覧で、が選択されていることを確認します。
[Visual Basic] または [Visual C#] のノードを展開し、[機能拡張] のノードを選択します。
[!メモ]
[機能拡張] ノードは、Visual Studio 2012 SDK がインストールされている場合にのみ使用できます。詳細については、このトピックで前に説明した「前提条件」を参照してください。
プロジェクト テンプレートの一覧で、**[VSIX プロジェクト]**を選択します。
[名前] ボックスに、[SiteColumnProjectItem]を入力し、を [OK] のボタンをクリックします。
Visual Studio のソリューション エクスプローラーに SiteColumnProjectItem プロジェクトが追加されます。
プロジェクト テンプレート プロジェクトを作成するには
**[ソリューション エクスプローラー]で、ソリューション ノードのショートカット メニューを開き、[追加]**を選択し、を **[新しいプロジェクト]**を選択します。
[!メモ]
Visual Basic プロジェクトでソリューション エクスプローラーにソリューション ノードが表示されるのは、General, Projects and Solutions, Options Dialog Boxの [常にソリューションを表示] チェック ボックスがオンになっている場合だけです。
[新しいプロジェクト] のダイアログ ボックスの上部に、[.NET Framework 4.5] が.NET Frameworkのバージョンの一覧で、が選択されていることを確認します。
[Visual C#] または [Visual Basic] のノードを展開し、[機能拡張] のノードを選択します。
プロジェクト テンプレートの一覧で、[C# プロジェクト テンプレート] または [Visual Basic プロジェクト テンプレート] テンプレートを選択します。
[名前] ボックスに、[SiteColumnProjectTemplate]を入力し、を [OK] のボタンをクリックします。
Visual Studio によって SiteColumnProjectTemplate プロジェクトがソリューションに追加されます。
Class1 コード ファイルをプロジェクトから削除します。
Visual Basic プロジェクトを作成した場合は、次のファイルもプロジェクトから削除します。
MyApplication.Designer.vb
MyApplication.myapp
Resources.Designer.vb
Resources.resx
Settings.Designer.vb
Settings.settings
拡張機能プロジェクトを作成するには
**[ソリューション エクスプローラー]で、ソリューション ノードのショートカット メニューを開き、[追加]**を選択し、を **[新しいプロジェクト]**を選択します。
[新しいプロジェクト] のダイアログ ボックスの上部に、[.NET Framework 4.5] が.NET Frameworkのバージョンの一覧で、が選択されていることを確認します。
[Visual C#] または [Visual Basic] のノードを展開し、[ウィンドウ] のノードを選択し、を [クラス ライブラリ] テンプレートを選択します。
[名前] ボックスに、[ProjectItemTypeDefinition] を入力し、を [OK] のボタンをクリックします。
Visual Studio によって、ProjectItemTypeDefinition プロジェクトがソリューションに追加され、既定の Class1 コード ファイルが開きます。
Class1 コード ファイルをプロジェクトから削除します。
拡張機能プロジェクトの構成
コード ファイルおよびアセンブリ参照を追加し、拡張機能プロジェクトを構成します。
プロジェクトを構成するには
ProjectItemTypeDefinitionプロジェクトで、SiteColumnProjectItemTypeProviderという名前のコード ファイルを追加します。
メニュー バーで、[プロジェクト]、**[参照の追加]**を選択します。
[Reference Manager - ProjectItemTypeDefinition] のダイアログ ボックスで、[アセンブリ] のノードを展開し、[Framework] のノードを選択し、System.ComponentModel.Compositionのチェック ボックスをオンにします。
[拡張機能] のノードを選択し、Microsoft.VisualStudio.SharePointアセンブリの横にあるチェック ボックスをオンに [OK] のボタンをクリックします。
新しい SharePoint プロジェクト項目の種類の定義
ISharePointProjectItemTypeProvider インターフェイスを実装するクラスを作成して、新しいプロジェクト項目の種類の動作を定義します。このインターフェイスは、新しい種類のプロジェクト項目を定義するたびに必ず実装します。
新しい SharePoint プロジェクト項目の種類を定義するには
SiteColumnProjectItemTypeProvider コード ファイルでは、既定のコードを次のコードで置き換えて、ファイルを保存します。
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プロジェクト テンプレートは、Visual Studioのすべてのプロジェクトに、.csprojや.vbprojファイルなどの必要なファイルと、ファイルが含まれているSharePointプロジェクトに固有のファイルを表します。詳細については、「SharePoint プロジェクト項目の項目テンプレートとプロジェクト テンプレートの作成」を参照してください。
この手順では、SharePointプロジェクトに固有のファイルを生成する空のSharePointプロジェクトを作成します。このプロジェクトから生成されるテンプレートに含まれるように、SiteColumnProjectTemplateプロジェクトにし、それらのファイルを追加します。またはプロジェクト テンプレートが [新しいプロジェクト] のダイアログ ボックスの位置を指定するには、SiteColumnProjectTemplateプロジェクト ファイルを構成できます。
プロジェクト テンプレートのファイルを作成するには
管理資格情報を使用してを Visual Studio の2番目のインスタンスを起動します。
BaseSharePointProjectという名前のSharePoint 2010プロジェクトを作成します。
重要 [SharePoint カスタマイズ ウィザード]では、[ファーム ソリューションとして配置する] のオプション ボタンを選択します。
空の要素項目をプロジェクトに追加し、項目 [フィールド 1]を表示します。
プロジェクトを保存し、Visual Studioの2番目のインスタンスを閉じます。
、**[ソリューション エクスプローラー]で、SiteColumnProjectItemソリューションを開きますが開いて [SiteColumnProjectTemplate] のプロジェクト ノードのショートカット メニュー Visual Studio あるのインスタンスで、[追加]を選択し、[既存の項目]**を選択します。
[既存項目の追加] のダイアログ ボックスで、ファイル拡張子のリストを開き、**[All Files (*.*)]**を選択します。
BaseSharePointProjectプロジェクトが格納されているディレクトリで、key.snkファイルを選択し、[追加] のボタンをクリックします。
[!メモ]
このチュートリアルでは、テンプレートを使用して作成された各プロジェクトに署名する、使用は、同じkey.snkファイルを作成するプロジェクト テンプレート。ついては、このサンプルを各プロジェクト インスタンスの別のkey.snkファイルを作成するために配置する方法を チュートリアル: プロジェクト テンプレートに基づくサイト列プロジェクト項目の作成 (パート 2)を参照してください。
手順 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、機能、またはパッケージ内のサブフォルダーを再作成せずにします。これらのファイルの詳細については、「SharePoint プロジェクト項目の項目テンプレートとプロジェクト テンプレートの作成」を参照してください。
開発者が [新しいプロジェクト] ダイアログ ボックスでのプロジェクト テンプレートの表示方法を構成するには
[ソリューション エクスプローラー]では、[SiteColumnProjectTemplate] のプロジェクト ノードのショートカット メニューを開き、**[プロジェクトのアンロード]**を選択します。ファイルの変更を保存を確認するメッセージが表示されたら [○] のボタンをクリックします。
[SiteColumnProjectTemplate] のノードのショートカット メニューを再度開き、[Edit SiteColumnProjectTemplate.csproj] か **[Edit SiteColumnProjectTemplate.vbproj]**を選択します。
プロジェクト ファイルで、VSTemplate の次の要素を見つけます。
<VSTemplate Include="SiteColumnProjectTemplate.vstemplate">
この要素を次のXMLに置き換えます。
<VSTemplate Include="SiteColumnProjectTemplate.vstemplate"> <OutputSubPath>SharePoint\SharePoint14</OutputSubPath> </VSTemplate>
OutputSubPath 要素は、プロジェクトをビルドするとプロジェクト テンプレートが作成されるパス内の追加フォルダーを指定します。ここで指定するフォルダーは、顧客が [新しいプロジェクト] のダイアログ ボックスを開いたときにだけプロジェクトのテンプレートを使用できます [SharePoint] 展開し、ノードを開き、をクリックします [2010] のノードをであることを確認します。
ファイルを保存して閉じます。
[ソリューション エクスプローラー]では、[SiteColumnProjectTemplate] のプロジェクトのショートカット メニューを開き、**[プロジェクトの再読み込み]**を選択します。
プロジェクト テンプレート ファイルの編集
で、SiteColumnProjectTemplateプロジェクトのプロジェクト テンプレートの動作を定義する次のファイルを編集する:
AssemblyInfo.cs または AssemblyInfo.vb
Elements.xml
SharePointProjectItem.spdata
Feature1.feature
Package.package
SiteColumnProjectTemplate.vstemplate
ProjectTemplate.csproj または ProjectTemplate.vbproj
次の手順では、これらのファイルの一部に置き換え可能パラメーターを追加します。置き換え可能パラメーターはドル記号 ($) が付いて開始と終了のトークンです。プロジェクトを作成するには、userがこのプロジェクト テンプレートを使用する場合、Visual Studioは、特定の値によって自動的に、新しいプロジェクトのこれらのパラメーターが置換されます。詳細については、「置き換え可能パラメーター」を参照してください。
AssemblyInfo.cs ファイルまたは AssemblyInfo.vb ファイルを編集するには
で、SiteColumnProjectTemplateプロジェクトのAssemblyInfo.csまたはAssemblyInfo.vbファイルを開き、その先頭に次のステートメントを追加します:
Imports System.Security
using System.Security;
SharePoint プロジェクトの [サンドボックス ソリューション] プロパティが [True] に設定されている場合、Visual Studio によって System.Security.AllowPartiallyTrustedCallersAttribute が AssemblyInfo コード ファイルに追加されます。ただし、プロジェクト テンプレートのAssemblyInfoコード ファイルは System.Security の既定では名前空間をインポートします。この using ステートメントまたは Imports ステートメントを追加して、コンパイル エラーが発生しないようにする必要があります。
ファイルを保存して閉じます。
Elements.xml ファイルを編集するには
で、SiteColumnProjectTemplateプロジェクトの次のXMLにElements.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 要素が追加されます。このファイルの内容の詳細については、「フィールド定義」を参照してください。
ファイルを保存して閉じます。
SharePointProjectItem.spdata ファイルを編集するには
で、SiteColumnProjectTemplateプロジェクトの次のXMLにSharePointProjectItem.spdataファイルの内容を置き換えます。
<?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 により、ファイルは次のように変更されます。
プロジェクト項目定義 (このチュートリアルで以前に作成した SiteColumnProjectItemTypeProvider のクラスの SharePointProjectItemTypeAttribute に渡される同じ文字列に ProjectItem の要素の Type の属性を変更します。
ProjectItem の要素から SupportedTrustLevels と SupportedDeploymentScopes の属性を削除します。信頼レベルと配置のスコープは ProjectItemTypeDefinition プロジェクトの SiteColumnProjectItemTypeProvider クラスに指定されているため、これらの属性値は不要です。
.spdata ファイルの内容の詳細については、「SharePoint プロジェクト項目スキーマのリファレンス」を参照してください。
ファイルを保存して閉じます。
Feature1.feature ファイルを編集するには
で、SiteColumnProjectTemplateプロジェクトの次のXMLにFeature1.featureファイルの内容を置き換えます。
<?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 により、ファイルは次のように変更されます。
$guid4$に feature の要素の Id と featureId の属性の値を変更します。
$guid2$に projectItemReference の要素の itemId の属性の値を変更します。
.feature ファイルの詳細については、「SharePoint プロジェクト項目の項目テンプレートとプロジェクト テンプレートの作成」を参照してください。
ファイルを保存して閉じます。
Package.package ファイルを編集するには
で、SiteColumnProjectTemplateプロジェクトの次のXMLに、Package.packageファイルの内容を置き換えます。
<?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 により、ファイルは次のように変更されます。
$guid3$に package の要素の Id と solutionId の属性の値を変更します。
$guid4$に featureReference の要素の itemId の属性の値を変更します。
.package ファイルの詳細については、「SharePoint プロジェクト項目の項目テンプレートとプロジェクト テンプレートの作成」を参照してください。
ファイルを保存して閉じます。
SiteColumnProjectTemplate.vstemplate ファイルを編集するには
で、SiteColumnProjectTemplateプロジェクトのXMLの次のセクションの1文字とSiteColumnProjectTemplate.vstemplateファイルの内容を置き換えます。
- 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 の要素を設定します。(この名前は [新しいプロジェクト] のダイアログ ボックスに表示されます)。
各の ProjectItem の要素を各プロジェクト インスタンスに含まれているfilethat追加します。
名前空間「https://schemas.microsoft.com/developer/vstemplate/2005」を使用します。このソリューション内の他のプロジェクト ファイルは「https://schemas.microsoft.com/developer/msbuild/2003」の名前空間を使用します。したがって、XMLスキーマ警告メッセージが生成され、このチュートリアルのエラーを無視できます。
.vstemplate ファイルの内容の詳細については、「Visual Studio テンプレート スキーマ参照」を参照してください。
ファイルを保存して閉じます。
ProjectTemplate.csproj ファイルまたは ProjectTemplate.vbproj ファイルを編集するには
で、SiteColumnProjectTemplateプロジェクトのXMLの次のセクションの1文字とProjectTemplate.csprojファイルまたはProjectTemplate.vbprojファイルの内容を置き換えます。
- 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、4.5を指定するために使用されません。
SignAssembly と AssemblyOriginatorKeyFile の要素をプロジェクト出力に署名するようにします。
SharePointプロジェクトが使用するアセンブリ参照の Reference の要素を追加します。
Elements.xmlやSharePointProjectItem.spdataなど、プロジェクトの各既定のファイルに要素を追加します。
ファイルを保存して閉じます。
プロジェクト テンプレートを配置するための VSIX パッケージの作成
拡張機能を配置するには、SiteColumnProjectItem ソリューションの VSIX プロジェクトを使用して、VSIX パッケージを作成します。まず、VSIX プロジェクトに含まれている source.extension.vsixmanifest ファイルを変更して、VSIX パッケージを構成します。次に、ソリューションをビルドして VSIX パッケージを作成します。
VSIX パッケージを構成および作成するには
[ソリューション エクスプローラー]では、[SiteColumnProjectItem] のマニフェスト エディターで開き、プロジェクトのsource.extension.vsixmanifestファイル。
source.extension.vsixmanifestファイルは、すべてのVSIXパッケージが必要とするextension.vsixmanifestファイルの基礎です。このファイルの詳細については、「VSIX 拡張機能のスキーマに関するリファレンス」を参照してください。
[製品名] ボックスに、[サイト列]を入力します。
[作成者] ボックスに、[Contoso]を入力します。
[説明] ボックスに、サイト内の列を作成するためのSharePointプロジェクトを入力します。
[資産] のタブをクリックし、[新規作成] のボタンをクリックします。
[新しい資産の追加] のダイアログ ボックスが表示されます。
[種類] の一覧で、**[Microsoft.VisualStudio.ProjectTemplate]**を選択します。
[!メモ]
この値は、extension.vsixmanifest ファイル内の ProjectTemplate 要素に対応します。この要素は、プロジェクト テンプレートを格納する VSIX パッケージ内のサブフォルダーを示します。詳細については、「ProjectTemplate Element (VSX Schema)」を参照してください。
[ソース] の一覧で、**[現在のソリューション内のプロジェクト]**を選択します。
[プロジェクト] の一覧で、[SiteColumnProjectTemplate]を選択し、[OK] のボタンをクリックします。
[新規作成] のボタンをもう一度クリックします。
[新しい資産の追加] のダイアログ ボックスが表示されます。
[種類] の一覧で、**[Microsoft.VisualStudio.MefComponent]**を選択します。
[!メモ]
この値は、extension.vsixmanifest ファイル内の MefComponent 要素に対応します。この要素は、VSIX パッケージ内の拡張機能アセンブリの名前を指定します。詳細については、「MEFComponent Element」を参照してください。
[ソース] の一覧で、**[現在のソリューション内のプロジェクト]**を選択します。
[プロジェクト] の一覧で、[ProjectItemTypeDefinition]を選択し、[OK] のボタンをクリックします。
メニュー バーで、[ビルド]、**[ソリューションのビルド]**を選択し、次に、プロジェクトがエラーなしでコンパイルしてください。
プロジェクト テンプレートのテスト
これで、プロジェクト テンプレートをテストする準備ができました。まず、Visual Studio の実験用インスタンスで SiteColumnProjectItem ソリューションのデバッグを開始します。次に、Visual Studio の実験用インスタンスで、Site Column プロジェクトをテストします。最後に、SharePoint プロジェクトをビルドして実行し、サイト内の列が正常に機能することを確認します。
ソリューションのデバッグを開始するには
管理資格情報を使用してVisual Studioを再起動し、SiteColumnProjectItemソリューションを開きます。
SiteColumnProjectItemTypeProviderコード ファイルで、ブレークポイントを InitializeType のメソッドのコードの先頭行に追加し、デバッグを開始するに [F5] のキーを選択します。
Visual Studio によって、拡張機能が %UserProfile%\AppData\Local\Microsoft\VisualStudio\10.0Exp\Extensions\Contoso\Site Column\1.0 にインストールされ、Visual Studio の実験用インスタンスが開始されます。このインスタンスの Visual Studio でプロジェクト項目をテストします。
Visual Studio でプロジェクトをテストするには
Visual Studioの実験用インスタンスで、メニュー バーで、[ファイル]、[新規作成]、**[プロジェクト]**を選択します。
[Visual C#] または [Visual Basic] のノード (プロジェクト テンプレートがサポートする言語に応じて) [SharePoint] 展開し、ノードを展開し、を [2010] のノードを選択します。
プロジェクト テンプレートの一覧で、[サイト列] テンプレートを選択します。
[名前] ボックスに、[SiteColumnTest] を入力し、を [OK] のボタンをクリックします。
**[ソリューション エクスプローラー]**では、新しいプロジェクトが **[フィールド 1]**という名前のプロジェクト項目と表示されます。
Visual Studioのもう一方のインスタンスで、コードがプロジェクトのデバッグが InitializeType のメソッドの前に設定、続行するように [F5] のキーを選択したブレークポイントで停止することを確認します。
[ソリューション エクスプローラー]では、[フィールド 1] のノードを選択し、[F4] のキーを選択します。
[プロパティ] ウィンドウが開きます。
プロパティ一覧では、プロパティ [Example Property] が表示されることを確認します。
SharePoint でサイト内の列をテストするには
[ソリューション エクスプローラー]では、[SiteColumnTest] のノードを選択します。
[サイト URL] のプロパティの横にあるテキスト ボックスの [プロパティ] のペインで、https://localhostを入力します。
この手順により、デバッグに使用する開発用コンピューター上のローカルSharePointサイトを指定します。
[!メモ]
[サイト URL] のプロパティは、プロジェクトの作成時にSite Columnプロジェクト テンプレートはこの値を収集するウィザードが用意されていないため、既定では空です。開発者にこの値を尋ね、新しいプロジェクトでこのプロパティを構成するウィザードを追加する方法については、「チュートリアル: プロジェクト テンプレートに基づくサイト列プロジェクト項目の作成 (パート 2)」を参照してください。
[F5] のキーを選択します。
サイト内の列の [サイト URL] は、プロジェクトのプロパティで指定されたSharePointサイトにパッケージ化および配置されます。Webブラウザーには、このサイトの既定のページが表示されます。
[!メモ]
[スクリプト デバッグが無効] ダイアログ ボックスで、プロジェクトのデバッグを続行に [○] のボタンをクリックします。
[サイト アクション] で、メニューの **[サイトの設定]**を選択します。
[サイトの設定] のページで、[ギャラリー] の一覧の下で、[サイト列] のリンクを選択します。
サイト内の列の一覧で、[ユーザー設定の列] のグループが **[SiteColumnTest]**という名前の列を含むことを確認します。
Webブラウザーを閉じます。
開発コンピューターのクリーンアップ
プロジェクトのテストが終わったら、プロジェクト テンプレートを Visual Studio の実験用インスタンスから削除します。
開発コンピューターをクリーンアップするには
Visual Studioの実験用インスタンスで、メニュー バーで、[ツール]、**[拡張機能と更新プログラム]**を選択します。
[拡張機能と更新プログラム] のダイアログ ボックスが表示されます。
拡張機能の一覧で、[サイト列] の拡張機能を選択し、[アンインストール] のボタンをクリックします。
表示されたダイアログ ボックスで、拡張機能をアンインストールすることを確認するに [○] のボタンをクリックします。
アンインストールを実行するに [閉じる] のボタンをクリックします。
Visual Studio (実験用インスタンスとSiteColumnProjectItemソリューションが開いている) Visual Studioの両方のインスタンスのインスタンスを閉じます。
次の手順
このチュートリアルを完了すると、プロジェクト テンプレートにウィザードを追加できるようになります。ユーザーが Site Column プロジェクトを作成するときに、ウィザードが、デバッグに使用するサイトの URL と、新しいソリューションがサンドボックス ソリューションかどうかをユーザーに尋ね、この情報を使用して新しいプロジェクトを構成します。また、ウィザードは、列に関する情報 (基本型や、サイト内の列ギャラリーで列が表示されるグループなど) を収集し、この情報を新しいプロジェクトの Elements.xml ファイルに追加します。詳細については、「チュートリアル: プロジェクト テンプレートに基づくサイト列プロジェクト項目の作成 (パート 2)」を参照してください。
参照
処理手順
チュートリアル: プロジェクト テンプレートに基づくサイト列プロジェクト項目の作成 (パート 2)
概念
SharePoint プロジェクト項目の項目テンプレートとプロジェクト テンプレートの作成