I have been able to get some code from one of my colleagues and Extensibility support specialist, Ed Dore, that may help with the Toolbox control installation in Visual Studio 2005. I must remind you that the code that I post here comes with a Disclaimer.
In the code below you need to replace the following with your values:
<Path to the control dll>: Path to the dll that contains the toolbox control
<Toolbox Tabname>: Name of the Toolbox tab on which to add the controls.
HTH,
Chetan
using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;using EnvDTE;using EnvDTE80;using System.IO;namespace InstallToolboxControls{ // Definition of the IMessageFilter interface which we need to implement and // register with the CoRegisterMessageFilter API. [ComImport(), Guid("00000016-0000-0000-C000-000000000046"), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)] interface IOleMessageFilter // Renamed to avoid confusion w/ System.Windows.Forms.IMessageFilter { [PreserveSig] int HandleInComingCall(int dwCallType, IntPtr hTaskCaller, int dwTickCount, IntPtr lpInterfaceInfo); [PreserveSig] int RetryRejectedCall(IntPtr hTaskCallee, int dwTickCount, int dwRejectType); [PreserveSig] int MessagePending(IntPtr hTaskCallee, int dwTickCount, int dwPendingType); } class Program : IOleMessageFilter { [DllImport("ole32.dll")] private static extern int CoRegisterMessageFilter(IOleMessageFilter newFilter, out IOleMessageFilter oldFilter); static string ctrlPath = <Path to the control dll>; [STAThread] static void Main(string[] args) { Program program = new Program(); program.Register(); if (args[0].Equals("-Install", StringComparison.CurrentCultureIgnoreCase)) program.InstallControl(); else if (args[0].Equals("-UnInstall", StringComparison.CurrentCultureIgnoreCase)) program.UninstallControl(); program.Revoke(); // to ensure the dte object is actually released, and the devenv.exe process terminates. GC.Collect(); GC.WaitForPendingFinalizers(); } void InstallControl() { // Create an instance of the VS IDE, Type type = System.Type.GetTypeFromProgID("VisualStudio.DTE.8.0"); DTE dte = (DTE)System.Activator.CreateInstance(type, true); // create a temporary winform project; string tmpFile = Path.GetFileNameWithoutExtension(Path.GetTempFileName()); string tmpDir = string.Format("{0}{1}",Path.GetTempPath(),tmpFile); Solution2 solution = dte.Solution as Solution2; string templatePath = solution.GetProjectTemplate("WindowsApplication.zip", "CSharp"); Project proj = solution.AddFromTemplate(templatePath, tmpDir, "dummyproj", false); // add the control to the toolbox. EnvDTE.Window window = dte.Windows.Item(EnvDTE.Constants.vsWindowKindToolbox); EnvDTE.ToolBox toolbox = (EnvDTE.ToolBox)window.Object; EnvDTE.ToolBoxTab myTab = toolbox.ToolBoxTabs.Add(<Toolbox TabName>); myTab.Activate(); myTab.ToolBoxItems.Add("MyUserControl", ctrlPath, vsToolBoxItemFormat.vsToolBoxItemFormatDotNETComponent); dte.Solution.Close(false); Marshal.ReleaseComObject(dte); Console.WriteLine("Control Installed!!!"); } void UninstallControl() { Type type = System.Type.GetTypeFromProgID("VisualStudio.DTE.8.0"); DTE dte = (DTE)System.Activator.CreateInstance(type, true); EnvDTE.Window window = dte.Windows.Item(EnvDTE.Constants.vsWindowKindToolbox); EnvDTE.ToolBox toolbox = (EnvDTE.ToolBox)window.Object; EnvDTE.ToolBoxTab myTab = toolbox.ToolBoxTabs.Item(<Toolbox Tabname>); myTab.Activate(); myTab.Delete(); Marshal.ReleaseComObject(dte); Console.WriteLine("Control Uninstalled!!!"); } void Register() { IOleMessageFilter oldFilter; CoRegisterMessageFilter(this, out oldFilter); } void Revoke() { IOleMessageFilter oldFilter; CoRegisterMessageFilter(null, out oldFilter); } #region IOleMessageFilter Members public int HandleInComingCall(int dwCallType, IntPtr hTaskCaller, int dwTickCount, IntPtr lpInterfaceInfo) { return 0; //SERVERCALL_ISHANDLED } public int RetryRejectedCall(IntPtr hTaskCallee, int dwTickCount, int dwRejectType) { if (dwRejectType == 2) // SERVERCALL_RETRYLATER return 200; // wait 2 seconds and try again return -1; // cancel call } public int MessagePending(IntPtr hTaskCallee, int dwTickCount, int dwPendingType) { return 2; //PENDINGMSG_WAITDEFPROCESS } #endregion }}