How to: Handle Events for a SharePoint Project

Switch View :
ScriptFree
Visual Studio 2010
How to: Handle Events for a SharePoint Project

[This documentation is for preview only, and is subject to change in later releases. Blank topics are included as placeholders.]

You can use the ISharePointProjectEvents interface to respond to SharePoint project-related events, such as the following:

  • A SharePoint project is added, removed, or excluded from the solution.

  • A SharePoint project is loaded into the IDE.

  • A SharePoint project name is changed.

  • A SharePoint project's properties are requested or changed.

  • A SharePoint project's menu items are requested.

To handle SharePoint project events

  1. Create a class library project.

  2. Add references to the following assemblies:

    • Microsoft.VisualStudio.SharePoint

    • System.ComponentModel.Composition

  3. Create a class that implements the Microsoft.VisualStudio.SharePoint.ISharePointProjectExtension interface.

  4. Add the System.ComponentModel.Composition.ExportAttribute to the class. This attribute enables Visual Studio to discover and load your ISharePointProjectExtension implementation.

  5. Pass the ISharePointProjectExtension type to the attribute constructor.

  6. In the Initialize method of your ISharePointProjectExtension implementation, handle the events that you want to take action on.

Example

The following code example demonstrates how to handle SharePoint project events that are contained in ISharePointProjectEvents, except for the ProjectMenuItemsRequested or ProjectPropertiesRequested events, which are illustrated in Walkthrough: Defining a SharePoint Project Item with an Item Template.

Visual Basic

Imports Microsoft.VisualStudio.SharePoint
Imports System
Imports System.ComponentModel
Imports System.ComponentModel.Composition

Namespace Contoso.SPEventsExample
    <Export(GetType(ISharePointProjectExtension))> _
    Class SPEvents
        Implements ISharePointProjectExtension

        Public Sub Initialize(ByVal projectService As ISharePointProjectService) Implements ISharePointProjectExtension.Initialize
            ' Handle events for when a project property value is changed.
            AddHandler projectService.ProjectPropertyChanged, AddressOf Me.ProjectPropertyChanged
            ' Handle events for when a project is added to the solution.
            AddHandler projectService.ProjectAdded, AddressOf Me.projectService_ProjectAdded
            ' Handle events for when a project is being removed or excluded from the solution (disposed).
            AddHandler projectService.ProjectDisposing, AddressOf Me.projectService_ProjectDisposing
            ' Handle events for when a project is initialized.
            AddHandler projectService.ProjectInitialized, AddressOf Me.projectService_ProjectInitialized
            ' Handle events for when a project name is changed.
            AddHandler projectService.ProjectNameChanged, AddressOf Me.projectService_ProjectNameChanged
            ' Handle events for when a project has been removed or excluded from the solution.
            AddHandler projectService.ProjectRemoved, AddressOf Me.projectService_ProjectRemoved
        End Sub

        ' A project was added.
        Private Sub projectService_ProjectAdded(ByVal sender As Object, ByVal e As SharePointProjectEventArgs)
            Dim project As ISharePointProject = CType(sender, ISharePointProject)
            Dim message As String = String.Format("The following project was added: {0}", e.Project.Name)
            project.ProjectService.Logger.WriteLine(message, LogCategory.Message)
        End Sub

        ' A project is being removed.
        Private Sub projectService_ProjectDisposing(ByVal sender As Object, ByVal e As SharePointProjectEventArgs)
            Dim project As ISharePointProject = CType(sender, ISharePointProject)
            Dim message As String = String.Format("The following project is being deleted or excluded: {0}", e.Project.Name)
            project.ProjectService.Logger.WriteLine(message, LogCategory.Message)
        End Sub

        ' A project loads in the IDE.
        Private Sub projectService_ProjectInitialized(ByVal sender As Object, ByVal e As SharePointProjectEventArgs)
            Dim project As ISharePointProject = CType(sender, ISharePointProject)
            Dim message As String = String.Format("The following project is being initialized: {0}", e.Project.Name)
            project.ProjectService.Logger.WriteLine(message, LogCategory.Message)
        End Sub

        ' A project name was changed.
        Private Sub projectService_ProjectNameChanged(ByVal sender As Object, ByVal e As NameChangedEventArgs)
            Dim project As ISharePointProject = CType(sender, ISharePointProject)
            Dim message As String = String.Format("The project named {0} was changed to {1}.", e.OldName, project.Name)
            project.ProjectService.Logger.WriteLine(message, LogCategory.Message)
        End Sub

        ' A project was removed.
        Private Sub projectService_ProjectRemoved(ByVal sender As Object, ByVal e As SharePointProjectEventArgs)
            Dim project As ISharePointProject = CType(sender, ISharePointProject)
            Dim message As String = String.Format("The following project was removed or excluded: {0}", e.Project.Name)
            project.ProjectService.Logger.WriteLine(message, LogCategory.Message)
        End Sub

        ' A project property value was changed.
        Private Sub ProjectPropertyChanged(ByVal sender As Object, ByVal e As PropertyChangedEventArgs)
            Dim project As ISharePointProject = CType(sender, ISharePointProject)
            Dim message As String = String.Format("The following property of the {0} project was changed: {1}", project.Name, e.PropertyName)
            project.ProjectService.Logger.WriteLine(message, LogCategory.Message)
        End Sub
    End Class
