Procédure pas à pas : création d'un élément de projet de colonnes de sites avec un modèle de projet, partie 1
Les projets SharePoint sont des conteneurs pour un ou plusieurs éléments de projet SharePoint. Vous pouvez étendre le système de projet SharePoint dans Visual Studio 2010 en créant vos propres types d'éléments de projet SharePoint, puis en les associant à un modèle de projet. Dans cette procédure pas à pas, vous allez définir un type d'élément de projet pour créer une colonne de site, puis vous créerez un modèle de projet qui pourra être utilisé pour créer un projet contenant un élément de projet de la colonne de site.
Cette procédure pas à pas présente les tâches suivantes :
Création d'une extension Visual Studio qui définit un nouveau type d'élément de projet SharePoint pour une colonne de site. Le type d'élément de projet comprend une propriété personnalisée simple qui s'affiche dans la fenêtre Propriétés.
Création d'un modèle de projet pour l'élément de projet dans Visual Studio.
Génération d'un package VSIX (Visual Studio Extension) pour déployer le modèle de projet et l'assembly d'extension.
Débogage et test de l'élément de projet.
Il s'agit d'une procédure pas à pas autonome. Après avoir exécuté cette procédure pas à pas, vous pouvez améliorer l'élément de projet en ajoutant un Assistant au modèle de projet. Pour plus d'informations, consultez Procédure pas à pas : création d'un élément de projet de colonnes de sites avec un modèle de projet, partie 2.
Notes
Vous pouvez télécharger une instance qui contient les projets remplis, de code et d'autres fichiers pour cette procédure pas-à-pas de l'emplacement suivant : https://go.microsoft.com/fwlink/?LinkId=191369.
Composants requis
Vous avez besoin des composants suivants sur l'ordinateur de développement pour terminer cette procédure pas à pas :
Éditions de Microsoft Windows, SharePoint et Visual Studio prises en charge. Pour plus d'informations, consultez Configuration requise pour développer des solutions SharePoint.
Kit de développement logiciel (SDK) Visual Studio 2010. Cette procédure pas à pas utilise le modèle Projet VSIX du Kit de développement logiciel (SDK) pour créer un package VSIX afin de déployer l'élément de projet. Pour plus d'informations, consultez Extension des outils SharePoint dans Visual Studio.
Une connaissance du concept suivant est utile, mais pas obligatoire, pour effectuer cette procédure pas à pas :
Colonnes de site dans SharePoint. Pour plus d'informations, consultez Colonnes.
Modèles de projet dans Visual Studio. Pour plus d'informations, consultez Introduction aux modèles Visual Studio.
Création du projet
Pour exécuter cette procédure pas à pas, vous devez créer trois projets :
Un projet VSIX. Ce projet crée le package VSIX pour déployer l'élément de projet de la colonne de site et le modèle de projet.
Un projet de modèle de projet. Ce projet crée un modèle de projet pouvant être utilisé pour créer un projet SharePoint qui contient l'élément de projet de la colonne de site.
Un projet de bibliothèque de classes. Ce projet implémente une extension Visual Studio qui définit le comportement de l'élément de projet de la colonne de site.
Démarrez la procédure pas à pas en créant les projets.
Pour créer le projet VSIX
Démarrez Visual Studio.
Dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Projet.
Dans la zone de liste déroulante située en haut de la boîte de dialogue Nouveau projet, vérifiez que .NET Framework 4 est sélectionné.
Dans la boîte de dialogue Nouveau projet, développez les nœuds Visual C# ou Visual Basic, puis cliquez sur le nœud Extensibilité.
Notes
Le nœud Extensibilité est disponible uniquement si vous installez le Kit de développement Visual Studio 2010 SDK. Pour plus d'informations, consultez la section des composants requis plus haut dans cette rubrique.
Cliquez sur le modèle Projet VSIX.
Dans la zone Nom, tapez SiteColumnProjectItem.
Cliquez sur OK.
Visual Studio ajoute le projet SiteColumnProjectItem à l'Explorateur de solutions.
Pour créer le projet de modèle de projet
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nœud de solution, pointez sur Ajouter, puis cliquez sur Nouveau projet.
Notes
Dans les projets Visual Basic, le nœud de la solution s'affiche dans l'Explorateur de solutions à condition d'avoir activé la case à cocher Toujours afficher la solution dans la Général, Projets et solutions, boîte de dialogue Options.
Dans la zone de liste déroulante située en haut de la boîte de dialogue Ajouter un nouveau projet, vérifiez que le .NET Framework 4 est sélectionné.
Dans la boîte de dialogue Ajouter un nouveau projet, développez les nœuds Visual C# ou Visual Basic, puis cliquez sur le nœud Extensibilité.
Dans la liste des modèles de projet, sélectionnez Modèle de projet C# ou Modèle de projet Visual Basic.
Dans la zone Nom, tapez SiteColumnProjectTemplate.
Cliquez sur OK.
Visual Studio ajoute le projet SiteColumnProjectTemplate à la solution.
Supprimez le fichier de code Class1 du projet.
Si vous avez créé un projet Visual Basic, supprimez également les fichiers suivants du projet :
MyApplication.Designer.vb
MyApplication.myapp
Resources.Designer.vb
Resources.resx
Settings.Designer.vb
Settings.settings
Pour créer le projet d'extension
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nœud de solution, pointez sur Ajouter, puis cliquez sur Nouveau projet.
Dans la zone de liste déroulante située en haut de la boîte de dialogue Ajouter un nouveau projet, vérifiez que le .NET Framework 4 est sélectionné.
Dans la boîte de dialogue Ajouter un nouveau projet, développez le nœud Visual C# ou Visual Basic, puis cliquez sur Fenêtres.
Sélectionnez le modèle de projet Bibliothèque de classes.
Dans la zone Nom, tapez ProjectItemTypeDefinition.
Cliquez sur OK.
Visual Studio ajoute le projet ProjectItemTypeDefinition à la solution et ouvre le fichier de code Class1 par défaut.
Supprimez le fichier de code Class1 du projet.
Configuration du projet d'extension
Ajoutez des fichiers de code et des références d'assembly pour configurer le projet d'extension.
Pour configurer le projet
Dans le projet de ProjectItemTypeDefinition, ajoutez un nouveau fichier de code appelé SiteColumnProjectItemTypeProvider.
Dans le menu Projet, cliquez sur Ajouter une référence.
Sous l'onglet .NET, appuyez sur CTRL et cliquez sur les assemblys suivants, puis cliquez sur OK :
Microsoft.VisualStudio.SharePoint
System.ComponentModel.Composition
Définition du nouveau type d'élément de projet SharePoint
Créez une classe qui implémente l'interface ISharePointProjectItemTypeProvider pour définir le comportement du nouveau type d'élément de projet. Implémentez cette interface chaque fois que vous souhaitez définir un nouveau type d'élément de projet.
Pour définir le nouveau type d'élément de projet SharePoint
Dans le projet ProjectItemTypeDefinition, ouvrez le fichier de code SiteColumnProjectItemTypeProvider.
Remplacez le code dans ce fichier par le code suivant, puis enregistrez le fichier.
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); } } } } }
Création d'un modèle de projet Visual Studio
Pour permettre à d'autres développeurs de créer un projet SharePoint qui contient un élément de projet d'une colonne de site, créez un modèle de projet. Un modèle de projet SharePoint se compose de fichiers requis pour tous les projets dans Visual Studio, tels que les fichiers .csproj ou .vbproj et .vstemplate, et de fichiers spécifiques aux projets SharePoint. Pour plus d'informations, consultez Création de modèles d'élément et de modèles de projet pour les éléments de projet SharePoint.
Dans cette procédure, créez un projet SharePoint vide pour générer des fichiers spécifiques aux projets SharePoint, puis ajoutez ces fichiers au projet SiteColumnProjectTemplate pour qu'ils soient inclus dans le modèle généré à partir de ce projet. Configurez également le fichier projet SiteColumnProjectTemplate pour spécifier l'emplacement où le modèle de projet s'affiche dans la boîte de dialogue Ajouter un nouveau projet.
Pour créer les fichiers pour le modèle de projet
Démarrez une deuxième instance de Visual Studio avec des privilèges d'administrateur.
Créez un projet SharePoint vide nommé BaseSharePointProject. Ne sélectionnez pas l'option Déployer en tant que solution de batterie dans l'Assistant Personnalisation de SharePoint.
Ajoutez un élément de type Élément vide au projet. Nommez l'élément Field1.
Enregistrez le projet, puis fermez la deuxième instance de Visual Studio.
Dans l'instance de Visual Studio avec la solution SiteColumnProjectItem ouverte, cliquez avec le bouton droit sur le nœud du projet SiteColumnProjectTemplate dans l'Explorateur de solutions.
Dans le menu Ajouter, cliquez sur Élément existant.
Dans la boîte de dialogue Ajouter un élément existant, cliquez sur la liste déroulante des extensions de fichier et sélectionnez Tous les fichiers (*.*).
Naviguez jusqu'au dossier qui contient le projet BaseSharePointProject. Dans ce dossier, sélectionnez key.snk, puis cliquez sur Ajouter.
Notes
Dans cette procédure pas à pas, le modèle de projet que vous créez utilise le même fichier key.snk pour signer chaque projet créé à l'aide du modèle. Pour savoir comment développer cet exemple pour créer un nouveau fichier key.snk pour chaque instance de projet, consultez Procédure pas à pas : création d'un élément de projet de colonnes de sites avec un modèle de projet, partie 2.
Répétez les étapes 5 à 8 pour ajouter les fichiers suivants des sous-dossiers spécifiés dans le dossier BaseSharePointProject :
\Field1\Elements.xml
\Field1\SharePointProjectItem.spdata
\Features\Feature1\Feature1.feature
\Features\Feature1\Feature1.Template.xml
\Package\Package.package
\Package\Package.Template.xml
Ajoutez ces fichiers directement dans le projet SiteColumnProjectTemplate ; ne recréez pas les sous-dossiers Field1, Features ou Package dans le projet. Pour plus d'informations sur ces fichiers, consultez Création de modèles d'élément et de modèles de projet pour les éléments de projet SharePoint.
Pour configurer la manière dont les développeurs découvrent le modèle de projet dans la boîte de dialogue Ajouter un nouveau projet
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nœud du projet SiteColumnProjectTemplate, puis cliquez sur Décharger le projet. Si vous êtes invité à enregistrer vos modifications dans un des fichiers, cliquez sur Oui.
Cliquez avec le bouton droit de nouveau sur le nœud SiteColumnProjectTemplate, puis sur Modifier SiteColumnProjectTemplate.csproj ou Modifier SiteColumnProjectTemplate.vbproj.
Localisez l'élément VSTemplate suivant dans le fichier projet.
<VSTemplate Include="SiteColumnProjectTemplate.vstemplate">
Remplacez cet élément VSTemplate par le code XML suivant :
<VSTemplate Include="SiteColumnProjectTemplate.vstemplate"> <OutputSubPath>SharePoint\SharePoint14</OutputSubPath> </VSTemplate>
L'élément OutputSubPath spécifie des dossiers supplémentaires dans le chemin d'accès où le modèle de projet est créé lorsque vous générez le projet. Les dossiers spécifiés ici garantissent que le modèle de projet sera disponible uniquement lorsque les clients cliquent sur le nœud 2010 sous le nœud SharePoint dans la boîte de dialogue Ajouter un nouvel projet.
Enregistrez et fermez le fichier.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet SiteColumnProjectTemplate, puis cliquez sur Recharger le projet.
Modification des fichiers du modèle de projet
Modifiez les fichiers suivants dans le projet SiteColumnProjectTemplate pour définir le comportement du modèle de projet :
AssemblyInfo.cs ou AssemblyInfo.vb
Elements.xml
SharePointProjectItem.spdata
Feature1.feature
Package.package
SiteColumnProjectTemplate.vstemplate
ProjectTemplate.csproj ou ProjectTemplate.vbproj
Dans les procédures suivantes, vous allez ajouter à certains de ces fichiers des paramètres remplaçables. Un paramètre remplaçable est un jeton qui commence et se termine par le signe dollar ($). Lorsqu'un utilisateur utilise ce modèle de projet pour créer un projet, Visual Studio remplace automatiquement ces paramètres dans le nouveau projet par des valeurs spécifiques. Pour plus d'informations, consultez Paramètres remplaçables.
Pour modifier le fichier AssemblyInfo.cs ou AssemblyInfo.vb
Dans le projet de SiteColumnProjectTemplate, explorateur double-cliquer AssemblyInfo.cs ou AssemblyInfo.vb dans l'Explorateur de solutions.
Ajoutez l'instruction suivante au début de ce fichier.
Imports System.Security
using System.Security;
Lorsque la propriété Sandboxed Solution d'un projet SharePoint a la valeur True, Visual Studio ajoute l'attribut System.Security.AllowPartiallyTrustedCallersAttribute au fichier de code AssemblyInfo. Toutefois, le fichier de code AssemblyInfo dans le modèle de projet n'importe pas l'espace de noms System.Security par défaut. Vous devez ajouter cette instruction using ou Imports pour éviter les erreurs de compilation.
Enregistrez et fermez le fichier.
Pour modifier le fichier Elements.xml
Dans le projet SiteColumnProjectTemplate, double-cliquez sur le fichier Elements.xml dans l'Explorateur de solutions.
Remplacez le contenu du fichier par le code XML suivant.
<?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>
Le nouveau XML ajoute un élément Field qui définit le nom de la colonne de site, son type de base et le groupe dans lequel la colonne de site peut être répertoriée dans la galerie. Pour plus d'informations sur le contenu de ce fichier, consultez Définitions de champ.
Enregistrez et fermez le fichier.
Pour modifier le fichier SharePointProjectItem.spdata
Dans le projet SiteColumnProjectTemplate, double-cliquez sur le fichier SharePointProjectItem.spdata dans l'Explorateur de solutions.
Remplacez le contenu du fichier par le code XML suivant.
<?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>
Le nouveau XML apporte les modifications suivantes au fichier :
Il remplace l'attribut Type de l'élément ProjectItem par la même chaîne transmise au SharePointProjectItemTypeAttribute de la définition d'élément de projet (classe SiteColumnProjectItemTypeProvider que vous avez créée précédemment dans cette procédure).
Il supprime les attributs SupportedTrustLevels et SupportedDeploymentScopes de l'élément ProjectItem. Ces valeurs d'attribut sont inutiles, étant donné que les niveaux de confiance et portées de déploiement sont spécifiés dans la classe SiteColumnProjectItemTypeProvider dans le projet ProjectItemTypeDefinition.
Pour plus d'informations sur le contenu des fichiers .spdata, consultez Référence du schéma d'élément de projet SharePoint.
Enregistrez et fermez le fichier.
Pour modifier le fichier Feature1.feature
Dans le projet SiteColumnProjectTemplate, double-cliquez sur le fichier Feature1.feature dans l'Explorateur de solutions.
Remplacez le contenu du fichier par le code XML suivant.
<?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>
Le nouveau XML apporte les modifications suivantes au fichier :
Il remplace les valeurs des attributs Id et featureId de l'élément feature par $guid4$.
Il remplace les valeurs de l'attribut itemId de l'élément projectItemReference par $guid2$.
Pour plus d'informations sur les fichiers .feature, consultez Création de modèles d'élément et de modèles de projet pour les éléments de projet SharePoint.
Enregistrez et fermez le fichier.
Pour modifier le fichier Package.package
Dans le projet SiteColumnProjectTemplate, double-cliquez sur le fichier Package.package dans l'Explorateur de solutions.
Remplacez le contenu du fichier par le code XML suivant.
<?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>
Le nouveau XML apporte les modifications suivantes au fichier :
Il remplace les valeurs des attributs Id et solutionId de l'élément package par $guid3$.
Il remplace les valeurs de l'attribut itemId de l'élément featureReference par $guid4$.
Pour plus d'informations sur les fichiers .package, consultez Création de modèles d'élément et de modèles de projet pour les éléments de projet SharePoint.
Enregistrez et fermez le fichier.
Pour modifier le fichier SiteColumnProjectTemplate.vstemplate
Dans le projet SiteColumnProjectTemplate, double-cliquez sur le fichier SiteColumnProjectTemplate.vstemplate dans l'Explorateur de solutions.
Remplacez le contenu du fichier par l'une des sections XML suivants. Si vous créez un modèle de projet Visual C#, utilisez la syntaxe XML suivante.
<?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>
Si vous créez un modèle de projet Visual Basic, utilisez la syntaxe XML suivante.
<?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>
Le nouveau XML apporte les modifications suivantes au fichier :
Il affecte à l'élément Name la valeur Colonne de site (il s'agit du nom qui s'affiche dans la boîte de dialogue Ajouter un nouveau projet).
Il ajoute les éléments ProjectItem pour chacun des fichiers inclus dans chaque instance de projet.
Pour plus d'informations sur le contenu des fichiers .vstemplate, consultez Référence du schéma de modèle Visual Studio.
Enregistrez et fermez le fichier.
Pour modifier le fichier de ProjectTemplate.csproj ou ProjectTemplate.vbproj
Dans le projet SiteColumnProjectTemplate, double-cliquez sur le fichier ProjectTemplate.csproj ou ProjectTemplate.vbproj dans l'Explorateur de solutions.
Remplacez le contenu du fichier par l'une des sections XML suivants. Si vous créez un modèle de projet Visual C#, utilisez la syntaxe XML suivante.
<?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>
Si vous créez un modèle de projet Visual Basic, utilisez la syntaxe XML suivante.
<?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>
Le nouveau XML apporte les modifications suivantes au fichier :
Il remplace l'élément TargetFrameworkVersion pour spécifier le .NET Framework 3.5.
Il ajoute les éléments SignAssembly et AssemblyOriginatorKeyFile pour signer la sortie de projet.
Il ajoute de nouveaux éléments Reference pour les références d'assembly utilisées par les projets SharePoint.
Il ajoute de nouveaux éléments pour chacun des fichiers par défaut du projet, notamment Elements.xml et SharePointProjectItem.spdata.
Enregistrez et fermez le fichier.
Création d'un package VSIX pour déployer le modèle de projet
Pour déployer l'extension, utilisez le projet VSIX dans la solution SiteColumnProjectItem pour créer un package VSIX. En premier lieu, configurez le package VSIX en modifiant le fichier source.extension.vsixmanifest qui est inclus dans le projet VSIX. Ensuite, créez le package VSIX en générant la solution.
Pour configurer et créer le package VSIX
Dans l'Explorateur de solutions, double-cliquez sur le fichier source.extension.vsixmanifest dans le projet SiteColumnProjectItem.
Visual Studio ouvre le fichier dans l'éditeur de manifeste. Le fichier source.extension.vsixmanifest est la base du fichier extension.vsixmanifest requis par tous les packages VSIX. Pour plus d'informations sur ce fichier, consultez VSIX Extension Schema Reference.
Dans la zone Nom du produit, tapez Colonne de site.
Dans la zone Auteur, tapez Contoso.
Dans la zone Description, tapez Un projet SharePoint pour la création de colonnes de site.
Dans la section Contenu de l'éditeur, cliquez sur le bouton Ajouter du contenu.
Dans la boîte de dialogue Ajouter du contenu, cliquez sur la zone déroulante Sélectionner un type de contenu, puis sélectionnez Modèle de projet.
Notes
Cette valeur correspond à l'élément ProjectTemplate dans le fichier extension.vsixmanifest. Cet élément identifie le sous-dossier du package VSIX qui contient le modèle de projet. Pour plus d'informations, consultez ProjectTemplate Element (VSX Schema).
Sous Sélectionner une source, cliquez sur la case d'option Projet et sélectionnez SiteColumnProjectTemplate dans la zone de liste en regard de cette dernière.
Cliquez sur OK.
Cliquez de nouveau sur le bouton Ajouter du contenu.
Dans la boîte de dialogue Ajouter du contenu, dans la zone de liste Sélectionner un type de contenu, sélectionnez Composant MEF.
Notes
Cette valeur correspond à l'élément MefComponent dans le fichier extension.vsixmanifest. Cet élément spécifie le nom d'un assembly d'extension dans le package VSIX. Pour plus d'informations, consultez MEFComponent Element (VSX Schema).
Sous Sélectionner une source, activez la case d'option Projet et sélectionnez ProjectItemTypeDefinition dans la zone de liste en regard de cette dernière.
Cliquez sur OK.
Dans le menu Générer, cliquez sur Générer la solution. Assurez-vous que le projet se compile sans erreurs.
Test du modèle de projet
Vous êtes maintenant prêt à tester le modèle de projet. Commencez à déboguer la solution SiteColumnProjectItem dans l'instance expérimentale de Visual Studio. Testez ensuite le projet Colonne de site dans l'instance expérimentale de Visual Studio. Enfin, générez et exécutez le projet SharePoint pour vous assurer que la colonne de site fonctionne comme prévu.
Pour commencer à déboguer la solution
Redémarrez Visual Studio avec les privilèges d'administrateur et ouvrez la solution SiteColumnProjectItem.
Ouvrez le fichier de code SiteColumnProjectItemTypeProvider et ajoutez un point d'arrêt au niveau de la première ligne de code dans la méthode InitializeType.
Appuyez sur F5 pour démarrer le débogage.
Visual Studio installe l'extension sous %UserProfile%\AppData\Local\Microsoft\VisualStudio\10.0Exp\Extensions\Contoso\Site Column\1.0 et démarre une instance expérimentale de Visual Studio. Vous testerez l'élément de projet dans cette instance de Visual Studio.
Pour tester le projet dans Visual Studio
Dans l'instance expérimentale de Visual Studio, dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Projet.
Développez Visual C# ou Visual Basic (selon le langage pris en charge par votre modèle de projet), développez SharePoint, puis cliquez sur 2010.
Dans la liste des modèles de projet, sélectionnez Colonne de site.
Dans la zone Nom, tapez SiteColumnTest.
Cliquez sur OK. Un nouveau projet s'affiche dans l'Explorateur de solutions avec un élément de projet nommé Field1.
Assurez-vous que le code dans l'autre instance de Visual Studio s'arrête au niveau du point d'arrêt que vous avez défini précédemment dans la méthode InitializeType. Appuyez sur F5 pour continuer de déboguer le projet.
Dans l'Explorateur de solutions, cliquez sur le nœud Field1 et appuyez sur F4. Cela a pour effet d'ouvrir la fenêtre Propriétés.
Vérifiez si le propriété Exemple de propriété figure dans la liste des propriétés.
Pour tester la colonne de site dans SharePoint
Dans l'Explorateur de solutions, cliquez sur le nœud SiteColumnTest.
Dans la fenêtre Propriétés, cliquez sur la zone de texte en regard de la propriété URL du site et tapez https://localhost. Cela spécifie le site SharePoint local sur l'ordinateur de développement à utiliser pour le débogage.
Notes
La propriété URL du site est vide par défaut parce que le modèle de projet Colonne de site ne fournit pas d'Assistant pour collecter cette valeur lorsque le projet est créé. Pour en savoir plus sur l'ajout d'un Assistant qui invite le développeur à spécifier cette valeur, puis configure cette propriété dans le nouveau projet, consultez Procédure pas à pas : création d'un élément de projet de colonnes de sites avec un modèle de projet, partie 2.
Appuyez sur F5. La colonne de site est empaquetée et déployée sur le site SharePoint spécifié par la propriété URL de site du projet. Le navigateur Web s'ouvre à la page par défaut de ce site.
Notes
Si la boîte de dialogue Le débogage de script est désactivé est affichée, cliquez sur Oui pour continuer à déboguer le projet.
Dans le menu Actions de site, cliquez sur Paramètres du site.
Sous Galeries, cliquez sur Colonnes de site.
Dans la liste des colonnes de site, vérifiez qu'il existe un groupe Colonnes personnalisées qui contient une colonne nommée SiteColumnTest.
Fermez le navigateur Web.
Nettoyage de l'ordinateur de développement
Une fois le test du projet terminé, supprimez le modèle de projet de l'instance expérimentale de Visual Studio.
Pour nettoyer l'ordinateur de développement
Dans l'instance expérimentale de Visual Studio, dans le menu Outils, cliquez sur Gestionnaire d'extensions.
La boîte de dialogue Gestionnaire d'extensions s'ouvre.
Dans la liste d'extensions, cliquez sur Colonne de site, puis sur Désinstaller.
Dans la boîte de dialogue qui s'affiche, cliquez sur Oui pour confirmer que vous voulez désinstaller l'extension.
Cliquez sur Redémarrer maintenant pour terminer l'installation.
Fermez les deux instances de Visual Studio (l'instance expérimentale et l'instance de Visual Studio dans laquelle la solution SiteColumnProjectItem est ouverte).
Étapes suivantes
Après avoir terminé cette procédure pas à pas, vous pouvez ajouter un Assistant au modèle de projet. Lorsqu'un utilisateur crée un projet Colonne de site, l'Assistant invite l'utilisateur à indiquer l'URL du site à utiliser pour le débogage et lui demande si la nouvelle solution est un bac à sable (sandbox), puis l'Assistant configure le projet avec ces informations. L'Assistant collecte également des informations sur la colonne (par exemple le type de base et le groupe dans lequel la colonne peut être répertoriée dans la galerie des colonnes de site) et ajoute ces informations dans le fichier Elements.xml du nouveau projet. Pour plus d'informations, consultez Procédure pas à pas : création d'un élément de projet de colonnes de sites avec un modèle de projet, partie 2.
Voir aussi
Autres ressources
Définition de types d'éléments de projet SharePoint personnalisés
Création de modèles d'élément et de modèles de projet pour les éléments de projet SharePoint
Enregistrement des données dans les extensions du système de projet SharePoint
Association de données personnalisées à des extensions d'outils SharePoint