Compartir a través de


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:

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 la barra de menú, elija Archivo, Nuevo, Proyecto.

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

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

  5. En la lista de plantillas de proyecto, elija Proyecto VSIX.

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

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

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

  3. Expanda el nodo Visual c# o Visual Basic y, a continuación el nodo Extensibilidad .

  4. En la lista de plantillas de proyecto, elija la plantilla Plantilla de proyecto de C o Plantilla de proyecto de Visual Basic .

  5. En el cuadro Nombre , entre en SiteColumnProjectTemplate, y elija el botón Aceptar .

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

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

  7. 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 Explorador de soluciones, abra el menú contextual para el nodo de la solución, elija Agregary, a continuación Nuevo proyecto.

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

  3. Expanda los nodos Visual c# o Visual Basic , elija el nodo Windows , y después elija la plantilla Biblioteca de clases .

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

  5. 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 archivo de código denominado SiteColumnProjectItemTypeProvider.

  2. En la barra de menú, elija Proyecto, Agregar referencia.

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

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

  1. Inicie una segunda instancia Visual Studio con credenciales administrativas.

  2. Cree un proyecto de SharePoint 2010 que se denomina En.

    Nota importanteImportante

    En Asistente para la personalización de SharePoint, no seleccione el botón de opción Implementar como solución de granja de servidores .

  3. Agregue al proyecto un elemento vacío, y llame al elemento Field1.

  4. Guarde el proyecto, y luego cierre la segunda instancia Visual Studio.

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

  6. En el cuadro de diálogo Agregar elemento existente , abra la lista de extensiones de archivo y, a continuación Todos los archivos (*.*).

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

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

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

  2. Abrir el menú contextual para el nodo SiteColumnProjectTemplate de nuevo y, a continuación Edición SiteColumnProjectTemplate.csproj o Edición SiteColumnProjectTemplate.vbproj.

  3. En el archivo de proyecto, busque el elemento siguiente VSTemplate .

    <VSTemplate Include="SiteColumnProjectTemplate.vstemplate">
    
  4. 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 .

  5. Guarde y cierre el archivo.

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

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

  2. Guarde y cierre el archivo.

Para modificar el archivo Elements.xml

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

  2. Guarde y cierre el archivo.

Para editar el archivo SharePointProjectItem.spdata

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

  2. Guarde y cierre el archivo.

Para modificar el archivo Feature1.feature

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

  2. Guarde y cierre el archivo.

Para modificar el archivo Package.package

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

  2. Guarde y cierre el archivo.

Para modificar el archivo SiteColumnProjectTemplate.vstemplate

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

  2. Guarde y cierre el archivo.

Para modificar el archivo ProjectTemplate.csproj o ProjectTemplate.vbproj

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

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

  2. En el cuadro Nombre de producto , entre en Columna de sitio.

  3. En el cuadro Autor , entre en Contoso.

  4. En el cuadro Descripción , entre en Un proyecto de SharePoint para crear columnas de sitio.

  5. Elija la ficha Activos , y elija el botón Nuevo .

    El cuadro de diálogo Agregar nuevo activo abra.

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

  7. En la lista Origen , elija Un proyecto de la solución actual.

  8. En la lista Proyecto , y elija SiteColumnProjectTemplate, y elija el botón Aceptar .

  9. Elija el botón Nuevo de nuevo.

    El cuadro de diálogo Agregar nuevo activo abra.

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

  11. En la lista Origen , elija Un proyecto de la solución actual.

  12. En la lista Proyecto , elija ProjectItemTypeDefinition, y elija el botón Aceptar .

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

  1. Reinicie Visual Studio con credenciales administrativas, y vuelva a abrir la solución SiteColumnProjectItem.

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

  1. En la instancia experimental de Visual Studio, en la barra de menú, elija Archivo, Nuevo, Proyecto.

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

  3. En la lista de plantillas de proyecto, elija la plantilla Columna de sitio .

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

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

  6. En Explorador de soluciones, elija el nodo Field1 , y elija la clave F4 .

    Se abre la ventana Propiedades.

  7. En la lista de propiedades, compruebe que aparece la propiedad Propiedad de ejemplo .

Para probar la columna de sitio de SharePoint

  1. En Explorador de soluciones, elija el nodo SiteColumnTest .

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

  3. 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 para continuar depurando el proyecto.

  4. En el menú Acciones del sitio , elija Configuración del sitio.

  5. En la página Configuración del sitio , en la lista Galerías , elija el vínculo Columnas de sitio .

  6. En la lista de columnas de sitio, compruebe que un grupo Columnas personalizadas 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 la barra de menú, elija Herramientas, Extensiones y actualizaciones.

    El cuadro de diálogo Extensiones y actualizaciones abra.

  2. En la lista de extensiones, elija la extensión Columna de sitio , y elija el botón Desinstalar .

  3. En el cuadro de diálogo que aparece, elija el botón para confirmar que desea desinstalar la extensión.

  4. Elija el botón Cerrar para completar la desinstalación.

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