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 2010 si crea sus propios tipos de elemento de proyecto de SharePoint y, a continuación, los asocia a 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:

El conocimiento de los siguientes conceptos es útil, aunque no necesario, para completar el tutorial.

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

  1. Inicie Visual Studio.

  2. En el menú Archivo, elija Nuevo y haga clic en Proyecto.

  3. Asegúrese de que .NET Framework 4 esté seleccionado en el cuadro combinado de la parte superior del cuadro de diálogo Nuevo proyecto.

  4. En el cuadro de diálogo Nuevo proyecto, expanda el nodo Visual Basic o Visual C# y, a continuación, haga clic en el nodo Extensibilidad.

    Nota

    El nodo Extensibilidad solo está disponible si instala Visual Studio 2010 SDK. Para obtener más información, vea la sección Requisitos previos, anteriormente en este tema.

  5. Haga clic en la plantilla Proyecto VSIX.

  6. En el cuadro Nombre, escriba SiteColumnProjectItem.

  7. Haga clic en Aceptar.

    Visual Studio agrega el proyecto SiteColumnProjectItem al Explorador de soluciones.

Para crear el proyecto de plantilla de proyecto

  1. En el Explorador de soluciones, haga clic en el nodo de la solución con el botón secundario, seleccione Agregar y haga clic en 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, Proyectos y soluciones, Opciones (Cuadro de diálogo).

  2. Asegúrese de que .NET Framework 4 esté seleccionado en el cuadro combinado de la parte superior del cuadro de diálogo Agregar nuevo proyecto.

  3. En el cuadro de diálogo Agregar nuevo proyecto, expanda el nodo Visual C# o Visual Basic y, a continuación, haga clic en el nodo Extensibilidad.

  4. En la lista de plantillas de proyecto, seleccione Plantilla de proyecto de C# o Plantilla de proyecto de Visual Basic.

  5. En el cuadro Nombre, escriba SiteColumnProjectTemplate.

  6. Haga clic en Aceptar.

    Visual Studio agrega el proyecto SiteColumnProjectTemplate a la solución.

  7. Elimine el archivo de código Class1 del proyecto.

  8. 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

  1. En el Explorador de soluciones, haga clic en el nodo de la solución con el botón secundario, seleccione Agregar y haga clic en Nuevo proyecto.

  2. Asegúrese de que .NET Framework 4 esté seleccionado en el cuadro combinado de la parte superior del cuadro de diálogo Agregar nuevo proyecto.

  3. En el cuadro de diálogo Agregar nuevo proyecto, expanda el nodo Visual C# o Visual Basic y, a continuación, haga clic en Windows.

  4. Seleccione la plantilla de proyecto Biblioteca de clases.

  5. En el cuadro Nombre, escriba ProjectItemTypeDefinition.

  6. Haga clic en Aceptar.

    Visual Studio agrega el proyecto ProjectItemTypeDefinition a la solución y abre el archivo de código predeterminado Class1.

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

  1. En el proyecto ProjectItemTypeDefinition, agregue un nuevo archivo de código denominado SiteColumnProjectItemTypeProvider.

  2. Haga clic en la opción Agregar referencia del menú Proyecto.

  3. En la pestaña .NET, presione CTRL y haga clic en los ensamblados siguientes; a continuación, haga clic en Aceptar:

    • Microsoft.VisualStudio.SharePoint

    • System.ComponentModel.Composition

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

  1. En el proyecto ProjectItemTypeDefinition, abra el archivo de código SiteColumnProjectItemTypeProvider.

  2. Reemplace el código de este archivo por el código siguiente y, a continuación, 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

Para permitir que otros desarrolladores creen un nuevo proyecto de SharePoint que contenga un elemento de proyecto de columnas de sitio, cree una plantilla de proyecto. Una plantilla de proyecto de SharePoint incluye los archivos necesarios para todos los proyectos de Visual Studio, como los 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, cree un proyecto de SharePoint vacío para generar archivos específicos de los proyectos de SharePoint y, a continuación, agregue esos archivos al proyecto SiteColumnProjectTemplate para que se incluyan en la plantilla que se genera a partir del proyecto. Configure también el archivo del proyecto SiteColumnProjectTemplate para especificar dónde aparecerá la plantilla de proyecto en el cuadro de diálogo Agregar nuevo proyecto.

