Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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:
Ediciones compatibles de Microsoft Windows, SharePoint y Visual Studio. Para obtener más información, vea Requisitos para desarrollar soluciones de SharePoint.
Visual Studio 2010 SDK. En este tutorial se utiliza la plantilla Proyecto VSIX del SDK para crear un paquete VSIX e implementar el elemento. Para obtener más información, vea Extender la Herramientas de SharePoint en Visual Studio.
El conocimiento de los siguientes conceptos es útil, aunque no necesario, para completar el tutorial.
Columnas de sitio de SharePoint. Para obtener más información, vea Columnas.
Plantillas de proyecto de Visual Studio. Para obtener más información, vea Introducción a las plantillas de Visual Studio.
Crear los proyectos
Para completar este tutorial, debe crear tres proyectos:
Un proyecto VSIX. Este proyecto crea el paquete VSIX para implementar el elemento de proyecto de columnas de sitio y la plantilla de proyecto.
Un proyecto de plantilla de proyecto. Este proyecto crea una plantilla de proyecto que se puede usar para crear un nuevo proyecto de SharePoint que contiene el elemento de proyecto de columnas de sitio.
Un proyecto de biblioteca de clases. Este proyecto implementa una extensión de Visual Studio que define el comportamiento del elemento de proyecto de columnas de sitio.
Comience el tutorial creando ambos proyectos.
Para crear el proyecto VSIX
Inicie Visual Studio.
En el menú Archivo, elija Nuevo y haga clic en Proyecto.
Asegúrese de que .NET Framework 4 esté seleccionado en el cuadro combinado de la parte superior del cuadro de diálogo Nuevo proyecto.
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.
Haga clic en la plantilla Proyecto VSIX.
En el cuadro Nombre, escriba SiteColumnProjectItem.
Haga clic en Aceptar.
Visual Studio agrega el proyecto SiteColumnProjectItem al Explorador de soluciones.
Para crear el proyecto de plantilla de proyecto
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).
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.
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.
En la lista de plantillas de proyecto, seleccione Plantilla de proyecto de C# o Plantilla de proyecto de Visual Basic.
En el cuadro Nombre, escriba SiteColumnProjectTemplate.
Haga clic en Aceptar.
Visual Studio agrega el proyecto SiteColumnProjectTemplate a la solución.
Elimine el archivo de código Class1 del proyecto.
Si creó un proyecto de Visual Basic, elimine también los siguientes archivos del proyecto:
MyApplication.Designer.vb
MyApplication.myapp
Resources.Designer.vb
Resources.resx
Settings.Designer.vb
Settings.settings
Para crear la extensión de proyecto
En 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.
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.
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.
Seleccione la plantilla de proyecto Biblioteca de clases.
En el cuadro Nombre, escriba ProjectItemTypeDefinition.
Haga clic en Aceptar.
Visual Studio agrega el proyecto ProjectItemTypeDefinition a la solución y abre el archivo de código predeterminado Class1.
Elimine el archivo de código Class1 del proyecto.
Configurar el proyecto de extensión
Agregue los archivos de código y las referencias de ensamblado para configurar el proyecto de extensión.
Para configurar el proyecto
En el proyecto ProjectItemTypeDefinition, agregue un nuevo archivo de código denominado SiteColumnProjectItemTypeProvider.
Haga clic en la opción Agregar referencia del menú Proyecto.
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
En el proyecto ProjectItemTypeDefinition, abra el archivo de código SiteColumnProjectItemTypeProvider.
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 Namespaceusing 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
Inicie una segunda instancia de Visual Studio con privilegios de administrador.
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.
Agregue al proyecto un elemento vacío. Asigne al elemento el nombre Field1.
Guarde el proyecto y, a continuación, cierre la segunda instancia de Visual Studio.
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.
En el menú Agregar, haga clic en Elemento existente.
En el cuadro de diálogo Agregar elemento existente, haga clic en la lista desplegable de extensiones de archivo y seleccione Todos los archivos (*.*).
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.
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
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 Sí.
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.
Busque el elemento VSTemplate siguiente en el archivo del proyecto.
<VSTemplate Include="SiteColumnProjectTemplate.vstemplate">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.
Guarde y cierre el archivo.
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
En el proyecto SiteColumnProjectTemplate, haga doble clic en el archivo AssemblyInfo.cs o AssemblyInfo.vb en el Explorador de soluciones.
Agregue la instrucción siguiente al comienzo de este archivo:
Imports System.Securityusing System.Security;Cuando la propiedad Solución en espacio aislado de un proyecto de SharePoint se establece en True, Visual Studio agrega System.Security.AllowPartiallyTrustedCallersAttribute al archivo de código AssemblyInfo. Sin embargo, el archivo de código AssemblyInfo de la plantilla de proyecto no importa el espacio de nombres System.Security de forma predeterminada. Debe agregar esta instrucción using o Imports para evitar los errores de compilación.
Guarde y cierre el archivo.
Para modificar el archivo Elements.xml
En el proyecto SiteColumnProjectTemplate, haga doble clic en el archivo Elements.xml en el Explorador de soluciones.
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.
Guarde y cierre el archivo.
Para editar el archivo SharePointProjectItem.spdata
En el proyecto SiteColumnProjectTemplate, haga doble clic en el archivo SharePointProjectItem.spdata en el Explorador de soluciones.
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.
Guarde y cierre el archivo.
Para modificar el archivo Feature1.feature
En el proyecto SiteColumnProjectTemplate, haga doble clic en el archivo Feature1.feature en el Explorador de soluciones.
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.
Guarde y cierre el archivo.
Para modificar el archivo Package.package
En el proyecto SiteColumnProjectTemplate, haga doble clic en el archivo Package.Package en el Explorador de soluciones.
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.
Guarde y cierre el archivo.
Para modificar el archivo SiteColumnProjectTemplate.vstemplate
En el proyecto SiteColumnProjectTemplate, haga doble clic en el archivo SiteColumnProjectTemplate.vstemplate en el Explorador de soluciones.
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.
Guarde y cierre el archivo.
Para modificar el archivo ProjectTemplate.csproj o ProjectTemplate.vbproj
En el proyecto SiteColumnProjectTemplate, haga doble clic en el archivo ProjectTemplate.csproj o ProjectTemplate.vbproj en el Explorador de soluciones.
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.
Guarde y cierre el archivo.
Crear un paquete VSIX para implementar la plantilla de proyecto
Para implementar la extensión, use el proyecto VSIX en la solución SiteColumnProjectItem para crear un paquete VSIX. Primero, configure el paquete VSIX modificando el archivo source.extension.vsixmanifest incluido en el proyecto VSIX. A continuación, cree el paquete VSIX compilando la solución.
Para crear y configurar el paquete VSIX
En 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.
En el cuadro Nombre del producto, escriba Columna de sitio.
En el cuadro Autor, escriba Contoso.
En el cuadro Descripción, escriba Proyecto de SharePoint para crear columnas de sitio.
En la sección Contenido del editor, haga clic en el botón Agregar contenido.
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).
En Seleccione un origen, haga clic en el botón de radio Proyecto y elija SiteColumnProjectTemplate en el cuadro de lista adyacente.
Haga clic en Aceptar.
Haga clic de nuevo en el botón Agregar contenido.
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).
En Seleccione un origen, seleccione elija el botón de radio Proyecto y elija ProjectItemTypeDefinition en el cuadro de lista adyacente.
Haga clic en Aceptar.
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
Reinicie Visual Studio con privilegios de administrador y abra la solución SiteColumnProjectItem.
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.
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
En la instancia experimental de Visual Studio, en el menú Archivo, seleccione Nuevo y haga clic en Proyecto.
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.
En la lista de plantillas de proyecto, seleccione Columna de sitio.
En el cuadro Nombre, escriba SiteColumnTest.
Haga clic en Aceptar. Aparecerá un nuevo proyecto en el Explorador de soluciones con un elemento de proyecto denominado Field1.
Compruebe que el código de la otra instancia de Visual Studio se detiene en el punto de interrupción que estableció anteriormente en el método InitializeType. Presione F5 para continuar y depurar el proyecto.
En el Explorador de soluciones, haga clic en el nodo Field1 y presione F4. Se abre la ventana Propiedades.
Compruebe que aparece la propiedad Example Property en la lista de propiedades.
Para probar la columna de sitio de SharePoint
En el Explorador de soluciones, haga clic en el nodo SiteColumnTest.
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.
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 Sí para continuar depurando el proyecto.
En el menú Acciones del sitio, haga clic en Configuración del sitio.
En Galerías, haga clic en Columnas de sitio.
En la lista de columnas de sitio, compruebe que haya un grupo Columnas personalizadas que contiene una columna denominada SiteColumnTest.
Cierre el explorador web.
Limpiar el equipo de desarrollo
Cuando termine de probar el proyecto, quite la plantilla de proyecto de la instancia experimental de Visual Studio.
para limpiar el equipo de desarrollo
En la instancia experimental de Visual Studio, en el menú Herramientas, haga clic en Administrador de extensiones.
Se abre el cuadro de diálogo Administrador de extensiones.
En la lista de extensiones, haga clic en Columna de sitio y, a continuación, en Desinstalar.
En el cuadro de diálogo que aparece, haga clic en Sí para confirmar la desinstalación.
Haga clic en Reiniciar ahora para completar la desinstalación.
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