梁某人

发展才是硬道理

导航

自己做的一个例子(自动生成解决方案和项目并生成项目)

using System.IO;
using System.Text;
using System.Windows.Forms;
using VSLangProj;

namespace CodeToolAddin
{
    
using System;
    
using Microsoft.Office.Core;
    
using Extensibility;
    
using System.Runtime.InteropServices;
    
using EnvDTE;

    
Read me for Add-in installation and setup information.
    
    
/// <summary>
    
///   The object for implementing an Add-in.
    
/// </summary>
    
/// <seealso class='IDTExtensibility2' />

    [GuidAttribute("C09025F7-8F9D-4BE3-BB26-413D98B0D933"), ProgId("CodeToolAddin.Connect")]
    
public class Connect : Object, Extensibility.IDTExtensibility2, IDTCommandTarget
    
{
        
/// <summary>
        
///        Implements the constructor for the Add-in object.
        
///        Place your initialization code within this method.
        
/// </summary>

        public Connect()
        
{
        }


        
/// <summary>
        
///      Implements the OnConnection method of the IDTExtensibility2 interface.
        
///      Receives notification that the Add-in is being loaded.
        
/// </summary>
        
/// <param term='application'>
        
///      Root object of the host application.
        
/// </param>
        
/// <param term='connectMode'>
        
///      Describes how the Add-in is being loaded.
        
/// </param>
        
/// <param term='addInInst'>
        
///      Object representing this Add-in.
        
/// </param>
        
/// <seealso class='IDTExtensibility2' />

        public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
        
{
            applicationObject 
= (_DTE)application;
            addInInstance 
= (AddIn)addInInst;
            
if(connectMode == Extensibility.ext_ConnectMode.ext_cm_UISetup)
            
{
                
object []contextGUIDS = new object[] { };
                Commands commands 
= applicationObject.Commands;
                _CommandBars commandBars 
= applicationObject.CommandBars;

                
// When run, the Add-in wizard prepared the registry for the Add-in.
                
// At a later time, the Add-in or its commands may become unavailable for reasons such as:
                
//   1) You moved this project to a computer other than which is was originally created on.
                
//   2) You chose 'Yes' when presented with a message asking if you wish to remove the Add-in.
                
//   3) You add new commands or modify commands already defined.
                
// You will need to re-register the Add-in by building the CodeToolAddinSetup project,
                
// right-clicking the project in the Solution Explorer, and then choosing install.
                
// Alternatively, you could execute the ReCreateCommands.reg file the Add-in Wizard generated in
                
// the project directory, or run 'devenv /setup' from a command prompt.
                try
                
{
                    Command command 
= commands.AddNamedCommand(addInInstance, "CodeToolAddin""CodeToolAddin""Executes the command for CodeToolAddin"true59ref contextGUIDS, (int)vsCommandStatus.vsCommandStatusSupported+(int)vsCommandStatus.vsCommandStatusEnabled);
                    CommandBar commandBar 
= (CommandBar)commandBars["Tools"];
                    CommandBarControl commandBarControl 
= command.AddControl(commandBar, 1);
                }

                
catch(System.Exception /*e*/)
                
{
                }

            }

            
        }


        
/// <summary>
        
///     Implements the OnDisconnection method of the IDTExtensibility2 interface.
        
///     Receives notification that the Add-in is being unloaded.
        
/// </summary>
        
/// <param term='disconnectMode'>
        
///      Describes how the Add-in is being unloaded.
        
/// </param>
        
/// <param term='custom'>
        
///      Array of parameters that are host application specific.
        
/// </param>
        
/// <seealso class='IDTExtensibility2' />

        public void OnDisconnection(Extensibility.ext_DisconnectMode disconnectMode, ref System.Array custom)
        
{
        }


        
/// <summary>
        
///      Implements the OnAddInsUpdate method of the IDTExtensibility2 interface.
        
///      Receives notification that the collection of Add-ins has changed.
        
/// </summary>
        
/// <param term='custom'>
        
///      Array of parameters that are host application specific.
        
/// </param>
        
/// <seealso class='IDTExtensibility2' />

        public void OnAddInsUpdate(ref System.Array custom)
        
{
        }


        
/// <summary>
        
///      Implements the OnStartupComplete method of the IDTExtensibility2 interface.
        
///      Receives notification that the host application has completed loading.
        
/// </summary>
        
/// <param term='custom'>
        
///      Array of parameters that are host application specific.
        
/// </param>
        
/// <seealso class='IDTExtensibility2' />

        public void OnStartupComplete(ref System.Array custom)
        
{
        }


        
/// <summary>
        
///      Implements the OnBeginShutdown method of the IDTExtensibility2 interface.
        
///      Receives notification that the host application is being unloaded.
        
/// </summary>
        
/// <param term='custom'>
        
///      Array of parameters that are host application specific.
        
/// </param>
        
/// <seealso class='IDTExtensibility2' />

