Gewusst wie: Abrufen des SharePoint-Projektdiensts
Sie können auf den SharePoint-Projektdienst in den folgenden Projektmappentypen zugreifen:
Eine Erweiterung des SharePoint-Projektsystems, z. B. eine Projekterweiterung, Projektelementerweiterung oder Projektelementtypdefinition.Weitere Informationen zu diesen Erweiterungstypen finden Sie unter Erweitern des SharePoint-Projektsystems.
Eine Erweiterung des Knotens SharePoint-Verbindungen in Server-Explorer.Weitere Informationen zu diesen Erweiterungstypen finden Sie unter Erweitern des SharePoint-Verbindungsknotens im Server-Explorer.
Ein anderer Erweiterungstyp für Visual Studio, z. B. ein Add-In oder ein VSPackage.
Abrufen des Diensts in Projektsystemerweiterungen
In jeder Erweiterung des SharePoint-Projektsystems können Sie mit der ProjectService-Eigenschaft eines ISharePointProject-Objekts auf den Projektdienst zugreifen.
Sie können den Projektdienst auch mit den folgenden Prozeduren abrufen.
So rufen Sie den Dienst in einer Projekterweiterung ab
Suchen Sie in Ihrer Implementierung der ISharePointProjectExtension-Schnittstelle die Initialize-Methode.
Verwenden Sie den projectService-Parameter, um auf den Dienst zuzugreifen.
Im folgenden Codebeispiel wird veranschaulicht, wie der Projektdienst verwendet wird, um in einer einfachen Projekterweiterung eine Meldung in das Fenster Ausgabe und das Fenster Fehlerliste zu schreiben.
<Export(GetType(ISharePointProjectExtension))> _ Friend Class GetServiceInProject Implements ISharePointProjectExtension Private Sub Initialize(ByVal projectService As ISharePointProjectService) _ Implements ISharePointProjectExtension.Initialize projectService.Logger.WriteLine("This message was written by using the " & _ "project service in a project extension.", LogCategory.Message) End Sub End Class
[Export(typeof(ISharePointProjectExtension))] internal class GetServiceInProject : ISharePointProjectExtension { public void Initialize(ISharePointProjectService projectService) { projectService.Logger.WriteLine("This message was written by using the " + "project service in a project extension.", LogCategory.Message); } }
Weitere Informationen zum Erstellen von Projekterweiterungen finden Sie unter Gewusst wie: Erstellen einer SharePoint-Projekterweiterung.
So rufen Sie den Dienst in einer Projektelementerweiterung ab
Suchen Sie in Ihrer Implementierung der ISharePointProjectItemTypeExtension-Schnittstelle die Initialize-Methode.
Verwenden Sie die ProjectService-Eigenschaft des projectItemType-Parameters, um den Dienst abzurufen.
Im folgenden Codebeispiel wird veranschaulicht, wie der Projektdienst verwendet wird, um in einer einfachen Erweiterung des Projektelements Listendefinition eine Meldung in das Fenster Ausgabe und das Fenster Fehlerliste zu schreiben.
<Export(GetType(ISharePointProjectItemTypeExtension))> _ <SharePointProjectItemType("Microsoft.VisualStudio.SharePoint.ListDefinition")> _ Friend Class GetServiceInProjectItem Implements ISharePointProjectItemTypeExtension Private Sub Initialize(ByVal projectItemType As ISharePointProjectItemType) _ Implements ISharePointProjectItemTypeExtension.Initialize projectItemType.ProjectService.Logger.WriteLine("This message was written " & _ "by using the project service in an extension for the ListDefinition project item.", _ LogCategory.Message) End Sub End Class
[Export(typeof(ISharePointProjectItemTypeExtension))] [SharePointProjectItemType("Microsoft.VisualStudio.SharePoint.ListDefinition")] internal class GetServiceInProjectItem : ISharePointProjectItemTypeExtension { public void Initialize(ISharePointProjectItemType projectItemType) { projectItemType.ProjectService.Logger.WriteLine("This message was written " + "by using the project service in an extension for the ListDefinition project item.", LogCategory.Message); } }
Weitere Informationen zum Erstellen von Projektelementerweiterungen finden Sie unter Gewusst wie: Erstellen einer SharePoint-Projektelementerweiterung.
So rufen Sie den Dienst in einer Projektelementtypdefinition ab
Suchen Sie in Ihrer Implementierung der ISharePointProjectItemTypeProvider-Schnittstelle die InitializeType-Methode.
Verwenden Sie die ProjectService-Eigenschaft des typeDefinition-Parameters, um den Dienst abzurufen.
Im folgenden Codebeispiel wird veranschaulicht, wie der Projektdienst verwendet wird, um in einer einfachen Projektelementtypdefinition eine Meldung in das Fenster Ausgabe und das Fenster Fehlerliste zu schreiben.
<Export(GetType(ISharePointProjectItemTypeProvider))> _ <SharePointProjectItemType("Contoso.CustomAction")> _ Friend Class CustomActionProvider Implements ISharePointProjectItemTypeProvider Private Sub InitializeType(ByVal projectItemTypeDefinition As ISharePointProjectItemTypeDefinition) _ Implements ISharePointProjectItemTypeProvider.InitializeType projectItemTypeDefinition.ProjectService.Logger.WriteLine("This message was written " & _ "by using the project service in the Custom Action project item type.", _ LogCategory.Message) End Sub End Class
[Export(typeof(ISharePointProjectItemTypeProvider))] [SharePointProjectItemType("Contoso.CustomAction")] internal class CustomActionProvider : ISharePointProjectItemTypeProvider { public void InitializeType(ISharePointProjectItemTypeDefinition projectItemTypeDefinition) { projectItemTypeDefinition.ProjectService.Logger.WriteLine("This message was written " + "by using the project service in the Custom Action project item type definition.", LogCategory.Message); } }
Weitere Informationen über das Definieren von Projektelementtypen, finden Sie unter Gewusst wie: Definieren eines SharePoint-Projektelementtyps.
Abrufen des Diensts in Server-Explorer-Erweiterungen
In einer Erweiterung des Knotens SharePoint-Verbindungen in Server-Explorer können Sie mit der ServiceProvider-Eigenschaft eines IExplorerNode-Objekts auf den Projektdienst zugreifen.
So rufen Sie den Dienst in einer Server-Explorer-Erweiterung ab
Rufen Sie das IServiceProvider-Objekt der ServiceProvider-Eigenschaft eines IExplorerNode-Objekts in Ihrer Erweiterung ab.
Verwenden Sie die GetService-Methode, um ein ISharePointProjectService-Projekt anzufordern.
Im folgenden Codebeispiel wird veranschaulicht, wie der Projektdienst verwendet wird, um eine Meldung in die Fenster Ausgabe und Fehlerliste eines Kontextmenüs zu schreiben, das die Erweiterung in Server-Explorer Listenknoten hinzufügt.
<Export(GetType(IExplorerNodeTypeExtension))> _ <ExplorerNodeType(ExtensionNodeTypes.ListNode)> _ Friend Class ListNodeExtension Implements IExplorerNodeTypeExtension Private projectService As ISharePointProjectService Private Sub Initialize(ByVal nodeType As IExplorerNodeType) _ Implements IExplorerNodeTypeExtension.Initialize AddHandler nodeType.NodeMenuItemsRequested, AddressOf nodeType_NodeMenuItemsRequested End Sub Private Sub nodeType_NodeMenuItemsRequested(ByVal Sender As Object, ByVal e As ExplorerNodeMenuItemsRequestedEventArgs) Dim writeMessageMenuItem As IMenuItem = e.MenuItems.Add("Write Message to Output Window and Error List Window") AddHandler writeMessageMenuItem.Click, AddressOf writeMessageMenuItem_Click End Sub Private Sub writeMessageMenuItem_Click(ByVal Sender As Object, ByVal e As MenuItemEventArgs) Dim node As IExplorerNode = CType(e.Owner, IExplorerNode) If projectService Is Nothing Then projectService = CType(node.ServiceProvider.GetService(GetType(ISharePointProjectService)), ISharePointProjectService) End If projectService.Logger.WriteLine("Clicked the menu item for " + node.Text, LogCategory.Message) End Sub End Class
[Export(typeof(IExplorerNodeTypeExtension))] [ExplorerNodeType(ExtensionNodeTypes.ListNode)] internal class ListNodeExtension : IExplorerNodeTypeExtension { private ISharePointProjectService projectService; public void Initialize(IExplorerNodeType nodeType) { nodeType.NodeMenuItemsRequested += nodeType_NodeMenuItemsRequested; } void nodeType_NodeMenuItemsRequested(object sender, ExplorerNodeMenuItemsRequestedEventArgs e) { IMenuItem writeMessageMenuItem = e.MenuItems.Add("Write Message to Output Window and Error List Window"); writeMessageMenuItem.Click += writeMessageMenuItem_Click; } void writeMessageMenuItem_Click(object sender, MenuItemEventArgs e) { IExplorerNode node = (IExplorerNode)e.Owner; if (projectService == null) { projectService = (ISharePointProjectService)node.ServiceProvider.GetService(typeof(ISharePointProjectService)); } projectService.Logger.WriteLine("Clicked the menu item for " + node.Text, LogCategory.Message); } }
Weitere Informationen zum Erweitern des Knotens SharePoint-Verbindungen in Server-Explorer finden Sie unter Gewusst wie: Erweitern eines SharePoint-Knotens im Server-Explorer.
Abrufen des Diensts in anderen Visual Studio-Erweiterungen
Sie können den Projektdienst in einem VSPackage oder in einer beliebigen anderen Visual Studio-Erweiterung abrufen, die über Zugriff auf ein EnvDTE80.DTE2-Objekt im Automatisierungsobjektmodell verfügt, z. B. ein Add-In oder ein Projektvorlagen-Assistent, der die Microsoft.VisualStudio.TemplateWizard.IWizard-Schnittstelle implementiert.
In einem VSPackage können Sie mit einer der folgenden Methoden ein ISharePointProjectService-Objekt anfordern:
Die GetService-Methode eines verwalteten VSPackages, das sich von der Microsoft.VisualStudio.Shell.Package-Klasse ableitet.Weitere Informationen finden Sie unter Gewusst wie: Nehmen Sie einen Dienst in Anspruch.
Die statische Package.GetGlobalService-Methode.Weitere Informationen finden Sie unter Gewusst wie: GetGlobalService Verwendung.
In einer Visual Studio-Erweiterung mit Zugriff auf ein EnvDTE80.DTE2-Objekt können Sie ein ISharePointProjectService-Objekt anfordern, indem Sie die GetService()-Methode eines Microsoft.VisualStudio.Shell.ServiceProvider-Objekts verwenden.Weitere Informationen finden Sie unter Gewusst wie: Ruft einen Dienst vom DTE-Objekt ab.
Beispiel
Im folgenden Codebeispiel wird veranschaulicht, wie der Projektdienst in einem Visual Studio-Add-In abgerufen wird.Wenn Sie diesen Code verwenden möchten, führen Sie ihn von der Connect-Klasse in einem Add-In-Projekt aus.Das _applicationObject-Objekt wird automatisch in Add-In-Projekte generiert. Dieses Objekt ist eine Instanz der EnvDTE80.DTE2-Schnittstelle.
Dim serviceProvider As Microsoft.VisualStudio.Shell.ServiceProvider = _
New Microsoft.VisualStudio.Shell.ServiceProvider( _
TryCast(_applicationObject, Microsoft.VisualStudio.OLE.Interop.IServiceProvider))
Dim projectService As Microsoft.VisualStudio.SharePoint.ISharePointProjectService = _
TryCast(serviceProvider.GetService(GetType(Microsoft.VisualStudio.SharePoint.ISharePointProjectService)), _
Microsoft.VisualStudio.SharePoint.ISharePointProjectService)
If projectService IsNot Nothing Then
projectService.Logger.WriteLine("This message was written by using the SharePoint project service.", _
Microsoft.VisualStudio.SharePoint.LogCategory.Message)
End If
Microsoft.VisualStudio.Shell.ServiceProvider serviceProvider =
new Microsoft.VisualStudio.Shell.ServiceProvider(
_applicationObject as Microsoft.VisualStudio.OLE.Interop.IServiceProvider);
Microsoft.VisualStudio.SharePoint.ISharePointProjectService projectService =
serviceProvider.GetService(typeof(Microsoft.VisualStudio.SharePoint.ISharePointProjectService))
as Microsoft.VisualStudio.SharePoint.ISharePointProjectService;
if (projectService != null)
{
projectService.Logger.WriteLine("This message was written by using the SharePoint project service.",
Microsoft.VisualStudio.SharePoint.LogCategory.Message);
}
Dieses Beispiel setzt Folgendes voraus:
Ein Visual Studio-Add-In-Projekt.Weitere Informationen finden Sie unter Gewusst wie: Erstellen von Add-Ins.
Verweise auf die Assemblys Microsoft.VisualStudio.OLE.Interop, Microsoft.VisualStudio.Shell und Microsoft.VisualStudio.SharePoint.
Siehe auch
Aufgaben
Gewusst wie: Erstellen von Add-Ins
Gewusst wie: Nehmen Sie einen Dienst in Anspruch
Gewusst wie: Ruft einen Dienst vom DTE-Objekt ab
Gewusst wie: Verwenden von Assistenten mit Projektvorlagen