Поделиться через


Пошаговое руководство. Создание элемента проекта столбца сайта с помощью шаблона элемента, часть 1

Проекты SharePoint представляют собой контейнеры для одного или нескольких элементов проекта SharePoint.Можно расширить систему проектов SharePoint в Visual Studio путем создания собственных типов элементов проектов SharePoint, а затем связать их с шаблоном проекта.В данном пошаговом руководстве показано, как определить тип элемента проекта для создания столбца сайта, а затем создать шаблон проекта, позволяющий создать новый проект, содержащий элемент "столбец сайта".

В этом пошаговом руководстве показано выполнение следующих задач.

  • Создание расширения Visual Studio, в котором определяется новый тип элемента проекта SharePoint для столбца сайта.Тип элемента проекта содержит простое пользовательское свойство, отображаемое в окне Свойства.

  • Создание шаблона элемента проекта Visual Studio для данного элемента проекта.

  • Построение пакета расширения Visual Studio (VSIX) для развертывания шаблона проекта и сборки расширения.

  • Отладка и тестирование элемента проекта.

Это пошаговое руководство является отдельным.По завершении данного пошагового руководства вы сможете усовершенствовать элемент проекта, добавив мастер в шаблон проекта.Дополнительные сведения см. в разделе Пошаговое руководство. Создание элемента проекта столбца сайта с помощью шаблона элемента, часть 2.

ПримечаниеПримечание

Пример, содержащий готовые проекты, код и другие файлы для данного пошагового руководства, можно загрузить на следующей странице: https://go.microsoft.com/fwlink/?LinkId=191369.

Обязательные компоненты

Для выполнения данного пошагового руководства на компьютере разработчика должны быть установлены следующие компоненты:

Возможно, знание следующего подхода пригодится, однако оно не требуется для выполнения пошагового руководства.

Создание проектов

Чтобы выполнить это пошаговое руководство, необходимо создать три проекта:

  • Проект VSIX.Этот проект содержит пакет VSIX для развертывания элемента проекта "столбец сайта" и шаблона проекта.

  • Проект шаблона проекта.Этот проект создает шаблон проекта, с помощью которого можно создать новый проект SharePoint, содержащий элемент "столбец сайта".

  • Проект библиотеки классов.Этот проект реализует расширение Visual Studio, определяющее поведение элемента проекта "столбец сайта".

Начните выполнение пошагового руководства с создания проектов.

Создание проекта VSIX

  1. Запустите Visual Studio.

  2. В строке меню выберите Файл, Создать, Проект.

  3. В верхней части диалогового окна Создать проект, убедитесь, что платформа .NET Framework 4,5 выбратьо в списке версий платформы .NET Framework.

  4. Разверните узлы Visual Basic или Visual C#, а затем выберите узел Расширение среды.

    ПримечаниеПримечание

    Узел Расширение среды доступен, только если установлен пакет SDK для Visual Studio 2012.Дополнительные сведения см. в параграфе предварительных требований ранее в этом разделе.

  5. В списке шаблонов проектов выберите Проект VSIX.

  6. В окне Имя, вставки SiteColumnProjectItem, а затем кнопку ОК.

    Visual Studio добавляет проект SiteColumnProjectItem в Обозреватель решений.

Создание проекта шаблона проекта

  1. В Обозреватель решений открыть контекстное меню для узла решения выберите Добавить, а затем выберите Создать проект.

    ПримечаниеПримечание

    В проектах Visual Basic узел решения отображается в обозревателе решений, только если в диалоговом окне General, Projects and Solutions, Options Dialog Box установлен флажок Всегда показывать решение.

  2. В верхней части диалогового окна Создать проект, убедитесь, что платформа .NET Framework 4,5 выбратьо в списке версий платформы .NET Framework.

  3. Разверните узел Visual C# или Visual Basic, а затем выберите узел Расширение среды.

  4. В списке шаблонов проектов выберите шаблон шаблон проекта C# или Шаблон проекта Visual Basic.

  5. В окне Имя, вставки SiteColumnProjectTemplate, а затем кнопку ОК.

    Visual Studio добавит проект SiteColumnProjectTemplate в решение.

  6. Удалите из проекта файл c кодом Class1.

  7. Если создан проект Visual Basic, необходимо также удалить из проекта следующие файлы:

    • MyApplication.Designer.vb

    • MyApplication.myapp

    • Resources.Designer.vb

    • Resources.resx

    • Settings.Designer.vb

    • Settings.settings

