【问题标题】:Event on Visual Studio project creationVisual Studio 项目创建事件
【发布时间】:2014-04-23 11:56:41
【问题描述】:

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

我用谷歌搜索了很多,但没有找到任何在项目创建后触发的事件。
有什么办法吗?

【问题讨论】:

  • 我需要执行 C# 代码你这是什么意思?你能详细解释一下吗?你的意思是你想运行 C# cmd/你想在项目中插入预定义的 C# 代码/你想触发一些 C# exe 还是什么?
  • 我有使用 EnvDTE 等的 C# 代码,我想将其添加为函数或在创建项目时将调用的其他内容。
  • 我不确定,但试试这是否可以帮助你。 click this link

标签: c# events visual-studio-addins envdte visual-studio-templates


【解决方案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. 有时,在调试期间,事件根本没有触发,这让我感到困惑,但幸运的是我偶然发现了这条建议:

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

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

private CommandEvents createCmd;

【讨论】:

    【解决方案2】:

    创建一个包含您的代码的模板项目。所以其他用户可以使用你的模板而不是默认的 VS 模板。

    【讨论】:

    • 我之前试过,但是VS2010 C++模板项目只支持javascript代码,我想执行C#代码。
    【解决方案3】:

    如果您试图捕捉交互式项目的创建(即用户从菜单中选择“新建 -> 项目”),您应该能够只挂钩菜单事件。但是 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

    如果您试图捕捉非交互式项目的创建——还有很多地方可以挂钩。比我更聪明的人必须插话。

    【讨论】:

      【解决方案4】:

      问题是事件只在运行时触发。并且由于项目的创建不会在运行时发生,因此没有任何事件。

      我能想到的唯一方法是检查包含所有项目的文件夹的大小,看看它是否发生了变化,然后触发你的 C# 代码

      【讨论】:

      • 这种方式理论上可行,但有3个问题:一,我只有VS插件,我不能一直检查用户文件夹的大小(我可以执行哪个事件?) 。第二个 - 用户可以将他的项目添加到他计算机的任何位置,所以我没有要检查的特定文件夹。第三,当我检测到大小变化时,我怎么知道添加了哪个项目?也许用户添加了其他文件?
      猜你喜欢
      • 2012-02-15
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多