Как добавить строковый литерал к имени проекта в шаблоне проекта Visual Studio, используя $ safeprojectname $? - PullRequest
0 голосов
/ 27 сентября 2018

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

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

EG: Новый проект> Имя MyProject должен затем создать проект с именем MyProject.Application.

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

Вот что я сделал до сих пор:

  • Мой фактический файл csproj называется $safeprojectname$.Application
  • Пространства имен для некоторых классов в этом проекте: namespace $safeprojectname$.Application
  • При экспорте шаблона по умолчанию используется имя $safeprojectname$.Application, поэтому я переименовываю имя по умолчанию в MyProject
  • Когда я создаю новый проект из шаблона, я даю егоимя, подобное TestProject, но конечное решение содержит проект с именем TestProject вместо TestProject.Application

Вот мой файл vstemplate

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
 <TemplateData>
 <Name>$safeprojectname$.Application</Name>
 <Description>&lt;No description available&gt;</Description>
 <ProjectType>CSharp</ProjectType>
 <ProjectSubType>
 </ProjectSubType>
 <SortOrder>1000</SortOrder>
 <CreateNewFolder>true</CreateNewFolder>
 <DefaultName>3</DefaultName>
 <ProvideDefaultName>true</ProvideDefaultName>
 <LocationField>Enabled</LocationField>
 <EnableLocationBrowseButton>true</EnableLocationBrowseButton>
 <Icon>__TemplateIcon.ico</Icon>
</TemplateData>
<TemplateContent>
<Project TargetFileName="$safeprojectname$.Application.csproj" File="$safeprojectname$.Application.csproj" ReplaceParameters="true">
  <ProjectItem ReplaceParameters="true" TargetFileName="Bootstrapper.cs">Bootstrapper.cs</ProjectItem>
  <ProjectItem ReplaceParameters="true" TargetFileName="packages.config">packages.config</ProjectItem>
  <Folder Name="Properties" TargetFolderName="Properties">
    <ProjectItem ReplaceParameters="true" TargetFileName="AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>
  </Folder>
</Project>
</TemplateContent>
</VSTemplate>  

Согласноdocs атрибуты, в которые вы хотите вставить параметры, должны содержать ReplaceParameters="true".Как вы можете видеть из моего файла шаблона, у меня действительно есть этот параметр.Единственное, что упоминают в документах, это то, что пространства имен могут быть изменены так же, как элементы шаблона, но они не упоминают, что имена проектов могут быть изменены сами.

Как настроить этот шаблон таким образом, чтобы к имени, выбранному кодером для его проекта, добавлялся строковый литерал, добавленный к нему в конечном проекте?

...