Code for add-in
using System;
using Extensibility;
using EnvDTE;
using EnvDTE80;
using VSLangProj;
namespace MyProjectResourcesBuilder
{
public class Connect : IDTExtensibility2
{
public Connect()
{ }
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
EnvDTE.Events events = _applicationObject.Events;
buildEvents = (EnvDTE.BuildEvents)events.BuildEvents;
buildEvents.OnBuildBegin += OnBuildBegin;
}
protected void OnBuildBegin(vsBuildScope Scope, vsBuildAction Action)
{
var projects = (object[]) _applicationObject.ActiveSolutionProjects;
foreach (Project project in projects)
{
if (project.Name == "MyProjectName")
{
IterateProjectFiles((ProjectItems)project.ProjectItems);
}
}
}
private void IterateProjectFiles(ProjectItems items)
{
foreach (ProjectItem file in items)
{
if (file.Object != null && file.Object is VSProjectItem)
{
var projectItem = (VSProjectItem)file.Object;
if (projectItem.ProjectItem.Name.EndsWith(".resx"))
{
projectItem.RunCustomTool();
}
}
}
}
public void OnDisconnection(ext_DisconnectMode disconnectMode, ref Array custom)
{
buildEvents.OnBuildBegin -= OnBuildBegin;
}
public void OnAddInsUpdate(ref Array custom)
{ }
public void OnStartupComplete(ref Array custom)
{ }
public void OnBeginShutdown(ref Array custom)
{ }
private DTE2 _applicationObject;
private AddIn _addInInstance;
private BuildEvents buildEvents;
}
}