Создание проекта расширения

  1. В Обозреватель решений открыть контекстное меню для узла решения выберите Добавить, а затем выберите Создать проект.

  2. В верхней части диалогового окна Создать проект, убедитесь, что платформа .NET Framework 4,5 выбратьо в списке версий платформы .NET Framework.

  3. Разверните узлы Visual C# или Visual Basic выберите узел Окна, а затем выберите шаблон Библиотека классов.

  4. В окне вставить ProjectItemTypeDefinitionИмя, а затем кнопку ОК.

    Visual Studio добавит проект ProjectItemTypeDefinition в решение и откроет файл кода по умолчанию Class1.

  5. Удалите из проекта файл c кодом Class1.

Настройка проекта расширения

Добавьте ссылки на файлы с кодом и сборки для настройки проекта расширения.

Настройка проекта

  1. В проекте ProjectItemTypeDefinition добавьте файл кода с именем SiteColumnProjectItemTypeProvider.

  2. В строке меню выберите Проект, Добавить ссылку.

  3. В диалоговом окне Диспетчер ссылок - ProjectItemTypeDefinition разверните узел Сборки выберите узел Платформа, а затем установите флажок System.ComponentModel.Composition.

  4. Выберите узел Расширения установите флажок рядом с сборку Microsoft.VisualStudio.SharePoint, а затем нажмите кнопку ОК.

Определение нового типа элемента проекта SharePoint

Создайте класс, реализующий интерфейс ISharePointProjectItemTypeProvider, чтобы определить поведение нового типа элемента проекта.Этот интерфейс следует реализовывать всякий раз, когда требуется определить новый тип элемента проекта.

Определение нового типа элемента проекта SharePoint

  • В файле кода SiteColumnProjectItemTypeProvider по умолчанию, замените код следующим кодом, а затем сохраните файл.

    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);
                    }
                }
            }
        }
    }
    

Создание шаблона проекта Visual Studio

Создание шаблона проекта можно разрешить другим разработчикам для создания проектов SharePoint, которые содержат элементы проекта столбца сайта.Шаблон проекта SharePoint содержит файлы, требуемые для всех проектов в Visual Studio, например файлы с расширением csproj или vbproj и vstemplate, и файлы, которые относятся к проектам SharePoint.Дополнительные сведения см. в разделе Создание шаблонов элементов и проектов для элементов проектов SharePoint.

В этой процедуре создается пустой проект SharePoint создавать файлы, относящихся к проектам SharePoint.Затем нужно добавить эти файлы в проект SiteColumnProjectTemplate таким образом, что они будут включены в шаблон, который создается из этого проекта.Можно также настроить файл проекта SiteColumnProjectTemplate, чтобы определить, куда шаблон проекта отображается в диалоговом окне Создать проект.

