2009-04-14 5 views
1

Я работаю над автоматизированным процессом для создания базового приложения, которое включает в себя общие библиотеки и проекты, проверяет все на исходное управление и настраивает базовую сборку для решения. Большинство проблем, которые я решил, кроме одного. Можно ли перехватить заданный пользователем путь для решения и проектов и изменить этот путь?Visual Studio - перехват и изменение пути при создании решений и проектов

Иными словами.

пользователь дает C:/Projects/App1 на экране создания нового проекта. Решение и проекты фактически сохраняются на C:/Projects/App1/trunk/source/App1

Я хочу изменить путь, чтобы облегчить настройку нашей TFS для непрерывных сборок. Я решил большинство других проблем, кроме этого, и кажется, что это должно быть самым простым. Я попытался понять, могу ли я изменить его в своем классе IWizard, но пока не повезло. Любые предложения будут ценны.

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

-Скотт

+0

Я не знаю, как это сделать, но я скажу, что вы собираетесь вымолить много разработчиков, если вы действительно успешны. Большинство разработчиков, которых я знаю, очень подробно относятся к тому, как им нравится организовывать свой код, и ни один из них не является таким же. Не поддерживает ли TFS разные рабочие группы? – Todd

+0

Да TFS поддерживает различные рабочие каталоги. Проблема возникает из-за ссылки на внешние проекты, 260 ограничений пути и т. Д. ... Всевозможные проблемы, связанные с автоматическими сборками. Если разные разработчики устанавливают разные способы, он может сломать (будет) прерывать непрерывную сборку. – Bomlin

ответ

0

Я не уверен, что вы делаете, но что-то подобное можно с помощью шаблонов проектов. Не уверен, что это применимо в вашем случае.

Добавлено: Что-то вроде этого:

<TemplateContent> 
    <Project> 
     <Folder> 
      <Folder> 
       <ProjectItem></ProjectItem 
      </Folder> 
     </Folder> 
    </Project> 
</TemplateContent> 
+0

Я изменил свой пост, чтобы немного подробнее. Я использую настраиваемый шаблон, который использует пользовательский класс, который реализует IWizard. Я могу сделать некоторые другие вещи с помощью IWizard, просто не уверен, что могу изменить каталог сохранения. – Bomlin

+0

XML-дескриптор шаблона определяет все папки, в которые должны быть скопированы файлы шаблонов. Почему бы просто не добавить его там? –

+0

Потому что это контролирует структуру папок внутри проекта. Мне нужно изменить структуру папок на уровне решения. Это многопроектный шаблон. – Bomlin

1

Вы shold смотрите в Guidance Automation Toolkit. Помимо всего прочего, он позволяет создавать шаблоны решений, которые позволят вам делать все, что вы упомянули, и многое другое. Вы даже можете представить пользовательский интерфейс мастера, запрашивающий параметры, с помощью которых вы можете настроить решение, с точки зрения того, какие ссылки на проект и файлы должны включать. Вы можете настроить параметры проекта всех видов; применять стандарты и т. д.

Вы можете увидеть сложный пример GAT в Service Factory. Также есть форум GAT на http://social.msdn.microsoft.com/forums/en-US/vsgatk/threads/.

GAT - отличный способ использовать расширяемость Visual Studio, чтобы действительно добиться результата.

1

Изучив еще несколько, я обнаружил, что интерфейс IWizard даже не вызывается до тех пор, пока структура папок для решения (а не проектов) уже создана. Поскольку мне нужно добиться прогресса, я решил пойти дальше и переключить его на Add-In в Visual Studio вместо чисто шаблонного процесса.

У меня уже было гораздо больше удачи, создавая решение программно, а затем добавляя в шаблонные проекты к моему решению. Мне удалось решить проблему. Я обрезал код, но это дает основную идею.

System.Type vsType = System.Type.GetTypeFromProgID ("VisualStudio.DTE.9.0"); DTE2 vs = (DTE2) System.Activator.CreateInstance (vsType, true);

soln = (Solution2) vs.Solution;

soln.Create (PathProjectRoot, SolutionName);

soln.SaveAs (SolutionName);

Спасибо всем за предложения.

+0

FYI, это именно то, что можно сделать с помощью GAT, но это может сделать еще больше. Пользователь может запустить «рецепт», который запрашивает имя решения, проект, команду или что-то еще, и решение может быть построено в нужном месте в исходном дереве, с правильными ссылками и т. Д. –