Событие создания проекта 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
Проблема в том, что события запускаются только во время выполнения. А поскольку создание проекта не выполняется во время выполнения, для этого нет событий.
Единственный способ, о котором я могу думать, - проверить размер папки, содержащей все проекты, и посмотреть, если она изменилась, а затем запустить свой код С#