Я хотел бы иметь возможность создать Многопроектный Шаблон для решения, который содержит следующие два проекта (где интерфейс должен включать ссылку на бизнес-уровень):
<proj_name>.interface
<proj_name>.business
.
Обычно вы можете включить $safeprojectname$
, который имеет:
Имя, указанное пользователем в диалоговом окне «Новый проект».
Однако, как указано в статье Создайте шаблон визуальной студии для нескольких проектов
Проблема здесь в том, что в каждом дочернем шаблоне $ safeprojectname $ представляет имя текущего проекта. Должен быть способ передать корень $ safeprojectname $ из родительского шаблона.
Я пытаюсь реализовать решение, предложенное в этом вопросе SO Многопроектный шаблон VS 2010: ссылки между проектами, автор: использую CustomParameters
, но у меня возникают проблемы.
Моя заархивированная папка шаблонов выглядит так:
- MultiTemplate.vstemplate
- Interface
- InterfaceTemplate.vstemplate
- MyTemplate.Interface.csproj
- Business
- BusinessTemplate.vstemplate
- MyTemplate.Business.csproj
Вы можете загрузить весь каталог, но вот несколько избранных фрагментов
MultiTemplate.vstemplate
<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="ProjectGroup">
<TemplateData><!--Removed for brevity --></TemplateData>
<TemplateContent>
<CustomParameters>
<CustomParameter Name="$SolutionName$" Value="$safeprojectname$"/>
</CustomParameters>
<ProjectCollection>
<ProjectTemplateLink ProjectName="$safeprojectname$.Interface">
Interface\InterfaceTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$safeprojectname$.Business">
Business\BusinessTemplate.vstemplate
</ProjectTemplateLink>
</ProjectCollection>
</TemplateContent>
</VSTemplate>
Интерфейс \ InterfaceTemplate.vstemplate
<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
<TemplateData><!--Removed for brevity --></TemplateData>
<TemplateContent>
<Project TargetFileName="MyTemplate.Interface.csproj"
File="MyTemplate.Interface.csproj"
ReplaceParameters="true">
</Project>
</TemplateContent>
</VSTemplate>
MyTemplate.Interface.csproj
<ItemGroup>
<ProjectReference Include="..\$SolutionName$.Business\$SolutionName$.Business.csproj">
<Project>{E5511F75-5B9C-4816-B991-E09225661CF4}</Project>
<Name>MyTemplate.Business</Name>
</ProjectReference>
</ItemGroup>
Проблема
Когда я создаю новый проект, $SolutionName$
часть строки не заменяется. Вместо этого он просто остается прежним.
В: Как правильно передать эту информацию из шаблона мультипроекта в каждый из дочерних шаблонов?
Бонусные баллы, если вы сможете выяснить, как заменить значение тега <name>
, поскольку замена токенов, похоже, не работает с ним.