Visual Studio项目创建的事件

use*_*639 11 c# events visual-studio-addins envdte visual-studio-templates

我想在用户在Visual Studio 2010\2012中创建project\solution时添加功能.即我需要在创建新项目时执行C#代码.

我搜索了很多但是在项目创建后没有发现任何在\上触发的事件.
有没有办法做到这一点?

Yur*_*rii 1

经过一些研究并感谢@Joe Steele 提到的文章,我成功地连接了该CommandEvents.AfterExecute活动,负责项目创建:

DTE application = this.GetService(typeof(SDTE)) as DTE;
string guidVSStd97 = "{5efc7975-14bc-11cf-9b2b-00aa00573819}".ToUpper();
int cmdidNewProject = 216;

this.createCmd = application.Events.CommandEvents[guidVSStd97, cmdidNewProject];
this.createCmd.AfterExecute += this.command_AfterExecute;
Run Code Online (Sandbox Code Playgroud)

这就是委托的样子:

void command_AfterExecute(string Guid, int ID, object CustomIn, object CustomOut)
{
    // place your code here
}
Run Code Online (Sandbox Code Playgroud)

注意事项

  1. 可能最困难的部分是找到正确的guidcommandId,但本文很有帮助。

  2. 有时,在调试过程中,事件根本没有触发,这让我感到困惑,但幸运的是我偶然发现了这条建议:

SolutionEvents 对象可能会超出范围并在解决方案关闭之前被垃圾回收。要保留对此对象的引用,请在实现解决方案事件处理程序的类中声明一个私有变量。来源

因此引入私有变量解决了这个问题:

private CommandEvents createCmd;
Run Code Online (Sandbox Code Playgroud)