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