Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Missing folders in custom Visual Studio project template

I'm going to create a custom Visual Studio project template to avoid repeating extra work of common configuration tasks for an ASP.NET Core project like adding EntityFramework with MySQL support. So I created a new sample project for this and did an export using Project > Export template.

But when I create a new project based on my custom template, all folders like Controllers or Views are missing. Only wwwroot exists. I inspected the .vstemplate file, which seems to adding the folders correctly

  <Folder Name="wwwroot" TargetFolderName="wwwroot" />
  <Folder Name="Controllers" TargetFolderName="Controllers">

So it's not understandable for me, that wwwroot is created, but Controllers not, since they're using the exactly same directive.

The full VS template file:

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
  <TemplateData>
    <Name>AspNetCoreMySQL</Name>
    <Description>Test</Description>
    <ProjectType>CSharp</ProjectType>
    <ProjectSubType>
    </ProjectSubType>
    <SortOrder>1000</SortOrder>
    <CreateNewFolder>true</CreateNewFolder>
    <DefaultName>AspNetCoreMySQL</DefaultName>
    <ProvideDefaultName>true</ProvideDefaultName>
    <LocationField>Enabled</LocationField>
    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>
    <Icon>__TemplateIcon.ico</Icon>
  </TemplateData>
  <TemplateContent>
    <Project TargetFileName="AspNetCoreMySQL.csproj" File="AspNetCoreMySQL.csproj" ReplaceParameters="true">
      <Folder Name="Properties" TargetFolderName="Properties">
        <ProjectItem ReplaceParameters="true" TargetFileName="launchSettings.json">launchSettings.json</ProjectItem>
      </Folder>
      <Folder Name="wwwroot" TargetFolderName="wwwroot" />
      <Folder Name="Controllers" TargetFolderName="Controllers">
        <ProjectItem ReplaceParameters="true" TargetFileName="PageController.cs">PageController.cs</ProjectItem>
      </Folder>
      <ProjectItem ReplaceParameters="true" TargetFileName="Program.cs">Program.cs</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="ScaffoldingReadMe.txt">ScaffoldingReadMe.txt</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="Startup.cs">Startup.cs</ProjectItem>
    </Project>
  </TemplateContent>
</VSTemplate>
like image 408
Lion Avatar asked May 24 '17 16:05

Lion


1 Answers

This nice workaround is actual for Visual Studio 2017. Edit .vstemplate and add:

<CreateInPlace>true</CreateInPlace>

inside:

<TemplateData>...</TemplateData>

Don't forget to copy updated ZIP file to:

Documents\Visual Studio 2017\Templates\ProjectTemplates\

This should reload the template in VS. Please pay attention to @Lion comment below if you have troubles with reloading.

like image 156
Ilya Chumakov Avatar answered Sep 27 '22 20:09

Ilya Chumakov