Как создать оцененный пользовательский параметр в VSTemplate

Итак, я изменяю шаблон VS с несколькими проектами (шаблон проекта Visual Studio) и хочу установить пользовательский параметр в корневом шаблоне, который будет использоваться подшаблонами. Однако я хочу установить его на основе существующего параметра.

Так, например, это отлично работает:

<CustomParameter Name="$FaultProject$" Value="MyProject.FaultContracts"/>

Переменная $FaultProject$ заменяется на MyProject.FaultContracts, как и должно быть.

Однако это не работает:

<CustomParameter Name="$FaultProject$" Value="$safeprojectname$.FaultContracts"/>

Я ожидаю, что $safeprojectname$ будет заменено правильным значением, но это не так. Вместо этого переменная $FaultProject$ заменяется на $safeprojectname$.FaultContracts. $safeprojectname$ интерпретируется как литерал, а не как параметр.

И это несмотря на то, что в том же файле это работает именно так, как ожидалось:

<ProjectTemplateLink ProjectName="$safeprojectname$.FaultContracts">WCFFaultContract\FaultContract.vstemplate</ProjectTemplateLink>

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

В качестве альтернативы, если я могу получить параметр, содержащий значение $safeprojectname$ корневого шаблона, это также удовлетворит мою потребность (в подшаблонах $safeprojectname$ заменяется на имя подпроекта, а не на его значение). имелся в корневом шаблоне).


person Sean Worle    schedule 09.11.2011    source источник
comment
Вы когда-нибудь думали, как решить эту проблему?   -  person Robert Williams    schedule 17.02.2012
comment
Нет, я так и не нашел хорошего ответа. Похоже, как я и боялся выше, мне придется писать интерфейс IWizard. Мне придется вернуться к этому позже, так как крайние сроки проекта означают, что простое редактирование файлов проекта и решения вручную быстрее, чем написание решения IWizard. Я хочу в конце концов, так как это снова всплывет (вся суть шаблонов в первую очередь). Я бы хотел, чтобы было решение, которое решит эту проблему, не требуя от моей команды наличия дополнительного фрагмента пользовательского кода на всех их машинах для работы, но это то, что у меня осталось.   -  person Sean Worle    schedule 30.06.2012


Ответы (1)


В шаблоне с несколькими проектами вы можете иметь замещающие параметры только на уровне проекта. Корневой шаблон находится на уровне решения, и у вас в принципе не может быть там $safeprojectname$. Однако вы можете реализовать интерфейс IWizard и иметь свои собственные заменяющие параметры, заменяя их значениями, которые вы даете.

person Soundararajan    schedule 21.05.2012