我想在用户在Visual Studio 2010 \ 2012中创建project \ solution时添加功能。即我需要在创建新项目时执行C#代码。
我搜索了很多但在项目创建后没有发现任何触发的事件。
有没有办法做到这一点?
答案 0 :(得分: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;
这就是代表的样子:
void command_AfterExecute(string Guid, int ID, object CustomIn, object CustomOut)
{
// place your code here
}
备注强>:
可能最困难的部分是找到合适的guid
和commandId
,但this article有帮助。
有时候,在调试过程中,事件根本没有发生,这让我感到困惑,但幸好我偶然发现了这条建议:
解决方案关闭之前,SolutionEvents对象可能超出范围并被垃圾收集。要保留对此对象的引用,请在实现解决方案事件处理程序的类中声明一个私有变量。Source
因此引入私有变量解决了这个问题:
private CommandEvents createCmd;
答案 1 :(得分:0)
创建一个包含代码的模板项目。因此,其他用户可以使用您的模板而不是默认的VS模板。
答案 2 :(得分:0)
如果您正在尝试捕获交互式项目创建(即用户从菜单中选择“New - > Project”),您应该能够挂钩菜单事件。但是Visual Studio不直接提供这些事件。
This post from Microsoft support talks about getting around that。 是的 - 文章很旧,但我相信仍然准确。如果我错了,请纠正我。自从我创建VS扩展以来,它已经是长时间了。事件友好名称可能类似于“New.Project”。您必须弄清楚GUID和ID。
如果您之前未创建过Visual Studio扩展程序this is a good place to start。
如果您正在尝试捕获非交互式项目创建 - 还有很多地方可以挂钩。比我更聪明的人会不得不插话。
答案 3 :(得分:0)
问题是事件只在运行时触发。由于项目的创建不会在运行时发生,因此没有事件发生。
我能想到的唯一方法是检查包含所有项目的文件夹的大小,看看它是否发生了变化,然后解雇你的C#代码