Создание файлов для шаблона проекта

  1. Запустите второй экземпляр Visual Studio с учетными данными администратора.

  2. Создайте проект SharePoint 2010, который называется BaseSharePointProject.

    Важное примечаниеВажно

    В Мастер настройки SharePoint, выберите переключатель Развернуть как решение фермы.

  3. Добавьте пустой элемент в проект и назовите элемент Field1.

  4. Сохраните проект, а затем закройте второй экземпляр Visual Studio.

  5. В экземпляре Visual Studio, имеющий открытого решения SiteColumnProjectItem, в Обозреватель решений, открыть контекстное меню для узла проекта SiteColumnProjectTemplate выберите Добавить, а затем выберите Существующий элемент.

  6. В диалоговом окне Добавление существующего элемента, откройте список расширений файла, а затем выберите все файлы (*.*).

  7. В каталоге, который содержит проект BaseSharePointProject выберите файл key.snk, а затем нажмите кнопку Добавить.

    ПримечаниеПримечание

    В этом пошаговом руководстве шаблон проекта, который будет создан использовать один и тот же файл key.snk подписи каждый проект, чтобы создать с помощью шаблона.Чтобы получить сведения о том, как развернуть образец, чтобы создать отдельный файл key.snk для каждого экземпляра проекта см. в разделе Пошаговое руководство. Создание элемента проекта столбца сайта с помощью шаблона элемента, часть 2.

  8. Повторите шаги 5-8, добавив следующие файлы из указанных вложенных папок в каталоге BaseSharePointProject:

    • \Field1\Elements.xml

    • \Field1\SharePointProjectItem.spdata

    • \Features\Feature1\Feature1.feature

    • \Features\Feature1\Feature1.Template.xml

    • \Package\Package.package

    • \Package\Package.Template.xml

    Добавьте эти файлы непосредственно к проекту SiteColumnProjectTemplate; не воссоздают вложенные папки Field1, функций или пакетов в проекте.Дополнительные сведения об этих файлах см. в разделе Создание шаблонов элементов и проектов для элементов проектов SharePoint.

Настроить, как разработчики обнаружить шаблон проекта в диалоговом окне новый проект

  1. В Обозреватель решений открыть контекстное меню для узла проекта SiteColumnProjectTemplate, а затем выберите Выгрузить проект.Если будет предложено сохранить изменения к любым файлам, нажмите кнопку Да.

  2. Раскрывайте контекстное меню для узла SiteColumnProjectTemplate, а затем выберите правка SiteColumnProjectTemplate.csproj или правка SiteColumnProjectTemplate.vbproj.

  3. В файле проекта, найдите следующий элемент VSTemplate.

    <VSTemplate Include="SiteColumnProjectTemplate.vstemplate">
    
  4. Замените этот элемент следующим XML-кодом.

    <VSTemplate Include="SiteColumnProjectTemplate.vstemplate">
      <OutputSubPath>SharePoint\SharePoint14</OutputSubPath>
    </VSTemplate>
    

    Элемент OutputSubPath задает путь к дополнительным папкам, в которых при построении проекта создается шаблон проекта.Папки, указанные здесь гарантируют, что шаблон проекта будет доступен, только если клиенты раскроют диалоговое окно Создать проект разверните узел SharePoint, а затем выберите узел 2010.

  5. Сохраните и закройте файл.

  6. В Обозреватель решений открыть контекстное меню для проекта SiteColumnProjectTemplate, а затем выберите Перезагрузить проект.

Редактирование файлов шаблона проекта

В проекте SiteColumnProjectTemplate, правка следующие файлы, чтобы задать расширения функциональности шаблона проекта:

  • AssemblyInfo.cs или AssemblyInfo.vb

  • Elements.xml

  • SharePointProjectItem.spdata

  • Feature1.feature

  • Package.package

  • SiteColumnProjectTemplate.vstemplate

  • ProjectTemplate.csproj или ProjectTemplate.vbproj

В следующих процедурах добавление подстановочных параметров в некоторые из этих файлов.Меняемый параметр токен, который начинается и заканчивается знаком доллара ($).Когда пользователь использует этот шаблон проекта используется для создания проекта Visual Studio автоматически заменяет эти параметры в новом проекте с указанными значениями.Дополнительные сведения см. в разделе Подстановочные параметры.

Изменение файла AssemblyInfo.cs или AssemblyInfo.vb

  1. В проекте SiteColumnProjectTemplate, откройте файл AssemblyInfo.cs или AssemblyInfo.vb, а затем добавьте следующий оператор в начало:

    Imports System.Security
    
    using System.Security;
    

    Если свойство проекта SharePoint Изолированное решение имеет значение True, Visual Studio добавляет атрибут System.Security.AllowPartiallyTrustedCallersAttribute в файл кода AssemblyInfo.Однако файла кода AssemblyInfo в шаблоне проекта не будет импортировать по умолчанию пространства имен System.Security.Необходимо добавить оператор using или Imports для предотвращения ошибок при компиляции.

  2. Сохраните и закройте файл.