End Namespace


C#

using Microsoft.VisualStudio.SharePoint;
using System;
using System.ComponentModel;
using System.ComponentModel.Composition;

namespace Contoso.SPEventsExample
{
    [Export(typeof(ISharePointProjectExtension))]
    internal class SPEvents : ISharePointProjectExtension
    {
        public void Initialize(ISharePointProjectService projectService)
        {
            // Handle events for when a project property value is changed.
            projectService.ProjectPropertyChanged += ProjectPropertyChanged;            
            // Handle events for when a project is added to the solution.
            projectService.ProjectAdded +=
                new EventHandler<SharePointProjectEventArgs>(projectService_ProjectAdded);
            // Handle events for when a project is being removed or excluded from the solution (disposed).
            projectService.ProjectDisposing +=
                new EventHandler<SharePointProjectEventArgs>(projectService_ProjectDisposing);
            // Handle events for when a project is initialized.
            projectService.ProjectInitialized +=
                new EventHandler<SharePointProjectEventArgs>(projectService_ProjectInitialized);
            // Handle events for when a project name is changed.
            projectService.ProjectNameChanged +=
                new EventHandler<NameChangedEventArgs>(projectService_ProjectNameChanged);
            // Handle events for when a project has been removed or excluded from the solution.
            projectService.ProjectRemoved +=
                new EventHandler<SharePointProjectEventArgs>(projectService_ProjectRemoved);            
        }

        // A project was added.
        void projectService_ProjectAdded(object sender, SharePointProjectEventArgs e)
        {
            ISharePointProject project = (ISharePointProject)sender;
            string message = String.Format("The following project was added: {0}",
                    e.Project.Name);
            project.ProjectService.Logger.WriteLine(message, LogCategory.Message);
        }

        // A project is being removed.
        void projectService_ProjectDisposing(object sender, SharePointProjectEventArgs e)
        {
            ISharePointProject project = (ISharePointProject)sender;
            string message = String.Format("The following project is being deleted or excluded: {0}",
                    e.Project.Name);
            project.ProjectService.Logger.WriteLine(message, LogCategory.Message);
        }

        // A project loads in the IDE.
        void projectService_ProjectInitialized(object sender, SharePointProjectEventArgs e)
        {
            ISharePointProject project = (ISharePointProject)sender;
            string message = String.Format("The following project is being initialized: {0}",
                    e.Project.Name);
            project.ProjectService.Logger.WriteLine(message, LogCategory.Message);
        }

        // A project name was changed.
        void projectService_ProjectNameChanged(object sender, NameChangedEventArgs e)
        {
            ISharePointProject project = (ISharePointProject)sender;
            string message = String.Format("The project named {0} was changed to {1}.",
                    e.OldName, project.Name);
            project.ProjectService.Logger.WriteLine(message, LogCategory.Message);
        }

        // A project was removed.
        void projectService_ProjectRemoved(object sender, SharePointProjectEventArgs e)
        {
            ISharePointProject project = (ISharePointProject)sender;

            string message = String.Format("The following project was removed or excluded: {0}",
                    e.Project.Name);
            project.ProjectService.Logger.WriteLine(message, LogCategory.Message);
        }

        // A project property value was changed.
        private void ProjectPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            ISharePointProject project = (ISharePointProject)sender;
            string message = String.Format("The following property of the {0} project was changed: {1}",
                    project.Name, e.PropertyName);
            project.ProjectService.Logger.WriteLine(message, LogCategory.Message);
        }
    }
}


To test the code, create a SharePoint project in Visual Studio and then add more projects to the solution, change project property values, or delete or exclude a project. The extension notifies you of the events by writing messages to the Output window and Error List window.

Compiling the Code

This example requires references to the following assemblies:

  • Microsoft.VisualStudio.SharePoint

  • System.ComponentModel.Composition

Deploying the Extension

To deploy the extension, create a Visual Studio extension (VSIX) package for the assembly and any other files that you want to distribute with the extension. For more information, see Deploying Extensions for the SharePoint Tools in Visual Studio.

See Also

Concepts

Other Resources

How to: Handle Events for a SharePoint Project Item