Para crear los archivos de la plantilla de proyecto

  1. Inicie una segunda instancia de Visual Studio con privilegios de administrador.

  2. Cree un nuevo proyecto de SharePoint vacío denominado BaseSharePointProject. No seleccione la opción Implementar como solución de granja de servidores en el Asistente para la personalización de SharePoint.

  3. Agregue al proyecto un elemento vacío. Asigne al elemento el nombre Field1.

  4. Guarde el proyecto y, a continuación, cierre la segunda instancia de Visual Studio.

  5. En la instancia de Visual Studio que tiene abierta la solución SiteColumnProjectItem, haga clic con el botón secundario en el nodo del proyecto SiteColumnProjectTemplate en el Explorador de soluciones.

  6. En el menú Agregar, haga clic en Elemento existente.

  7. En el cuadro de diálogo Agregar elemento existente, haga clic en la lista desplegable de extensiones de archivo y seleccione Todos los archivos (*.*).

  8. Navegue hasta el directorio que contiene el proyecto BaseSharePointProject. En esta carpeta, seleccione key.snk y, a continuación, haga clic en 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 nuevo archivo key.snk para cada instancia del proyecto, vea Tutorial: Crear un elemento de proyecto de columna de sitio con una plantilla de proyecto, parte 2.

  9. 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 Field1, Features ni Package 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 el modo en que los desarrolladores detectan la plantilla de proyecto en el cuadro de diálogo Agregar nuevo proyecto

  1. En el Explorador de soluciones, haga clic con el botón secundario en el nodo de proyecto SiteColumnProjectTemplate y, a continuación, haga clic en Descargar el proyecto. Si se le pide que guarde los cambios a los archivos, haga clic en .

  2. Haga clic con el botón secundario en el nodo SiteColumnProjectTemplate de nuevo y haga clic en Editar SiteColumnProjectTemplate.csproj o en Editar SiteColumnProjectTemplate.vbproj.

  3. Busque el elemento VSTemplate siguiente en el archivo del proyecto.

    <VSTemplate Include="SiteColumnProjectTemplate.vstemplate">
    
  4. Reemplace este elemento VSTemplate por el código 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 los clientes hagan clic en el nodo 2010 bajo el nodo SharePoint en el cuadro de diálogo Agregar nuevo proyecto.

  5. Guarde y cierre el archivo.

  6. En el Explorador de soluciones, haga clic con el botón secundario en el proyecto SiteColumnProjectTemplate y, a continuación, haga clic en Volver a cargar el proyecto.

Modificar los archivos de plantilla de proyecto

Modifique los archivos siguientes en el proyecto SiteColumnProjectTemplate 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 carácter del signo de dólar ($). Cuando un usuario emplea esta plantilla de proyecto para crear un nuevo 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

  1. En el proyecto SiteColumnProjectTemplate, haga doble clic en el archivo AssemblyInfo.cs o AssemblyInfo.vb en el Explorador de soluciones.

  2. Agregue la instrucción siguiente al comienzo de este archivo:

    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.

  3. Guarde y cierre el archivo.

Para modificar el archivo Elements.xml

  1. En el proyecto SiteColumnProjectTemplate, haga doble clic en el archivo Elements.xml en el Explorador de soluciones.

  2. Reemplace el contenido del archivo por el siguiente 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>
    

    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.

  3. Guarde y cierre el archivo.

Para editar el archivo SharePointProjectItem.spdata

  1. En el proyecto SiteColumnProjectTemplate, haga doble clic en el archivo SharePointProjectItem.spdata en el Explorador de soluciones.

  2. Reemplace el contenido del archivo por el siguiente XML.

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

    El nuevo XML realiza los cambios siguientes en el archivo:

    • Cambia el atributo Type del 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 del 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.

  3. Guarde y cierre el archivo.

Para modificar el archivo Feature1.feature

  1. En el proyecto SiteColumnProjectTemplate, haga doble clic en el archivo Feature1.feature en el Explorador de soluciones.

  2. Reemplace el contenido del archivo por el siguiente XML.

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

    El nuevo XML realiza los cambios siguientes en el archivo:

    • Cambia los valores de los atributos Id y featureId del elemento feature a $guid4$.

    • Cambia los valores del atributo itemId del 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.

  3. Guarde y cierre el archivo.

Para modificar el archivo Package.package

  1. En el proyecto SiteColumnProjectTemplate, haga doble clic en el archivo Package.Package en el Explorador de soluciones.

  2. Reemplace el contenido del archivo por el siguiente XML.

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

    El nuevo XML realiza los cambios siguientes en el archivo:

    • Cambia los valores de los atributos Id y solutionId del elemento package a $guid3$.

    • Cambia los valores del atributo itemId del 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.

  3. Guarde y cierre el archivo.

Para modificar el archivo SiteColumnProjectTemplate.vstemplate

  1. En el proyecto SiteColumnProjectTemplate, haga doble clic en el archivo SiteColumnProjectTemplate.vstemplate en el Explorador de soluciones.

  2. Reemplace el contenido del archivo por 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 en el valor Columna de sitio (este es el nombre que aparece en el cuadro de diálogo Agregar nuevo proyecto).

    • Agrega elementos ProjectItem para cada uno de los archivos que se incluyen en cada instancia de proyecto.

    Para obtener más información sobre el contenido de los archivos .vstemplate, vea Referencia de esquema de plantillas de Visual Studio.

  3. Guarde y cierre el archivo.

