Tutorial: Crear un elemento de proyecto de columna de sitio con una plantilla de proyecto, parte 1
Los proyectos de SharePoint son contenedores para uno o más elementos de proyecto de SharePoint.Puede extender el sistema de proyectos de SharePoint en Visual Studio creando sus propios tipos de elemento de proyecto de SharePoint y después asociándolos con una plantilla de proyecto.En este tutorial, definirá un tipo de elemento de proyecto para crear una columna de sitio y, a continuación, creará una plantilla de proyecto que se puede usar para crear un nuevo proyecto que contenga un elemento de proyecto de columnas de sitio.
En este tutorial se muestran las siguientes tareas:
Crear una extensión de Visual Studio que define un nuevo tipo de elemento de proyecto de SharePoint para una columna de sitio.El tipo de elemento de proyecto incluye una propiedad personalizada simple que aparece en la ventana Propiedades.
Crear una plantilla de proyecto de Visual Studio para el elemento de proyecto.
Compilar un paquete de extensión de Visual Studio (VSIX) para implementar la plantilla de proyecto y el ensamblado de la extensión.
Depurar y probar el elemento de proyecto.
Este es un tutorial independiente.Después de completar este tutorial, puede mejorar el elemento de proyecto si agrega un asistente a la plantilla de proyecto.Para obtener más información, vea Tutorial: Crear un elemento de proyecto de columna de sitio con una plantilla de proyecto, parte 2.
[!NOTA]
Puede descargar un ejemplo que contiene los proyectos completos, el código y otros archivos para este tutorial en la siguiente ubicación: https://go.microsoft.com/fwlink/?LinkId=191369.
Requisitos previos
Necesitará los componentes siguientes en el equipo de desarrollo para completar este tutorial:
Ediciones compatibles de Microsoft Windows, SharePoint y Visual Studio.Para obtener más información, vea Requisitos para desarrollar soluciones de SharePoint.
Visual Studio SDK.En este tutorial se utiliza la plantilla Proyecto VSIX del SDK para crear un paquete VSIX e implementar el elemento.Para obtener más información, vea Extender la Herramientas de SharePoint en Visual Studio.
El conocimiento de los siguientes conceptos es útil, aunque no necesario, para completar el tutorial.
Columnas de sitio de SharePoint.Para obtener más información, vea Columnas.
Plantillas de proyecto de Visual Studio.Para obtener más información, vea Introducción a las plantillas de Visual Studio.
Crear los proyectos
Para completar este tutorial, debe crear tres proyectos:
Un proyecto VSIX.Este proyecto crea el paquete VSIX para implementar el elemento de proyecto de columnas de sitio y la plantilla de proyecto.
Un proyecto de plantilla de proyecto.Este proyecto crea una plantilla de proyecto que se puede usar para crear un nuevo proyecto de SharePoint que contiene el elemento de proyecto de columnas de sitio.
Un proyecto de biblioteca de clases.Este proyecto implementa una extensión de Visual Studio que define el comportamiento del elemento de proyecto de columnas de sitio.
Comience el tutorial creando ambos proyectos.
Para crear el proyecto VSIX
Inicie Visual Studio.
En la barra de menú, elija Archivo, Nuevo, Proyecto.
En la parte superior del cuadro de diálogo Nuevo proyecto , asegúrese de que .NET Framework 4,5 se elige en la lista de versiones de .NET Framework.
Expanda los nodos Visual Basic o Visual c# y, a continuación el nodo Extensibilidad .
[!NOTA]
El nodo Extensibilidad solo está disponible si instala Visual Studio 2012 SDK.Para obtener más información, vea la sección Requisitos previos, anteriormente en este tema.
En la lista de plantillas de proyecto, elija Proyecto VSIX.
En el cuadro Nombre , entre en SiteColumnProjectItem, y elija el botón Aceptar .
Visual Studio agrega el proyecto SiteColumnProjectItem al Explorador de soluciones.
Para crear el proyecto de plantilla de proyecto
En Explorador de soluciones, abra el menú contextual para el nodo de la solución, elija Agregary, a continuación Nuevo proyecto.
[!NOTA]
En los proyectos de Visual Basic, el nodo de la solución aparece en el Explorador de soluciones solo cuando se activa la casilla Mostrar solución siempre en General, Projects and Solutions, Options Dialog Box.
En la parte superior del cuadro de diálogo Nuevo proyecto , asegúrese de que .NET Framework 4,5 se elige en la lista de versiones de .NET Framework.
Expanda el nodo Visual c# o Visual Basic y, a continuación el nodo Extensibilidad .
En la lista de plantillas de proyecto, elija la plantilla Plantilla de proyecto de C o Plantilla de proyecto de Visual Basic .
En el cuadro Nombre , entre en SiteColumnProjectTemplate, y elija el botón Aceptar .
Visual Studio agrega el proyecto SiteColumnProjectTemplate a la solución.
Elimine el archivo de código Class1 del proyecto.
Si creó un proyecto de Visual Basic, elimine también los siguientes archivos del proyecto:
MyApplication.Designer.vb
MyApplication.myapp
Resources.Designer.vb
Resources.resx
Settings.Designer.vb
Settings.settings
Para crear la extensión de proyecto
En Explorador de soluciones, abra el menú contextual para el nodo de la solución, elija Agregary, a continuación Nuevo proyecto.
En la parte superior del cuadro de diálogo Nuevo proyecto , asegúrese de que .NET Framework 4,5 se elige en la lista de versiones de .NET Framework.
Expanda los nodos Visual c# o Visual Basic , elija el nodo Windows , y después elija la plantilla Biblioteca de clases .
En el cuadro Nombre , escriba ProjectItemTypeDefinition y elija el botón Aceptar .
Visual Studio agrega el proyecto ProjectItemTypeDefinition a la solución y abre el archivo de código predeterminado Class1.
Elimine el archivo de código Class1 del proyecto.
Configurar el proyecto de extensión
Agregue los archivos de código y las referencias de ensamblado para configurar el proyecto de extensión.
Para configurar el proyecto
En el proyecto ProjectItemTypeDefinition, agregue un archivo de código denominado SiteColumnProjectItemTypeProvider.
En la barra de menú, elija Proyecto, Agregar referencia.
En el cuadro de diálogo Administrador de referencia - ProjectItemTypeDefinition , expanda el nodo Ensamblados , elija el nodo Framework , y seleccione la casilla System.ComponentModel.Composition.
Elija el nodo Extensiones , active la casilla situada junto al ensamblado Microsoft.VisualStudio.SharePoint, y después elija el botón Aceptar .
Definir el nuevo tipo de elemento de proyecto de SharePoint
Cree una clase que implemente la interfaz ISharePointProjectItemTypeProvider para definir el comportamiento del nuevo tipo de elemento de proyecto.Implemente esta interfaz para definir un nuevo tipo de elemento de proyecto todas las veces que desee.
Para definir el nuevo tipo de elemento de proyecto de SharePoint
En el archivo de código SiteColumnProjectItemTypeProvider , reemplace el código predeterminado por el siguiente código, y guarde el archivo.
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); } } } } }
Crear una plantilla de proyecto de Visual Studio
Crear una plantilla de proyecto, otros desarrolladores para crear proyectos de SharePoint que contienen elementos de proyecto de columnas de sitio.Una plantilla de proyecto de SharePoint incluye los archivos necesarios para todos los proyectos de Visual Studio, como archivos .csproj o .vbproj y .vstemplate, y los archivos que son específicos de los proyectos de SharePoint.Para obtener más información, vea Crear plantillas de elemento y plantillas de proyecto para los elementos de proyecto de SharePoint.
En este procedimiento, creará un proyecto de SharePoint vacío para generar archivos específicos de los proyectos de SharePoint.A continuación agrega al proyecto SiteColumnProjectTemplate para incluirlos en la plantilla que se genera a partir de este proyecto.También configura el archivo del proyecto SiteColumnProjectTemplate para especificar dónde aparecerá la plantilla de proyecto en el cuadro de diálogo Nuevo proyecto .
Para crear los archivos de la plantilla de proyecto
Inicie una segunda instancia Visual Studio con credenciales administrativas.
Cree un proyecto de SharePoint 2010 que se denomina En.
Importante En Asistente para la personalización de SharePoint, no seleccione el botón de opción Implementar como solución de granja de servidores .
Agregue al proyecto un elemento vacío, y llame al elemento Field1.
Guarde el proyecto, y luego cierre la segunda instancia Visual Studio.
En la instancia Visual Studio que tiene abierta la solución SiteColumnProjectItem, en Explorador de soluciones, abra el menú contextual para el nodo del proyecto SiteColumnProjectTemplate , elija Agregary, a continuación Elemento existente.
En el cuadro de diálogo Agregar elemento existente , abra la lista de extensiones de archivo y, a continuación Todos los archivos (*.*).
En el directorio que contiene el proyecto BaseSharePointProject, seleccione el archivo key.snk, y después elija el botón Agregar .
[!NOTA]
En este tutorial, la plantilla de proyecto que se crea usa el mismo archivo key.snk para firmar cada proyecto que se crea mediante la plantilla.Para obtener información sobre cómo expandir este ejemplo para crear un archivo key.snk para cada instancia de proyecto, vea Tutorial: Crear un elemento de proyecto de columna de sitio con una plantilla de proyecto, parte 2.
Repita los pasos del 5 al 8 para agregar los archivos siguientes de las subcarpetas especificadas en el directorio de BaseSharePointProject:
\Field1\Elements.xml
\Field1\SharePointProjectItem.spdata
\Features\Feature1\Feature1.feature
\Features\Feature1\Feature1.Template.xml
\Package\Package.package
\Package\Package.Template.xml
Agregue estos archivos directamente al proyecto SiteColumnProjectTemplate; no vuelva a crear las subcarpetas de Field1, las características, o el paquete en el proyecto.Para obtener más información sobre estos archivos, vea Crear plantillas de elemento y plantillas de proyecto para los elementos de proyecto de SharePoint.
Para configurar cómo los desarrolladores detectan la plantilla de proyecto en el cuadro de diálogo Nuevo proyecto
En Explorador de soluciones, abra el menú contextual para el nodo del proyecto SiteColumnProjectTemplate y, a continuación Descargar el proyecto.Si se le pide que guarde los cambios a los archivos, elija el botón Sí .
Abrir el menú contextual para el nodo SiteColumnProjectTemplate de nuevo y, a continuación Edición SiteColumnProjectTemplate.csproj o Edición SiteColumnProjectTemplate.vbproj.
En el archivo de proyecto, busque el elemento siguiente VSTemplate .
<VSTemplate Include="SiteColumnProjectTemplate.vstemplate">
Reemplace este elemento con el XML siguiente.
<VSTemplate Include="SiteColumnProjectTemplate.vstemplate"> <OutputSubPath>SharePoint\SharePoint14</OutputSubPath> </VSTemplate>
El elemento OutputSubPath especifica las carpetas adicionales en la ruta de acceso en la que se crea la plantilla de proyecto al compilar el proyecto.Las carpetas especificadas aquí garantizan que la plantilla de proyecto solo estará disponible cuando abren los clientes el cuadro de diálogo Nuevo proyecto , expanda el nodo SharePoint , y después elija el nodo 2010 .
Guarde y cierre el archivo.
En Explorador de soluciones, abra el menú contextual para el proyecto SiteColumnProjectTemplate y, a continuación Volver a cargar el proyecto.
Modificar los archivos de plantilla de proyecto
En el proyecto SiteColumnProjectTemplate, modifique los archivos siguientes para definir el comportamiento de la plantilla de proyecto:
AssemblyInfo.cs o AssemblyInfo.vb
Elements.xml
SharePointProjectItem.spdata
Feature1.feature
Package.package
SiteColumnProjectTemplate.vstemplate
ProjectTemplate.csproj o ProjectTemplate.vbproj
En los procedimientos siguientes, agregará parámetros reemplazables a algunos de estos archivos.Un parámetro reemplazable es un token que empieza y termina por el signo de dólar ($).Cuando un usuario emplea esta plantilla de proyecto para crear un proyecto, Visual Studio reemplaza automáticamente estos parámetros en el nuevo proyecto por valores específicos.Para obtener más información, vea Parámetros reemplazables.
Para modificar el archivo AssemblyInfo.cs o AssemblyInfo.vb
En el proyecto SiteColumnProjectTemplate, abra el archivo AssemblyInfo.cs o AssemblyInfo.vb, y se agrega la siguiente instrucción al principio de él:
Imports System.Security
using System.Security;
Cuando la propiedad Solución en espacio aislado de un proyecto de SharePoint se establece en True, Visual Studio agrega System.Security.AllowPartiallyTrustedCallersAttribute al archivo de código AssemblyInfo.Sin embargo, el archivo de código AssemblyInfo de la plantilla de proyecto no importa el espacio de nombres System.Security de forma predeterminada.Debe agregar esta instrucción using o Imports para evitar los errores de compilación.
Guarde y cierre el archivo.
Para modificar el archivo Elements.xml
En el proyecto SiteColumnProjectTemplate, reemplace el contenido del archivo Elements.xml con el XML siguiente.
<?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>
El nuevo XML agrega un elemento Field que define el nombre de la columna de sitio, su tipo base y el grupo en el que se hace una lista de la columna de sitio en la galería.Para obtener más información sobre el contenido de este archivo, vea Definiciones de campo.
Guarde y cierre el archivo.
Para editar el archivo SharePointProjectItem.spdata
En el proyecto SiteColumnProjectTemplate, reemplace el contenido del archivo SharePointProjectItem.spdata con el XML siguiente.
<?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>
El nuevo XML realiza los cambios siguientes en el archivo:
Cambie el atributo Type de elemento ProjectItem a la misma cadena que se pasa a SharePointProjectItemTypeAttribute en la definición del elemento de proyecto (la clase SiteColumnProjectItemTypeProvider que creó anteriormente en este tutorial).
Quita los atributos SupportedTrustLevels y SupportedDeploymentScopes de elemento ProjectItem .Estos valores de atributo son innecesarios porque los niveles de confianza y los ámbitos de implementación se especifican en la clase SiteColumnProjectItemTypeProvider en el proyecto ProjectItemTypeDefinition.
Para obtener más información sobre el contenido de los archivos .spdata, vea Referencia de esquema de los elementos de proyecto de SharePoint.
Guarde y cierre el archivo.
Para modificar el archivo Feature1.feature
En el proyecto SiteColumnProjectTemplate, reemplace el contenido del archivo Feature1.feature con el XML siguiente.
<?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>
El nuevo XML realiza los cambios siguientes en el archivo:
Cambia los valores de los atributos Id y featureId de elemento feature a $guid4$.
Cambia los valores de atributo itemId de elemento projectItemReference a $guid2$.
Para obtener más información sobre los archivos .feature, vea Crear plantillas de elemento y plantillas de proyecto para los elementos de proyecto de SharePoint.
Guarde y cierre el archivo.
Para modificar el archivo Package.package
En el proyecto SiteColumnProjectTemplate, reemplace el contenido del archivo Package.package con el XML siguiente.
<?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>
El nuevo XML realiza los cambios siguientes en el archivo:
Cambia los valores de los atributos Id y solutionId de elemento package a $guid3$.
Cambia los valores de atributo itemId de elemento featureReference a $guid4$.
Para obtener más información sobre los archivos .package, vea Crear plantillas de elemento y plantillas de proyecto para los elementos de proyecto de SharePoint.
Guarde y cierre el archivo.
Para modificar el archivo SiteColumnProjectTemplate.vstemplate
En el proyecto SiteColumnProjectTemplate, reemplace el contenido del archivo SiteColumnProjectTemplate.vstemplate con una de las siguientes secciones de XML.
- Si está creando una plantilla de proyecto de Visual c#, use el XML siguiente.
<?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 está creando una plantilla de proyecto de Visual Basic, use el XML siguiente.
<?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>
El nuevo XML realiza los cambios siguientes en el archivo:
Establece el elemento Name el valor Columna de sitio.(Este nombre aparece en el cuadro de diálogo Nuevo proyecto ).
Agrega los elementos ProjectItem para cada los filethat incluidos en cada instancia de proyecto.
Utiliza el espacio de nombres “https://schemas.microsoft.com/developer/vstemplate/2005”.Otros archivos de proyecto en esta solución utilizan el espacio de nombres “https://schemas.microsoft.com/developer/msbuild/2003”.Por consiguiente, los mensajes de advertencia de esquema XML se generarán, pero puede desatenderlos en este tutorial.
Para obtener más información sobre el contenido de los archivos .vstemplate, vea Referencia de esquema de plantillas de Visual Studio.
Guarde y cierre el archivo.
Para modificar el archivo ProjectTemplate.csproj o ProjectTemplate.vbproj
En el proyecto SiteColumnProjectTemplate, reemplace el contenido del archivo ProjectTemplate.csproj o de archivo ProjectTemplate.vbproj con una de las siguientes secciones de XML.
- Si está creando una plantilla de proyecto de Visual c#, use el XML siguiente.
<?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 está creando una plantilla de proyecto de Visual Basic, use el XML siguiente.
<?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>
El nuevo XML realiza los cambios siguientes en el archivo:
Utiliza el elemento TargetFrameworkVersion para especificar .NET Framework 3.5, no 4,5.
Agrega SignAssembly y los elementos AssemblyOriginatorKeyFile para firmar el resultado del proyecto.
Agrega los elementos Reference para las referencias de ensamblado que los proyectos de SharePoint utilizan.
Agrega los elementos para cada archivo predeterminado del proyecto, como Elements.xml y SharePointProjectItem.spdata.
Guarde y cierre el archivo.
Crear un paquete VSIX para implementar la plantilla de proyecto
Para implementar la extensión, use el proyecto VSIX en la solución SiteColumnProjectItem para crear un paquete VSIX.Primero, configure el paquete VSIX modificando el archivo source.extension.vsixmanifest incluido en el proyecto VSIX.A continuación, cree el paquete VSIX compilando la solución.
Para crear y configurar el paquete VSIX
En Explorador de soluciones, en el proyecto SiteColumnProjectItem , abra el archivo source.extension.vsixmanifest del editor de manifiestos.
El archivo source.extension.vsixmanifest es la base del archivo extension.vsixmanifest que todos los paquetes VSIX requieren.Para obtener más información sobre este archivo, vea Referencia de esquema de extensión VSIX.
En el cuadro Nombre de producto , entre en Columna de sitio.
En el cuadro Autor , entre en Contoso.
En el cuadro Descripción , entre en Un proyecto de SharePoint para crear columnas de sitio.
Elija la ficha Activos , y elija el botón Nuevo .
El cuadro de diálogo Agregar nuevo activo abra.
En la lista Tipo , elija Microsoft.VisualStudio.ProjectTemplate.
[!NOTA]
Este valor corresponde al elemento ProjectTemplate del archivo extension.vsixmanifest.Este elemento identifica la subcarpeta del paquete VSIX que contiene la plantilla de proyecto.Para obtener más información, vea ProjectTemplate Element (VSX Schema).
En la lista Origen , elija Un proyecto de la solución actual.
En la lista Proyecto , y elija SiteColumnProjectTemplate, y elija el botón Aceptar .
Elija el botón Nuevo de nuevo.
El cuadro de diálogo Agregar nuevo activo abra.
En la lista Tipo , elija Microsoft.VisualStudio.MefComponent.
[!NOTA]
Este valor corresponde al elemento MefComponent del archivo extension.vsixmanifest.Este elemento especifica el nombre de un ensamblado de extensión en el paquete VSIX.Para obtener más información, vea MEFComponent Element.
En la lista Origen , elija Un proyecto de la solución actual.
En la lista Proyecto , elija ProjectItemTypeDefinition, y elija el botón Aceptar .
En la barra de menú, elija Generar, Compilar solución, y asegúrese de que el proyecto se compila sin errores.
Probar la plantilla de proyecto
Ya puede probar la plantilla de proyecto.Primero, empiece a depurar la solución SiteColumnProjectItem en la instancia experimental de Visual Studio.A continuación, pruebe el proyecto de Columna de sitio en la instancia experimental de Visual Studio.Por último, compile y ejecute el proyecto de SharePoint para comprobar que la columna de sitio funciona del modo esperado.
Para empezar a depurar la solución
Reinicie Visual Studio con credenciales administrativas, y vuelva a abrir la solución SiteColumnProjectItem.
En el archivo de código SiteColumnProjectItemTypeProvider, agregue un punto de interrupción a la primera línea de código en el método InitializeType , y elija la clave F5 para iniciar la depuración.
Visual Studio instala la extensión para %UserProfile%\AppData\Local\Microsoft\VisualStudio\10.0Exp\Extensions\Contoso\Columna de sitio\1 .0 e inicia una instancia experimental de Visual Studio.Probará el elemento de proyecto en esta instancia de Visual Studio.
Para probar el proyecto en Visual Studio
En la instancia experimental de Visual Studio, en la barra de menú, elija Archivo, Nuevo, Proyecto.
Expanda el nodo Visual c# o Visual Basic (dependiendo del lenguaje que la plantilla de proyecto admite), expanda el nodo SharePoint y, a continuación el nodo 2010 .
En la lista de plantillas de proyecto, elija la plantilla Columna de sitio .
En el cuadro Nombre , entre en SiteColumnTest y elija el botón Aceptar .
En Explorador de soluciones, aparece un nuevo proyecto con un elemento de proyecto denominado Field1.
Compruebe que el código de la otra instancia de Visual Studio se detiene en el punto de interrupción que estableció anteriormente en el método InitializeType , y elija la clave F5 para continuar y depurar el proyecto.
En Explorador de soluciones, elija el nodo Field1 , y elija la clave F4 .
Se abre la ventana Propiedades.
En la lista de propiedades, compruebe que aparece la propiedad Propiedad de ejemplo .
Para probar la columna de sitio de SharePoint
En Explorador de soluciones, elija el nodo SiteColumnTest .
En la ventana Propiedades , en el cuadro de texto situado junto a la propiedad URL del sitio , entre en https://localhost.
Este paso especifica el sitio de SharePoint local en el equipo de desarrollo que desea usar para depurar.
[!NOTA]
La propiedad URL del sitio está vacía de forma predeterminada porque la plantilla de proyecto de columnas de sitio no proporciona un asistente para obtener este valor cuando se crea el proyecto.Para obtener información sobre cómo agregar un asistente que pida al desarrollador este valor y, a continuación, configure esta propiedad en el nuevo proyecto, vea Tutorial: Crear un elemento de proyecto de columna de sitio con una plantilla de proyecto, parte 2.
Elija la clave F5 .
La columna de sitio se empaqueta e implementa en el sitio de SharePoint que se especifica en la propiedad URL del sitio del proyecto.El explorador web se abre en la página predeterminada de este sitio.
[!NOTA]
Si aparece el cuadro de diálogo Depuración de scripts deshabilitada , elija el botón Sí para continuar depurando el proyecto.
En el menú Acciones del sitio , elija Configuración del sitio.
En la página Configuración del sitio , en la lista Galerías , elija el vínculo Columnas de sitio .
En la lista de columnas de sitio, compruebe que un grupo Columnas personalizadas contiene una columna denominada SiteColumnTest.
Cierre el explorador web.
Limpiar el equipo de desarrollo
Cuando termine de probar el proyecto, quite la plantilla de proyecto de la instancia experimental de Visual Studio.
para limpiar el equipo de desarrollo
En la instancia experimental de Visual Studio, en la barra de menú, elija Herramientas, Extensiones y actualizaciones.
El cuadro de diálogo Extensiones y actualizaciones abra.
En la lista de extensiones, elija la extensión Columna de sitio , y elija el botón Desinstalar .
En el cuadro de diálogo que aparece, elija el botón Sí para confirmar que desea desinstalar la extensión.
Elija el botón Cerrar para completar la desinstalación.
Cierre ambas instancias de Visual Studio (la instancia experimental y la instancia de Visual Studio en la que la solución SiteColumnProjectItem está abierto).
Pasos siguientes
Después de completar este tutorial, puede agregar un asistente a la plantilla de proyecto.Cuando un usuario crea un proyecto de columnas de sitio, el asistente pide al usuario la dirección URL del sitio que se va a usar para depurar, le pregunta si la nueva solución es de espacio aislado y configura el nuevo proyecto con esta información.El asistente también recopila información sobre la columna (como el tipo base y el grupo en el que se va a hacer una lista de la columna en la galería de columnas de sitio) y agrega esta información al archivo Elements.xml del nuevo proyecto.Para obtener más información, vea Tutorial: Crear un elemento de proyecto de columna de sitio con una plantilla de proyecto, parte 2.
Vea también
Tareas
Tutorial: Crear un elemento de proyecto de columna de sitio con una plantilla de proyecto, parte 2
Conceptos
Definir tipos de elementos de proyecto personalizados de SharePoint
Crear plantillas de elemento y plantillas de proyecto para los elementos de proyecto de SharePoint
Guardar datos asociados en extensiones del sistema de proyectos de SharePoint
Asociar datos personalizados con extensiones de herramientas de SharePoint