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


Пошаговое руководство. Вызов клиентской объектной модели SharePoint в расширении обозревателя серверов

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

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

  • Создание расширения Visual Studio, которое следующим образом расширяет узел Подключения SharePointобозревателя серверов:

    • Расширение добавляет узел Коллекция веб-части под каждым узлом сайта SharePoint в Обозреватель серверов.Этот новый узел содержит дочерние узлы, представляющие каждую из веб-частей в коллекции веб-частей на сайте;

    • Расширение определяет новый тип узла, который представляет экземпляр веб-части.Этот новый узел является базовым для дочерних узлов нового узла Коллекция веб-частей.Новый тип узла " веб-часть " отображает сведения в окне Свойства о веб-части, которое представляет узел.

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

  • Отладка и тестирование расширения.

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

Расширение, который будет создан в этом пошаговом руководстве показано расширение, которое создается в Пошаговое руководство. Расширение обозревателя сервера, чтобы в нем отображались веб-части.Пошаговое руководство, использующего объектную модель сервера SharePoint, однако в этом пошаговом руководстве выполняет те же задачи с помощью клиентской объектной модели.

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

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

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

  • использование клиентской объектной модели SharePoint.Дополнительные сведения см. в разделе Managed Client Object Model.

  • Веб-части SharePoint.Дополнительные сведения см. в разделе Web Parts Overview.

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

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

  • Проект VSIX, который позволит создать пакет VSIX для развертывания расширения Обозреватель серверов.

  • Проект библиотеки классов, средства расширения Обозреватель серверов.

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

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

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

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

  3. В диалоговом окне Создать проект разверните узлы Visual C# или Visual Basic, а затем выберите Расширение среды.

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

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

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

    Расширения средств SharePoint требуют функций в данной версии платформы .NET Framework.

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

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

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

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

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

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

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

  2. В диалоговом окне Создать проект разверните узлы Visual C# или Visual Basic, а затем выберите Окна.

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

  4. В списке шаблонов проектов выберите Библиотека классов.

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

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

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

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

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

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

  1. В проекте добавьте WebPartNodeExtension 2 файла с кодом SiteNodeExtension, называются и WebPartNodeTypeProvider.

  2. Открыть контекстное меню для проекта WebPartNodeExtension, а затем выберите Добавить ссылку.

  3. В диалоговом окне Диспетчер ссылок – WebPartNodeExtension выберите узел Платформа, а затем установите флажки для сборок System.ComponentModel.Composition и System.Windows.Forms.

  4. Выберите узел Расширения установите флажок для каждой из следующих сборок, а затем нажмите кнопку ОК:

    • Microsoft.SharePoint.Client

    • Microsoft.SharePoint.Client.Runtime

    • Microsoft.VisualStudio.SharePoint

  5. Открыть контекстное меню для проекта WebPartNodeExtension, а затем выберите Свойства.

    Откроется Конструктор проектов.

  6. Выберите вкладку Приложение.

  7. В окне Пространство имен по умолчанию (C#) или в окне Корневое пространство имен (Visual Basic) введите ServerExplorer.SharePointConnections.WebPartNode.

Создание значков для новых узлов

Создание значков для расширения Обозреватель серверов : 2 значок для нового узла Коллекция веб-части и другой значок для каждого узла " веб-часть " дочернего элемента под узлом Коллекция веб-части.Далее в этом пошаговом руководстве будет написан код, который связывает эти значки с узлами.

Создание значков для узлов

  1. В Конструктор проектов для проекта WebPartNodeExtension, выберите вкладку Ресурсы.

  2. Выберите ссылку на этот проект не содержит файла ресурсов по умолчанию. Щелкните эту ссылку для создания.

    Visual Studio создает файл ресурсов и открытые в конструкторе.

  3. В верхней части конструктора выберите стрелка на команде меню Добавить ресурс, а затем выберите Добавить новый значок.

  4. Введите WebPartsNode для нового имени, значка и затем нажмите кнопку Добавить.

    Новый значок будет отрыт в Редакторе изображений.

  5. Правка версия значок 16x16, чтобы он будет содержать конструкцию, которую можно легко распознать.

  6. Открыть контекстное меню для версии значка размером 32x32, а затем выберите Удалить тип изображений.

  7. Повторяющиеся секции 3 до 7, чтобы добавить второй значок к ресурсам проект и назовите этот значок WebPart.

  8. В Обозреватель решений в папке Ресурсы для проекта WebPartNodeExtension выберите WebPartsNode.ico.

  9. В окне Свойства открыть список Действие при построении, а затем выберите Внедренный ресурс.

  10. Повторите последние два шага для значка WebPart.ico.

Добавление узла коллекции веб-частей в обозреватель серверов

Создайте класс, который добавляет новый узел Коллекция веб-частей в узел каждого из сайтов SharePoint.Для добавления нового узла класс реализует интерфейс IExplorerNodeTypeExtension.Этот интерфейс следует реализовывать всякий раз, когда требуется расширить поведение имеющегося узла Обозреватель серверов, например добавить к узлу новый дочерний узел.

Добавление узла коллекции веб-частей в обозреватель серверов

  • Вставьте следующий код в файл кода SiteNodeExtension для проекта WebPartNodeExtension.

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

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

    Imports System.Collections.Generic
    Imports System.ComponentModel.Composition
    Imports Microsoft.SharePoint.Client
    Imports Microsoft.VisualStudio.SharePoint
    Imports Microsoft.VisualStudio.SharePoint.Explorer
    
    Namespace ServerExplorer.SharePointConnections.WebPartNode
    
        ' Export attribute: Enables Visual Studio to discover and load this extension.
        ' ExplorerNodeType attribute: Indicates that this class extends SharePoint site nodes in Server Explorer.
        ' SiteNodeExtension class: Represents an extension of SharePoint site nodes in Server Explorer.
        <Export(GetType(IExplorerNodeTypeExtension))> _
        <ExplorerNodeType(ExplorerNodeTypes.SiteNode)> _
        Friend Class SiteNodeExtension
            Implements IExplorerNodeTypeExtension
    
            Private siteUrl As System.Uri = Nothing
    
            Private Sub Initialize(ByVal nodeType As IExplorerNodeType) _
                Implements IExplorerNodeTypeExtension.Initialize
    
                ' The NodeChildrenRequested event is raised when the user expands the
                ' SharePoint site node in Server Explorer.
                AddHandler nodeType.NodeChildrenRequested, AddressOf NodeChildrenRequested
            End Sub
    
            ' Creates the new Web Part Gallery node with the specified icon.
            Private Sub NodeChildrenRequested(ByVal Sender As Object, ByVal e As ExplorerNodeEventArgs)
    
                ' Get the site URL so that it can be used later to access the site
                ' by using the SharePoint client object model.
                siteUrl = e.Node.Context.SiteUrl
    
                ' The CreateWebPartNodes argument is a delegate that Visual Studio calls 
                ' to create the child nodes under the Web Part Gallery node.
                e.Node.ChildNodes.AddFolder("Web Part Gallery", My.Resources.WebPartsNode.ToBitmap(), _
                    AddressOf CreateWebPartNodes)
            End Sub
    
            ' Creates individual Web Part nodes under the new Web Part Gallery node.
            Private Sub CreateWebPartNodes(ByVal parentNode As IExplorerNode)
    
                ' Use the SharePoint client object model to get items from the Web Part gallery.
                Dim Context As ClientContext = New ClientContext(siteUrl.AbsoluteUri)
                Dim WebPartsGallery As List = Context.Web.GetCatalog(CType(ListTemplateType.WebPartCatalog, Integer))
                Dim WebParts As ListItemCollection = WebPartsGallery.GetItems(New CamlQuery())
    
                ' Request the FieldValuesAsText property values with the Web Part items.
                Context.Load(WebParts, Function(listItems) listItems.Include(Function(i) i.FieldValuesAsText))
                Context.ExecuteQuery()
    
                If WebParts IsNot Nothing Then
                    For Each WebPart As ListItem In WebParts
    
                        ' Create a new annotation object to store the current Web Part item with the new node.
                        Dim Annotations = New Dictionary(Of Object, Object)()
                        Annotations.Add(GetType(ListItem), WebPart)
    
                        ' Create the new node for the current Web Part item.
                        parentNode.ChildNodes.Add(WebPartNodeTypeProvider.WebPartNodeTypeId, _
                            WebPart.FieldValuesAsText.FieldValues("Title"), Annotations)
                    Next
                End If
            End Sub
        End Class
    End Namespace
    
    using System.Collections.Generic;
    using System.ComponentModel.Composition;
    using Microsoft.SharePoint.Client;
    using Microsoft.VisualStudio.SharePoint;
    using Microsoft.VisualStudio.SharePoint.Explorer;
    
    namespace ServerExplorer.SharePointConnections.WebPartNode
    {
        // Enables Visual Studio to discover and load this extension.
        [Export(typeof(IExplorerNodeTypeExtension))]        
    
        // Indicates that this class extends SharePoint site nodes in Server Explorer.
        [ExplorerNodeType(ExplorerNodeTypes.SiteNode)]
    
        // Represents an extension of SharePoint site nodes in Server Explorer.
        internal class SiteNodeExtension : IExplorerNodeTypeExtension
        {
            private System.Uri siteUrl = null;
    
            public void Initialize(IExplorerNodeType nodeType)
            {
                // The NodeChildrenRequested event is raised when the user expands the
                // SharePoint site node in Server Explorer.
                nodeType.NodeChildrenRequested += NodeChildrenRequested;
            }
    
            // Creates the new Web Part Gallery node with the specified icon.
            private void NodeChildrenRequested(object sender, ExplorerNodeEventArgs e)
            {
                // Get the site URL so that it can be used later to access the site
                // by using the SharePoint client object model.
                siteUrl = e.Node.Context.SiteUrl;
    
                // The CreateWebPartNodes argument is a delegate that Visual Studio calls 
                // to create the child nodes under the Web Part Gallery node.
                e.Node.ChildNodes.AddFolder("Web Part Gallery", Properties.Resources.WebPartsNode.ToBitmap(), 
                    CreateWebPartNodes);
            }
    
            // Creates individual Web Part nodes under the new Web Part Gallery node.
            private void CreateWebPartNodes(IExplorerNode parentNode)
            {
                // Use the SharePoint client object model to get items from the Web Part gallery.
                ClientContext context = new ClientContext(siteUrl.AbsoluteUri);
                List webPartsGallery = context.Web.GetCatalog((int)ListTemplateType.WebPartCatalog);
                ListItemCollection webParts = webPartsGallery.GetItems(new CamlQuery());
    
                // Request the FieldValuesAsText property values with the Web Part items.
                context.Load(webParts, listItems => listItems.Include(i => i.FieldValuesAsText));
                context.ExecuteQuery();
    
                if (webParts != null)
                {
                    foreach (ListItem webPart in webParts)
                    {
                        // Create a new annotation object to store the current Web Part item with the new node.
                        var annotations = new Dictionary<object, object>() 
                        { 
                            { typeof(ListItem), webPart } 
                        };
    
                        // Create the new node for the current Web Part item.
                        parentNode.ChildNodes.Add(WebPartNodeTypeProvider.WebPartNodeTypeId,
                            webPart.FieldValuesAsText.FieldValues["Title"], annotations);
                    }
                }
            }
        }
    }
    

Определение типа узла, представляющего веб-часть

Создайте класс, который определяет новый тип узла, представляющий веб-часть.Visual Studio использует этот новый тип узла, чтобы отобразить дочерние узлы под узлом Коллекция веб-части.Каждый из этих дочерних узлов представляет отдельную веб-часть сайта SharePoint.

Для определения нового типа узла класс реализует интерфейс IExplorerNodeTypeProvider.Этот интерфейс следует реализовывать всякий раз, когда требуется определить новый тип узла в обозревателе серверов.

Определение типа узла веб-части

  • Вставьте следующий код в файл кода WebPartNodeTypeProvider для проекта WebPartNodeExtension.

    Imports System
    Imports System.Collections.Generic
    Imports System.Windows.Forms
    Imports System.ComponentModel.Composition
    Imports Microsoft.SharePoint.Client
    Imports Microsoft.VisualStudio.SharePoint
    Imports Microsoft.VisualStudio.SharePoint.Explorer
    
    Namespace ServerExplorer.SharePointConnections.WebPartNode
    
        ' Export attribute: Enables Visual Studio to discover and load this extension.
        ' ExplorerNodeType attribute: Specifies the ID for this new node type.
        ' WebPartNodeTypeProvider class: Defines a new node type that represents a Web Part on a SharePoint site.
        <Export(GetType(IExplorerNodeTypeProvider))> _
        <ExplorerNodeType(WebPartNodeTypeProvider.WebPartNodeTypeId)> _
        Friend Class WebPartNodeTypeProvider
            Implements IExplorerNodeTypeProvider
    
            Friend Const WebPartNodeTypeId As String = "Contoso.WebPart"
    
            Private Sub InitializeType(ByVal typeDefinition As IExplorerNodeTypeDefinition) _
            Implements IExplorerNodeTypeProvider.InitializeType
                typeDefinition.DefaultIcon = My.Resources.WebPart.ToBitmap()
                typeDefinition.IsAlwaysLeaf = True
    
                AddHandler typeDefinition.NodePropertiesRequested, AddressOf NodePropertiesRequested
                AddHandler typeDefinition.NodeMenuItemsRequested, AddressOf NodeMenuItemsRequested
            End Sub
    
            ' Retrieves properties that are displayed in the Properties window when
            ' a Web Part node is selected.
            Private Sub NodePropertiesRequested(ByVal Sender As Object, _
                ByVal e As ExplorerNodePropertiesRequestedEventArgs)
    
                Dim webPart = e.Node.Annotations.GetValue(Of ListItem)()
                Dim propertySource = e.Node.Context.CreatePropertySourceObject( _
                    webPart.FieldValuesAsText.FieldValues)
                e.PropertySources.Add(propertySource)
            End Sub
    
            Private Sub NodeMenuItemsRequested(ByVal Sender As Object, _
                ByVal e As ExplorerNodeMenuItemsRequestedEventArgs)
                Dim WebPartNodeMenuItem As IMenuItem = e.MenuItems.Add("Display Message")
                AddHandler WebPartNodeMenuItem.Click, AddressOf MenuItemClick
            End Sub
    
            Private Sub MenuItemClick(ByVal Sender As Object, ByVal e As MenuItemEventArgs)
                Dim ParentNode As IExplorerNode = TryCast(e.Owner, IExplorerNode)
                If ParentNode IsNot Nothing Then
                    Dim webPart = ParentNode.Annotations.GetValue(Of ListItem)()
                    MessageBox.Show("You clicked the context menu for the following Web part: " & _
                        webPart.FieldValuesAsText.FieldValues("Title") + ".", "Web Part Menu Command")
                End If
            End Sub
        End Class
    End Namespace
    
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using System.ComponentModel.Composition;
    using Microsoft.SharePoint.Client;
    using Microsoft.VisualStudio.SharePoint;
    using Microsoft.VisualStudio.SharePoint.Explorer;
    
    namespace ServerExplorer.SharePointConnections.WebPartNode
    {
        // Enables Visual Studio to discover and load this extension.
        [Export(typeof(IExplorerNodeTypeProvider))]
    
        // Specifies the ID for this new node type.
        [ExplorerNodeType(WebPartNodeTypeProvider.WebPartNodeTypeId)]
    
        // Defines a new node type that represents a Web Part on a SharePoint site.
        internal class WebPartNodeTypeProvider : IExplorerNodeTypeProvider
        {
            internal const string WebPartNodeTypeId = "Contoso.WebPart";
    
            public void InitializeType(IExplorerNodeTypeDefinition typeDefinition)
            {
                typeDefinition.DefaultIcon = Properties.Resources.WebPart.ToBitmap();
                typeDefinition.IsAlwaysLeaf = true;
    
                typeDefinition.NodePropertiesRequested += NodePropertiesRequested;
                typeDefinition.NodeMenuItemsRequested += NodeMenuItemsRequested;
            }
    
            // Retrieves properties that are displayed in the Properties window when
            // a Web Part node is selected.
            private void NodePropertiesRequested(object sender,
                ExplorerNodePropertiesRequestedEventArgs e)
            {
                var webPart = e.Node.Annotations.GetValue<ListItem>();
                object propertySource = e.Node.Context.CreatePropertySourceObject(
                    webPart.FieldValuesAsText.FieldValues);
                e.PropertySources.Add(propertySource);
            }
    
            private void NodeMenuItemsRequested(
                object sender, ExplorerNodeMenuItemsRequestedEventArgs e)
            {
                e.MenuItems.Add("Display Message").Click += MenuItemClick;
            }
    
            private void MenuItemClick(object sender, MenuItemEventArgs e)
            {
                IExplorerNode parentNode = e.Owner as IExplorerNode;
    
                if (parentNode != null)
                {
                    var webPart = parentNode.Annotations.GetValue<ListItem>();
                    MessageBox.Show("You clicked the context menu for the following Web part: " +
                        webPart.FieldValuesAsText.FieldValues["Title"] + ".", "Web Part Menu Command");
                }
            }
        }
    }
    

Контрольная точка

На данный момент проект содержит весь код узла Коллекция веб-частей.Постройте проект WebPartNodeExtension убедиться, что он будет компилироваться без ошибок.

Построение проекта

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

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

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

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

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

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

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

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

  4. В окне Описание введите Добавляет пользовательский узел коллекции веб-части в узле подключения SharePoint в обозревателе сервера.

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

  6. В диалоговом окне Добавить новый актив в списке Тип выберите Microsoft.VisualStudio.MefComponent.

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

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

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

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

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

  10. Убедитесь, что в выходную папку построения для проекта WebPartNode теперь содержит файл WebPartNode.vsix.

    По умолчанию выходной папкой построения является папка ..\bin\Debug, расположенная в папке, содержащей файл проекта.

Тестирование расширения

Новый узел Коллекция веб-частей в обозревателе серверов готов к тестированию.Во-первых, начните отладку проекта расширения в экспериментальном экземпляре Visual Studio.Затем используйте новый узел веб-части в экспериментальном экземпляре Visual Studio.

Запуск отладки расширения

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

  2. В проекте WebPartNodeExtension, откройте файл кода SiteNodeExtension, а затем добавьте точку останова на первой строки кода в методах NodeChildrenRequested и CreateWebPartNodes.

  3. Выберите ключ F5, чтобы начать отладку.

    Visual Studio устанавливает расширения до %UserProfile% \ AppData \ local \ Microsoft \ VisualStudio \ 11.0Exp \ extensions \ Contoso \ расширение узла коллекции веб-части для обозревателя серверов \ 1.0 и запускает экспериментальном экземпляре Visual Studio.Тестировании элемент проекта в данном экземпляре Visual Studio.

Тестирование расширения

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

  2. Проверьте, что сайт SharePoint, который предполагается использовать для тестирования, отображается в узле Подключения SharePoint в обозревателе серверов.Если она не перечислитьа, выполните следующие шаги:

    1. Открыть контекстное меню для Подключения SharePoint, а затем выберите Добавить подключение.

    2. В диалоговом окне Добавление подключения к SharePoint введите URL-адрес сайта SharePoint, к которому нужно подключиться, а затем нажмите кнопку ОК.

      Чтобы задать сайт SharePoint на компьютере разработчика, введите https://localhost.

  3. Разверните узел подключения сайта (который указывает URL-адрес вашего сайта), а затем разверните узел подчиненного сайта (например, сайт группы).

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

  5. В экспериментальном экземпляре Visual Studio разверните узел Коллекция веб-части, который отображается в узле сайта верхнего уровня.

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

  7. В экспериментальном экземпляре Visual Studio убедитесь, что все веб-части на подключенном сайте доступны в узле Коллекция веб-частей в обозревателе серверов.

  8. Открыть контекстное меню для веб-части, а затем выберите Свойства.

  9. В окне Свойства, убедитесь, что сведения о веб-части.

  10. В Обозреватель серверов открыть контекстное меню для одного и того же " веб-часть ", а затем выберите Вывод сообщения.

    В появившемся окне сообщения нажмите кнопку ОК.

Удаление расширения из Visual Studio

После завершения тестирования расширения удалите его из Visual Studio.

Удаление расширения

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

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

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

  3. В появившемся диалоговом окне нажмите кнопку Да.

  4. Нажмите кнопку Перезагрузить сейчас для завершения удаления.

    Также будет удален элемент проекта.

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

См. также

Задачи

Пошаговое руководство. Расширение обозревателя сервера, чтобы в нем отображались веб-части

Создание значка или другого изображения (редактор изображений для значков)

Ссылки

Редактор изображений для значков

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

Вызов объектных моделей SharePoint

Другие ресурсы

Расширение узла подключений SharePoint в обозревателе сервера