Изменение файла Elements.xml

  1. В проекте SiteColumnProjectTemplate замените содержимое файла Elements.xml следующим 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>
    

    Новый XML-код добавляет элемент Field, определяющий имя столбца сайта, его базовый тип, и в какой группе коллекции он отображается.Дополнительные сведения о содержимом этого файла см. в разделе Определения полей.

  2. Сохраните и закройте файл.

Редактирование файла SharePointProjectItem.spdata

  1. В проекте SiteColumnProjectTemplate замените содержимое файла SharePointProjectItem.spdata следующим 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>
    

    Новый XML-код вносит следующие изменения в файл.

    • Изменяется атрибут Type элемента ProjectItem к одной и той же строке, которая передается SharePointProjectItemTypeAttribute в определении элемента проекта (классе SiteColumnProjectItemTypeProvider, который был создан ранее в этом пошаговом руководстве).

    • Удаляет атрибуты SupportedTrustLevels и SupportedDeploymentScopes из элемента ProjectItem.Эти значения атрибутов необязательны, потому что уровни доверия и области развертывания заданы в классе SiteColumnProjectItemTypeProvider проекта ProjectItemTypeDefinition.

    Дополнительные сведения о содержимом SPDATA-файлов см. в разделе Справочные материалы по схеме элементов проектов SharePoint.

  2. Сохраните и закройте файл.

Изменение файла Feature1.feature

  1. В проекте SiteColumnProjectTemplate замените содержимое файла следующим XML-кодом. Feature1.feature

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

    Новый XML-код вносит следующие изменения в файл.

    • Изменяет значения атрибутов Id и featureId элемента feature к $guid4$.

    • Изменяет значения атрибута itemId элемента projectItemReference к $guid2$.

    Дополнительные сведения о FEATURE-файлах см. в разделе Создание шаблонов элементов и проектов для элементов проектов SharePoint.

  2. Сохраните и закройте файл.

Изменение файла Package.package

  1. В проекте SiteColumnProjectTemplate Package.package, замените содержимое файла следующим 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>
    

    Новый XML-код вносит следующие изменения в файл.

    • Изменяет значения атрибутов Id и solutionId элемента package к $guid3$.

    • Изменяет значения атрибута itemId элемента featureReference к $guid4$.

    Дополнительные сведения о PACKAGE-файлах см. в разделе Создание шаблонов элементов и проектов для элементов проектов SharePoint.

  2. Сохраните и закройте файл.

Изменение файла SiteColumnProjectTemplate.vstemplate

  1. В проекте SiteColumnProjectTemplate замените содержимое файла SiteColumnProjectTemplate.vstemplate с одним из следующих разделов XML.

    • Если создать шаблон проекта visual C#, используйте следующий XML-код.
    <?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>
    
    • При создании шаблона проекта Visual Basic, используйте следующий XML-код.
    <?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>
    

    Новый XML-код вносит следующие изменения в файл.

    • Задает элемент Name к значению Столбец сайта.(Это имя отображается в диалоговом окне Создать проект ).

    • Добавляет элементы ProjectItem для каждого filethat, включенные в каждом экземпляре проекта.

    • Использует пространство имен "https://schemas.microsoft.com/developer/vstemplate/2005".Другие файлы проекта в этом решении используют пространство имен "https://schemas.microsoft.com/developer/msbuild/2003".Поэтому предупреждения схемы XML будут формироваться, но можно пренебечь ними в этом пошаговом руководстве.

    Дополнительные сведения о содержимом VSTEMPLATE-файлов см. в разделе Справочник по схеме шаблонов Visual Studio.

  2. Сохраните и закройте файл.