Para modificar el archivo ProjectTemplate.csproj o ProjectTemplate.vbproj

  1. En el proyecto SiteColumnProjectTemplate, haga doble clic en el archivo ProjectTemplate.csproj o ProjectTemplate.vbproj en el Explorador de soluciones.

  2. Reemplace el contenido del archivo por 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:

    • Cambia el elemento TargetFrameworkVersion para especificar .NET Framework 3.5.

    • Agrega los elementos SignAssembly y AssemblyOriginatorKeyFile para firmar el resultado del proyecto.

    • Agrega nuevos elementos Reference para las referencias de ensamblado usadas por los proyectos de SharePoint.

    • Agrega nuevos elementos para cada uno de los archivos predeterminados del proyecto, como Elements.xml y SharePointProjectItem.spdata.

  3. 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

  1. En el Explorador de soluciones, haga doble clic en el archivo source.extension.vsixmanifest en el proyecto SiteColumnProjectItem.

    Visual Studio abre el archivo en el editor de manifiestos. El archivo source.extension.vsixmanifest es la base del archivo extension.vsixmanifest que es requerido por todos los paquetes VSIX. Para obtener más información sobre este archivo, vea VSIX Extension Schema Reference.

  2. En el cuadro Nombre del producto, escriba Columna de sitio.

  3. En el cuadro Autor, escriba Contoso.

  4. En el cuadro Descripción, escriba Proyecto de SharePoint para crear columnas de sitio.

  5. En la sección Contenido del editor, haga clic en el botón Agregar contenido.

  6. En el cuadro de diálogo Agregar contenido, haga clic en el cuadro desplegable Seleccione un tipo de contenido y elija Plantilla de proyecto.

    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).

  7. En Seleccione un origen, haga clic en el botón de radio Proyecto y elija SiteColumnProjectTemplate en el cuadro de lista adyacente.

  8. Haga clic en Aceptar.

  9. Haga clic de nuevo en el botón Agregar contenido.

  10. En el cuadro de diálogo Agregar contenido, en el cuadro de lista Seleccione un tipo de contenido, elija MEF Component.

    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 (VSX Schema).

  11. En Seleccione un origen, seleccione elija el botón de radio Proyecto y elija ProjectItemTypeDefinition en el cuadro de lista adyacente.

  12. Haga clic en Aceptar.

  13. En el menú Generar, haga clic en Generar solución. 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

  1. Reinicie Visual Studio con privilegios de administrador y abra la solución SiteColumnProjectItem.

  2. Abra el archivo de código SiteColumnProjectItemTypeProvider y agregue un punto de interrupción a la primera línea de código en el método InitializeType.

  3. Presione 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

  1. En la instancia experimental de Visual Studio, en el menú Archivo, seleccione Nuevo y haga clic en Proyecto.

  2. Expanda Visual C# o Visual Basic (en función del lenguaje que admita la plantilla de proyecto), expanda SharePoint y, a continuación, haga clic en 2010.

  3. En la lista de plantillas de proyecto, seleccione Columna de sitio.

  4. En el cuadro Nombre, escriba SiteColumnTest.

  5. Haga clic en Aceptar. Aparecerá un nuevo proyecto en el Explorador de soluciones con un elemento de proyecto denominado Field1.

  6. 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. Presione F5 para continuar y depurar el proyecto.

  7. En el Explorador de soluciones, haga clic en el nodo Field1 y presione F4. Se abre la ventana Propiedades.

  8. Compruebe que aparece la propiedad Example Property en la lista de propiedades.

Para probar la columna de sitio de SharePoint

  1. En el Explorador de soluciones, haga clic en el nodo SiteColumnTest.

  2. En la ventana Propiedades, haga clic en el cuadro de texto situado al lado de la propiedad Site URL y escriba https://localhost. Esto especifica el sitio de SharePoint local en el equipo de desarrollo que desea usar para la depuración.

    Nota

    La propiedad Site URL está vacía de forma predeterminada porque la plantilla de proyecto de columnas de sitio no proporciona un asistente para recopilar este valor al crear 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.

  3. Presione F5. La columna de sitio se empaqueta e implementa en el sitio de SharePoint especificado por la propiedad Site URL del proyecto. El explorador web se abre a la página predeterminado de este sitio.

    Nota

    Si se muestra el cuadro de diálogo Depuración de scripts deshabilitada, haga clic en para continuar depurando el proyecto.

  4. En el menú Acciones del sitio, haga clic en Configuración del sitio.

  5. En Galerías, haga clic en Columnas de sitio.

  6. En la lista de columnas de sitio, compruebe que haya un grupo Columnas personalizadas que contiene una columna denominada SiteColumnTest.

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

  1. En la instancia experimental de Visual Studio, en el menú Herramientas, haga clic en Administrador de extensiones.

    Se abre el cuadro de diálogo Administrador de extensiones.

  2. En la lista de extensiones, haga clic en Columna de sitio y, a continuación, en Desinstalar.

  3. En el cuadro de diálogo que aparece, haga clic en para confirmar la desinstalación.

  4. Haga clic en Reiniciar ahora para completar la desinstalación.

  5. Cierre ambas instancias de Visual Studio (la instancia experimental y la instancia de Visual Studio que tiene abierta la solución SiteColumnProjectItem).

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

Otros recursos

Tutorial: Crear un elemento de proyecto de columna de sitio con una plantilla de proyecto, parte 2

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