        public void OnBeginShutdown(ref System.Array custom)
        
{
        }

        
        
/// <summary>
        
///      Implements the QueryStatus method of the IDTCommandTarget interface.
        
///      This is called when the command's availability is updated
        
/// </summary>
        
/// <param term='commandName'>
        
///        The name of the command to determine state for.
        
/// </param>
        
/// <param term='neededText'>
        
///        Text that is needed for the command.
        
/// </param>
        
/// <param term='status'>
        
///        The state of the command in the user interface.
        
/// </param>
        
/// <param term='commandText'>
        
///        Text requested by the neededText parameter.
        
/// </param>
        
/// <seealso class='Exec' />

        public void QueryStatus(string commandName, EnvDTE.vsCommandStatusTextWanted neededText, ref EnvDTE.vsCommandStatus status, ref object commandText)
        
{
            
if(neededText == EnvDTE.vsCommandStatusTextWanted.vsCommandStatusTextWantedNone)
            
{
                
if(commandName == "CodeToolAddin.Connect.CodeToolAddin")
                
{
                    status 
= (vsCommandStatus)vsCommandStatus.vsCommandStatusSupported|vsCommandStatus.vsCommandStatusEnabled;
                }

            }

        }


        
/// <summary>
        
///      Implements the Exec method of the IDTCommandTarget interface.
        
///      This is called when the command is invoked.
        
/// </summary>
        
/// <param term='commandName'>
        
///        The name of the command to execute.
        
/// </param>
        
/// <param term='executeOption'>
        
///        Describes how the command should be run.
        
/// </param>
        
/// <param term='varIn'>
        
///        Parameters passed from the caller to the command handler.
        
/// </param>
        
/// <param term='varOut'>
        
///        Parameters passed from the command handler to the caller.
        
/// </param>
        
/// <param term='handled'>
        
///        Informs the caller if the command was handled or not.
        
/// </param>
        
/// <seealso class='Exec' />

        public void Exec(string commandName, EnvDTE.vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled)
        
{
            handled 
= false;
            
if(executeOption == EnvDTE.vsCommandExecOption.vsCommandExecOptionDoDefault)
            
{
                
if(commandName == "CodeToolAddin.Connect.CodeToolAddin")
                
{
                    handled 
= true;
                    MessageBox.Show(applicationObject.FullName);
                    CreateProject();
                    
return;
                }

            }

        }

        
public string RenderTemplate(string templateFile, string name, string destdir)
        
{
            FileStream fs 
= new FileStream(templateFile, FileMode.Open, FileAccess.Read);
            StreamReader sr 
= new StreamReader(fs,Encoding.Default);
            
string strFile = sr.ReadToEnd();
            sr.Close();
            fs.Close();

            strFile 
= strFile.Replace("[!output SAFE_NAMESPACE_NAME]", name);
            strFile 
= strFile.Replace("[!output SAFE_CLASS_NAME]", name + "Class");

            FileStream fs2 
= new FileStream(destdir + name + ".cs", FileMode.CreateNew, FileAccess.Write);
            StreamWriter sw 
= new StreamWriter(fs2,Encoding.Default);
            sw.Write(strFile);
            sw.Close();
            fs2.Close();

            
return (destdir + name + ".cs");
        }

        
private void CreateProject()
        
{
            
string name = "TestDTEPro";
            
            Solution sol 
= applicationObject.Solution;

            sol.Create(
"f:\\temp","TestDTE");
            
string path = @"C:\Program Files\Microsoft Visual Studio .NET 2003\VC#\VC#Wizards\DefaultDll.csproj";
            Project theProject 
= sol.AddFromTemplate(path, "f:\\temp\\TestDTE", name, true);
            VSProject myVSProject 
= (VSProject)theProject.Object;
            
string templateFile = @"C:\Program Files\Microsoft Visual Studio .NET 2003\VC#\VC#Wizards\CSharpDLLWiz\Templates\2052\file1.cs";
            
string destination = @"f:\temp\TestDTE\";
            
string filename = RenderTemplate(templateFile, "TestClass", destination);            
            ProjectItem  theItem 
= myVSProject.Project.ProjectItems.AddFromFile(filename);
            myVSProject.Project.Save(destination 
+ name + ".csproj");
            myVSProject.Refresh();
            sol.SaveAs(
@"f:\temp\newsolution.sln");
            
//MessageBox.Show(theProject.FullName);        
            
            EnvDTE.Window solutionExplorer 
= applicationObject.Windows.Item(Constants.vsWindowKindSolutionExplorer);
            solutionExplorer.Visible 
= true;
            solutionExplorer.Activate();
            
            SolutionBuild sb 
= sol.SolutionBuild;
            sb.BuildProject(sb.ActiveConfiguration.Name,theProject.UniqueName,
false);
        }


        
private _DTE applicationObject;
        
private AddIn addInInstance;
        
    }

}

posted on 2006-08-31 16:03  涛仔28  阅读(533)  评论(0编辑  收藏  举报