Изменение файла ProjectTemplate.csproj или ProjectTemplate.vbproj

  1. В проекте SiteColumnProjectTemplate замените содержимое файла ProjectTemplate.csproj или файла ProjectTemplate.vbproj с одним из следующих разделов XML.

    • Если создать шаблон проекта visual C#, используйте следующий XML-код.
    <?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. При создании шаблона проекта Visual Basic, используйте следующий XML-код.
    <?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>
    

    Новый XML-код вносит следующие изменения в файл.

    • Использует элемент TargetFrameworkVersion для определения .NET Framework 3.5, а не 4,5.

    • Добавляет SignAssembly и элементы AssemblyOriginatorKeyFile для подписания выходные данные проекта.

    • Добавляет элементы Reference для ссылок на сборки, которые используют проектов SharePoint.

    • Добавляет элементы для каждого файла по умолчанию в проекте, например Elements.xml и SharePointProjectItem.spdata.

  2. Сохраните и закройте файл.

Создание пакета VSIX для развертывания шаблона проекта

Для развертывания расширения воспользуйтесь проектом VSIX в решении SiteColumnProjectItem для создания пакета VSIX.Сначала настройте пакет VSIX, изменив содержимое файла source.extension.vsixmanifest, входящего в состав проекта VSIX.Затем создайте пакет VSIX, выполнив построение решения.

Настройка и создание пакета VSIX

  1. В Обозреватель решений в проекте SiteColumnProjectItem, откройте файл source.extension.vsixmanifest в редакторе манифестов.

    Файл source.extension.vsixmanifest качестве основы для файла extension.vsixmanifest которого все пакеты VSIX.Дополнительные сведения об этом файле см. в разделе Справочник по схеме расширения VSIX.

  2. В окне Название продукта введите столбец сайта.

  3. В окне Автор введите Contoso.

  4. В окне Описание введите Проект SharePoint для создания столбцов сайта.

  5. Выберите вкладку Активы, а затем нажмите кнопку Создать.

    Будет открыто диалоговое окно Добавить новый актив.

  6. В списке Тип выберите Microsoft.VisualStudio.ProjectTemplate.

    ПримечаниеПримечание

    Это значение соответствует элементу ProjectTemplate, описанному в файле extension.vsixmanifest.Этот элемент определяет вложенную папку в пакете VSIX, содержащую шаблон проекта.Дополнительные сведения см. в разделе ProjectTemplate Element (VSX Schema).

  7. В списке Источник выберите Проект в текущем решении.

  8. В списке Проект и выберите SiteColumnProjectTemplate, а затем нажмите кнопку ОК.

  9. Нажмите кнопку Создать попытку.

    Будет открыто диалоговое окно Добавить новый актив.

  10. В списке Тип выберите Microsoft.VisualStudio.MefComponent.

    ПримечаниеПримечание

    Это значение соответствует элементу MefComponent, описанному в файле extension.vsixmanifest.Этот элемент задает имя сборки расширения в пакете VSIX.Дополнительные сведения см. в разделе MEFComponent Element.

  11. В списке Источник выберите Проект в текущем решении.

  12. В списке Проект выберите ProjectItemTypeDefinition, а затем нажмите кнопку ОК.

  13. В строке меню выберите Построение, Построить решение и убедитесь, что проект будет компилироваться без ошибок.

Проверка шаблона проекта

Шаблон проекта готов к тестированию.Начните отладку решения SiteColumnProjectItem в экспериментальном экземпляре Visual Studio.Затем протестируйте проект столбца сайта в экспериментальном экземпляре Visual Studio.И наконец, выполните построение и запуск проекта SharePoint, чтобы проверить, что столбец сайта работает ожидаемым образом.

Начало отладки решения

  1. Перезапустите Visual Studio с учетными данными администратора, а затем откройте решение SiteColumnProjectItem.

  2. В файле кода SiteColumnProjectItemTypeProvider, добавьте точку останова на первой строке кода в методе InitializeType, а затем выберите ключ F5, чтобы начать отладку.

    Visual Studio установит расширение в папку %UserProfile%\AppData\Local\Microsoft\VisualStudio\10.0Exp\Extensions\Contoso\Site Column\1.0 и запустит экспериментальный экземпляр Visual Studio.После этого можно тестировать элемент проекта в открытом экземпляре Visual Studio.

