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

Итак, я изменяю шаблон проекта VS Project (шаблон проекта 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 $заменяется на имя подпроекта, а не значение, которое оно имело в корневом шаблоне).

Ответ 1

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