Событие создания проекта Visual Studio

Я хочу добавить функциональность, когда пользователь создает проект\решение в Visual Studio 2010\2012. т.е. мне нужно выполнить код С# при создании нового проекта.

Я много гугл, но не нашел никакого события, которое запускается после\создания проекта.
Есть ли способ сделать это?

Ответ 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, но в этой статье.

  • Иногда во время отладки событие вообще не срабатывало, что заставило меня сбить с толку, но, к счастью, я наткнулся на этот кусок советов:

Объект SolutionEvents может выйти из области видимости и собирать мусор перед закрытием решения. Чтобы сохранить ссылку на этот объект, объявите приватную переменную в классе, в котором вы реализуете обработчики событий решения. Источник

Таким образом, введение частной переменной разрешило проблему:

private CommandEvents createCmd;

Ответ 2

Создайте проект шаблона, в котором есть свой код. Таким образом, другие пользователи могут использовать ваш шаблон вместо шаблонов VS по умолчанию.

Ответ 3

Если вы пытаетесь поймать создание интерактивного проекта (т.е. пользователь выбрал в меню "Новый → Проект" ), вы должны просто подключить событие меню. Однако Visual Studio не предоставляет эти события напрямую.

Этот пост от поддержки Microsoft рассказывает о том, как обойти это. Да - статья очень старая, но я считаю, что она еще точна. Пожалуйста, поправьте меня, если я ошибаюсь. Прошло много времени с тех пор, как я создал расширение VS. Дружественное событие, вероятно, похоже на "New.Project". Вам нужно будет определить идентификатор GUID и ID.

Если вы еще не создали расширение Visual Studio, это хорошее место для начала.

Если вы пытаетесь поймать неинтерактивное создание проекта - есть намного больше мест, чтобы зацепить. Кто-то мудрее, чем мне придется звонить.

Ответ 4

Проблема в том, что события запускаются только во время выполнения. А поскольку создание проекта не выполняется во время выполнения, для этого нет событий.

Единственный способ, о котором я могу думать, - проверить размер папки, содержащей все проекты, и посмотреть, если она изменилась, а затем запустить свой код С#