use*_*639 11 c# events visual-studio-addins envdte visual-studio-templates
我想在用户在Visual Studio 2010\2012中创建project\solution时添加功能.即我需要在创建新项目时执行C#代码.
我搜索了很多但是在项目创建后没有发现任何在\上触发的事件.
有没有办法做到这一点?
经过一些研究并感谢@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)
注意事项:
可能最困难的部分是找到正确的guid和commandId,但本文很有帮助。
有时,在调试过程中,事件根本没有触发,这让我感到困惑,但幸运的是我偶然发现了这条建议:
SolutionEvents 对象可能会超出范围并在解决方案关闭之前被垃圾回收。要保留对此对象的引用,请在实现解决方案事件处理程序的类中声明一个私有变量。来源
因此引入私有变量解决了这个问题:
private CommandEvents createCmd;
Run Code Online (Sandbox Code Playgroud)