Тестирование проекта в Visual Studio

  1. В экспериментальном экземпляре Visual Studio в строке меню выберите Файл, Создать, Проект.

  2. Разверните узел Visual C# или Visual Basic (в зависимости от языка, который поддерживает шаблон проекта) разверните узел SharePoint, а затем выберите узел 2010.

  3. В списке шаблонов проектов выберите шаблон Столбец сайта.

  4. В окне вставить SiteColumnTestИмя, а затем кнопку ОК.

    В Обозреватель решений новый проект появляется с элементом проекта с именем Field1.

  5. Убедитесь, что выполнение кода в другом экземпляре Visual Studio прерывается на точке останова, которая имеет ранее в методе InitializeType, а затем выбрать ключ F5 чтобы продолжить отладку проекта.

  6. В Обозреватель решений выберите узел Field1, а затем выберите ключ F4.

    Будет открыто окно Свойства.

  7. В списке свойства, убедитесь в том, что свойство свойство примера.

Тестирование столбца сайта в SharePoint

  1. В Обозреватель решений выберите узел SiteColumnTest.

  2. В окне Свойства в текстовое поле рядом с свойством URL-адрес сайта введите https://localhost.

    Этот шаг определяет локальный сайт SharePoint на компьютере разработчика, который необходимо использовать для отладки.

    ПримечаниеПримечание

    Свойство URL-адрес сайта по умолчанию не содержит кода, поскольку шаблон проекта столбца сайта не предоставляет мастер для сбора это значение при создании проекта.Сведения о том, как добавить мастер, запрашивающий это значение у разработчика и настраивающий это свойство в новом проекте, см. в разделе Пошаговое руководство. Создание элемента проекта столбца сайта с помощью шаблона элемента, часть 2.

  3. Выберите ключ F5.

    Столбец сайта упакован к сайту SharePoint и развертывания, указанным в свойстве URL-адрес сайта проекта.В Интернет-браузере открывает страницу по умолчанию данного сайта.

    ПримечаниеПримечание

    Если откроется диалоговое окно Отладка скриптов отключена отображается, нажмите кнопку Да, чтобы продолжить отладку проекта.

  4. В меню действия сайта выберите Параметры сайта.

  5. На странице Параметры сайта под списком коллекции выберите ссылку столбцы сайта.

  6. В списке столбцов сайта, убедитесь, что группа Пользовательский столбец содержит столбец с именем SiteColumnTest.

  7. Закройте Интернет-браузер.

Очистка компьютера разработчика

После завершения тестирования проекта удалите шаблон проекта из экспериментального экземпляра Visual Studio.

Очистка компьютера разработчика

  1. В экспериментальном экземпляре Visual Studio в строке меню выберите Сервис, Расширения и обновления.

    Будет открыто диалоговое окно Расширения и обновления.

  2. В списке расширений выберите расширение Столбец сайта, а затем нажмите кнопку Удалить.

  3. В появившемся диалоговом окне нажмите кнопку Да, чтобы подтвердить удаление расширения.

  4. Нажмите кнопку Закрыть для завершения удаления.

  5. Закройте оба экземпляра Visual Studio (экспериментальном экземпляра и экземпляр Visual Studio, в котором открыто решение SiteColumnProjectItem).

Следующие действия

По завершении данного пошагового руководства вы можете добавить мастер в шаблон проекта.Когда пользователь создает проект столбца сайта, мастер запрашивает у пользователя URL-адрес сайта, используемый для отладки, и является ли решение изолированным. Мастер настраивает новый проект, используя эту информацию.Мастер также собирает сведения о столбце (например, его базовый тип и группу, в которой должен быть указан столбец в коллекции столбцов сайта) и добавляет их в файл Elements.xml в новом проекте.Дополнительные сведения см. в разделе Пошаговое руководство. Создание элемента проекта столбца сайта с помощью шаблона элемента, часть 2.

См. также

Задачи

Пошаговое руководство. Создание элемента проекта столбца сайта с помощью шаблона элемента, часть 2

Основные понятия

Определение пользовательских типов элементов проектов SharePoint

Создание шаблонов элементов и проектов для элементов проектов SharePoint

Сохранение данных в расширениях системы проектов SharePoint

Связь пользовательских данных с расширениями средств SharePoint