在 Visual Studio 项目创建时出现的事件

11

我希望在用户在Visual Studio 2010\2012中创建新项目或解决方案时添加功能,即需要在创建新项目时执行C#代码。

我已经搜索了很多,但没有找到任何在项目创建期间被触发的事件。
有什么方法可以实现吗?


我需要执行C#代码。你的意思是什么?能否详细解释一下?你是想运行C# cmd/在项目中插入预定义的C#代码/触发某个C# exe或其他吗? - Deepak Sharma
我有一段使用EnvDTE等C#代码,并且我想把它作为一个函数或其他东西添加进去,这样在项目创建时就可以调用它。 - user3114639
我不确定,但是你可以尝试一下这个链接,也许能帮到你。点击这里 - Deepak Sharma
4个回答

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
}

注意:

  1. 可能最困难的部分是找到正确的guidcommandId,但this article有所帮助。

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

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

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

private CommandEvents createCmd;

0
创建一个模板项目,将您的代码放入其中。这样其他用户就可以使用您的模板而不是默认的VS模板。

我之前尝试过,但是VS2010 C++模板项目只支持JavaScript代码,而我想执行C#代码。 - user3114639

0

如果您正在尝试捕获交互式项目创建(即用户从菜单中选择“新建 -> 项目”),则应该能够钩住菜单事件。但是,Visual Studio不直接提供这些事件。

Microsoft支持论坛上的这篇文章谈到了绕过这个问题的方法。 是的--这篇文章非常古老,但我认为仍然准确。如果我错了,请纠正我。自从我创建VS扩展以来已经过了很长时间。事件友好名称可能类似于“New.Project”。您将不得不找出GUID和ID。

如果您之前没有创建过Visual Studio扩展,这是一个很好的起点

如果您正在尝试捕获非交互式项目创建--那么有更多的地方可以钩住。比我聪明的人会发表意见。


0
问题在于事件只会在运行时触发。由于项目的创建不是在运行时进行的,因此没有与之相关联的事件。
我能想到的唯一方法是检查包含所有项目的文件夹的大小是否发生了变化,然后触发你的 C# 代码。

这种方式在理论上可以工作,但存在三个问题:首先,我只有VS Add-In,无法一直检查用户文件夹的大小(我应该执行哪个事件?)。第二个问题是用户可以将他的项目添加到计算机的任何位置,因此我没有特定的文件夹可供检查。第三个问题是,当我检测到大小变化时,我如何知道是哪个项目添加了?而且可能用户又添加了其他文件? - user3114639

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接