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>
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With