Как создать шаблон проекта Visual Studio, который включает связанные файлы?
В Visual Studio 2010 я хочу создать шаблон проекта, который включает ссылки на два файла, которые должны существовать в системе. Один из них - общий файл AssemblyInfo.cs. Другим является файл ключа с сильным именем (*.snk).
Мне нужно, чтобы эти ссылки были относительными, потому что каждая рабочая область разработчика будет настроена по-разному. Возможно ли, чтобы шаблон проекта каким-то образом определял, где эти файлы находятся в каждой среде разработчика?
Из чтения о шаблонах это звучит, как будто они довольно статичны, поэтому я задаюсь вопросом, можно ли сделать трюки, чтобы сделать что-то вроде этого. Если ничего другого, я могу добавить фиктивные ссылки, которые вызовут ошибки компиляции и заставят разработчика зацепить эти файлы. Но если я могу сделать это для них, это будет лучше.
Ответы
Ответ 1
Вы должны установить свойство CreateInPlace в true
в vstemplate. документация говорит
Указывает, следует ли создавать проект и выполнять замену параметров в указанном месте или выполнять замену параметров во временном местоположении, а затем сохранять проект в указанном месте.
Если вы хотите, чтобы относительные пути работали, вам необходимо заменить параметр в том месте, где вы создаете проект, а не во временном месте.
Ответ 2
Microsoft подтвердила, что это ошибка с моделью расширяемости и шаблонами проектов. Мне удалось обойти это, используя IWizard. Я добавил следующий код в метод RunFinished моей реализации IWizard:
//Get linked file directory
string coreDir = Path.GetDirectoryName(MyProject.FullName);
//Data folder
ProjectItem propertiesProjectItem = slSharedProject.ProjectItems.Cast<ProjectItem>().Where(p => p.Name == "Data").First();
propertiesProjectItem.ProjectItems.AddFromFile(coreDir + @"\Service\TheFileIWantToLink.cs");
Этот код ссылается на копию файла TheFileIWantToLink.cs на мой общий проект Silverlight (slSharedProject).
Ответ 3
Вы можете попытаться интегрировать Мастер в свой шаблон проекта и установить пути к связанным файлам. Если я правильно помню, вам не нужно создавать User Integr; вам нужно только указать правильные замены в replacementsDictionary, а VS заменит значения в вашем файле шаблона. Для получения дополнительной информации см. this или this.