J
JMI3
Guest
Hi,
I am missing something and I can not find what.
After ending a customized Project Template for VS 2017 (.Net Core), I wanted to package it as a VSIX Extension. However, no way to make it work.
Context:
The template is a multi-project template.
I have followed MSDN documentation (by the way, not really clear and precise for something else than very simple examples).
This is a the vsix strcuture:
Template structure:

Extenions.vsixmanifest:
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011">
<Metadata>
<Identity Id="ecc28489-2767-4e93-acf5-9d3c825a1e44" Version="1.0" Language="en-US" Publisher="Jon Mikel Inza" />
<DisplayName>DotNetCoreVSAPITemplate</DisplayName>
<Description xml:space="preserve">Visual Studio 2017 project template accelerating the creation of .Net Core 2.1.x API projects</Description>
<Tags>Visual Studio;Project Template;DotNetCore;API;REST</Tags>
</Metadata>
<Installation>
<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[15.0, 16.0)" />
<InstallationTarget Version="[15.0,16.0)" Id="Microsoft.VisualStudio.Pro" />
<InstallationTarget Version="[15.0,16.0)" Id="Microsoft.VisualStudio.Enterprise" />
</Installation>
<Dependencies>
<Dependency Id="Microsoft.Framework.NDP" DisplayName="Microsoft .NET Framework" Version="[4.5,)" />
</Dependencies>
<Assets>
<Asset Type="Microsoft.VisualStudio.ProjectTemplate" Path="ProjectTemplates" TargetVersion="[15.0,16.0)" />
</Assets>
<Prerequisites>
<Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="[15.0,16.0)" DisplayName="Visual Studio core editor" />
<Prerequisite Id="Microsoft.VisualStudio.Component.NuGet" Version="[15.0,16.0)" DisplayName="NuGet package manager" />
<Prerequisite Id="Microsoft.VisualStudio.Component.Roslyn.LanguageServices" Version="[15.0,16.0)" DisplayName="C# and Visual Basic" />
</Prerequisites>
</PackageManifest>
TemplateManifest0.noloc.vstman
<VSTemplateManifest Version="1.0" xmlns="http://schemas.microsoft.com/developer/vstemplatemanifest/2015">
<VSTemplateContainer TemplateType="Project">
<RelativePathOnDisk>CSharp\.NET Core\DotNetCore.API.Common</RelativePathOnDisk>
<TemplateFileName>Common.vstemplate</TemplateFileName>
<VSTemplateHeader>
<TemplateData xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<Name>DotNetCore.API.Common</Name>
<Description><No description available></Description>
<ProjectType>CSharp</ProjectType>
<ProjectSubType>
</ProjectSubType>
<SortOrder>1000</SortOrder>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>DotNetCore.API.Common</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<CreateInPlace>true</CreateInPlace>
<Icon>__TemplateIcon.ico</Icon>
</TemplateData>
</VSTemplateHeader>
</VSTemplateContainer>
<VSTemplateContainer TemplateType="Project">
<RelativePathOnDisk>CSharp\.NET Core\DotNetCore.API.DataContracts</RelativePathOnDisk>
<TemplateFileName>DataContracts.vstemplate</TemplateFileName>
<VSTemplateHeader>
<TemplateData xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<Name>DotNetCore.API.DataContracts</Name>
<Description><No description available></Description>
<ProjectType>CSharp</ProjectType>
<ProjectSubType>
</ProjectSubType>
<SortOrder>1000</SortOrder>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>DotNetCore.API.DataContracts</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<CreateInPlace>true</CreateInPlace>
<Icon>__TemplateIcon.ico</Icon>
</TemplateData>
</VSTemplateHeader>
</VSTemplateContainer>
<VSTemplateContainer TemplateType="Project">
<RelativePathOnDisk>CSharp\.NET Core\DotNetCore.API</RelativePathOnDisk>
<TemplateFileName>API.vstemplate</TemplateFileName>
<VSTemplateHeader>
<TemplateData xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<Name>DotNetCore.API</Name>
<Description><No description available></Description>
<ProjectType>CSharp</ProjectType>
<ProjectSubType>
</ProjectSubType>
<SortOrder>1000</SortOrder>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>DotNetCore.API</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<CreateInPlace>true</CreateInPlace>
<Icon>__TemplateIcon.ico</Icon>
</TemplateData>
</VSTemplateHeader>
</VSTemplateContainer>
<VSTemplateContainer TemplateType="Project">
<RelativePathOnDisk>CSharp\.NET Core\DotNetCore.IoC.Configuration</RelativePathOnDisk>
<TemplateFileName>Configuration.vstemplate</TemplateFileName>
<VSTemplateHeader>
<TemplateData xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<Name>DotNetCore.IoC.Configuration</Name>
<Description><No description available></Description>
<ProjectType>CSharp</ProjectType>
<ProjectSubType>
</ProjectSubType>
<SortOrder>1000</SortOrder>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>DotNetCore.IoC.Configuration</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<CreateInPlace>true</CreateInPlace>
<Icon>__TemplateIcon.ico</Icon>
</TemplateData>
</VSTemplateHeader>
</VSTemplateContainer>
<VSTemplateContainer TemplateType="Project">
<RelativePathOnDisk>CSharp\.NET Core\DotNetCore.Services</RelativePathOnDisk>
<TemplateFileName>Services.vstemplate</TemplateFileName>
<VSTemplateHeader>
<TemplateData xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<Name>DotNetCore.Services</Name>
<Description><No description available></Description>
<ProjectType>CSharp</ProjectType>
<ProjectSubType>
</ProjectSubType>
<SortOrder>1000</SortOrder>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>DotNetCore.Services</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<CreateInPlace>true</CreateInPlace>
<Icon>__TemplateIcon.ico</Icon>
</TemplateData>
</VSTemplateHeader>
</VSTemplateContainer>
<VSTemplateContainer TemplateType="ProjectGroup">
<RelativePathOnDisk>CSharp\.NET Core</RelativePathOnDisk>
<TemplateFileName>Root.vstemplate</TemplateFileName>
<VSTemplateHeader>
<TemplateData xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<Name>.NET Core API Solution template (Simple version)</Name>
<Description>VS template allowing to create REST APIs running on .NET Core 2.1.x (including DI, mappings, OpenAPI/Swagger, error handling).</Description>
<Icon>img.png</Icon>
<ProjectType>CSharp</ProjectType>
<DefaultName>CoreAPI</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<ShowByDefault>true</ShowByDefault>
<SortOrder>10</SortOrder>
<TemplateID>05b79cc9-2146-4716-a8e5-7e085cdd2215</TemplateID>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<FrameworkVersion>netcoreapp2.1</FrameworkVersion>
<BuildOnLoad>true</BuildOnLoad>
<CreateInPlace>true</CreateInPlace>
</TemplateData>
</VSTemplateHeader>
</VSTemplateContainer>
</VSTemplateManifest> </TemplateData>
</VSTemplateHeader>
</VSTemplateContainer>
</VSTemplateManifest>
What am I missing?
What is wrong?
VSIX file is here:
Debug
Any help will be appreciated.
Bests,
Jon
Continue reading...
I am missing something and I can not find what.
After ending a customized Project Template for VS 2017 (.Net Core), I wanted to package it as a VSIX Extension. However, no way to make it work.
Context:
- no installation error
- no error on logs
- installation folder does not contain all the template files after installation (wondering if it is normal but it does not look like)
- the extension is visible from Tools->Extensions and Updates menu
- the template is no available at File->New Project (I have been looking for it in all the items/subitems under the New Project menu)
- when I deploy the template to Documents\Visual Studio 2017\Templates\ProjectTemplates\Visual C#\.NET Core, it is visible from New Project and it works properly (I have tried deploying it as a zip file or regular files....both work)
The template is a multi-project template.
I have followed MSDN documentation (by the way, not really clear and precise for something else than very simple examples).
This is a the vsix strcuture:
- ProjectTemplates [folder]
- CSharp [folder]
- .NET Core
- [Template items according to the screenshot below]
- templateManifest0.noloc.vstman
- [Content_Types].xml
- catalog.json
- extension.visxmanifest
- manifest.json
Template structure:

Extenions.vsixmanifest:
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011">
<Metadata>
<Identity Id="ecc28489-2767-4e93-acf5-9d3c825a1e44" Version="1.0" Language="en-US" Publisher="Jon Mikel Inza" />
<DisplayName>DotNetCoreVSAPITemplate</DisplayName>
<Description xml:space="preserve">Visual Studio 2017 project template accelerating the creation of .Net Core 2.1.x API projects</Description>
<Tags>Visual Studio;Project Template;DotNetCore;API;REST</Tags>
</Metadata>
<Installation>
<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[15.0, 16.0)" />
<InstallationTarget Version="[15.0,16.0)" Id="Microsoft.VisualStudio.Pro" />
<InstallationTarget Version="[15.0,16.0)" Id="Microsoft.VisualStudio.Enterprise" />
</Installation>
<Dependencies>
<Dependency Id="Microsoft.Framework.NDP" DisplayName="Microsoft .NET Framework" Version="[4.5,)" />
</Dependencies>
<Assets>
<Asset Type="Microsoft.VisualStudio.ProjectTemplate" Path="ProjectTemplates" TargetVersion="[15.0,16.0)" />
</Assets>
<Prerequisites>
<Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="[15.0,16.0)" DisplayName="Visual Studio core editor" />
<Prerequisite Id="Microsoft.VisualStudio.Component.NuGet" Version="[15.0,16.0)" DisplayName="NuGet package manager" />
<Prerequisite Id="Microsoft.VisualStudio.Component.Roslyn.LanguageServices" Version="[15.0,16.0)" DisplayName="C# and Visual Basic" />
</Prerequisites>
</PackageManifest>
TemplateManifest0.noloc.vstman
<VSTemplateManifest Version="1.0" xmlns="http://schemas.microsoft.com/developer/vstemplatemanifest/2015">
<VSTemplateContainer TemplateType="Project">
<RelativePathOnDisk>CSharp\.NET Core\DotNetCore.API.Common</RelativePathOnDisk>
<TemplateFileName>Common.vstemplate</TemplateFileName>
<VSTemplateHeader>
<TemplateData xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<Name>DotNetCore.API.Common</Name>
<Description><No description available></Description>
<ProjectType>CSharp</ProjectType>
<ProjectSubType>
</ProjectSubType>
<SortOrder>1000</SortOrder>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>DotNetCore.API.Common</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<CreateInPlace>true</CreateInPlace>
<Icon>__TemplateIcon.ico</Icon>
</TemplateData>
</VSTemplateHeader>
</VSTemplateContainer>
<VSTemplateContainer TemplateType="Project">
<RelativePathOnDisk>CSharp\.NET Core\DotNetCore.API.DataContracts</RelativePathOnDisk>
<TemplateFileName>DataContracts.vstemplate</TemplateFileName>
<VSTemplateHeader>
<TemplateData xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<Name>DotNetCore.API.DataContracts</Name>
<Description><No description available></Description>
<ProjectType>CSharp</ProjectType>
<ProjectSubType>
</ProjectSubType>
<SortOrder>1000</SortOrder>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>DotNetCore.API.DataContracts</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<CreateInPlace>true</CreateInPlace>
<Icon>__TemplateIcon.ico</Icon>
</TemplateData>
</VSTemplateHeader>
</VSTemplateContainer>
<VSTemplateContainer TemplateType="Project">
<RelativePathOnDisk>CSharp\.NET Core\DotNetCore.API</RelativePathOnDisk>
<TemplateFileName>API.vstemplate</TemplateFileName>
<VSTemplateHeader>
<TemplateData xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<Name>DotNetCore.API</Name>
<Description><No description available></Description>
<ProjectType>CSharp</ProjectType>
<ProjectSubType>
</ProjectSubType>
<SortOrder>1000</SortOrder>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>DotNetCore.API</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<CreateInPlace>true</CreateInPlace>
<Icon>__TemplateIcon.ico</Icon>
</TemplateData>
</VSTemplateHeader>
</VSTemplateContainer>
<VSTemplateContainer TemplateType="Project">
<RelativePathOnDisk>CSharp\.NET Core\DotNetCore.IoC.Configuration</RelativePathOnDisk>
<TemplateFileName>Configuration.vstemplate</TemplateFileName>
<VSTemplateHeader>
<TemplateData xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<Name>DotNetCore.IoC.Configuration</Name>
<Description><No description available></Description>
<ProjectType>CSharp</ProjectType>
<ProjectSubType>
</ProjectSubType>
<SortOrder>1000</SortOrder>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>DotNetCore.IoC.Configuration</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<CreateInPlace>true</CreateInPlace>
<Icon>__TemplateIcon.ico</Icon>
</TemplateData>
</VSTemplateHeader>
</VSTemplateContainer>
<VSTemplateContainer TemplateType="Project">
<RelativePathOnDisk>CSharp\.NET Core\DotNetCore.Services</RelativePathOnDisk>
<TemplateFileName>Services.vstemplate</TemplateFileName>
<VSTemplateHeader>
<TemplateData xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<Name>DotNetCore.Services</Name>
<Description><No description available></Description>
<ProjectType>CSharp</ProjectType>
<ProjectSubType>
</ProjectSubType>
<SortOrder>1000</SortOrder>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>DotNetCore.Services</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<CreateInPlace>true</CreateInPlace>
<Icon>__TemplateIcon.ico</Icon>
</TemplateData>
</VSTemplateHeader>
</VSTemplateContainer>
<VSTemplateContainer TemplateType="ProjectGroup">
<RelativePathOnDisk>CSharp\.NET Core</RelativePathOnDisk>
<TemplateFileName>Root.vstemplate</TemplateFileName>
<VSTemplateHeader>
<TemplateData xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<Name>.NET Core API Solution template (Simple version)</Name>
<Description>VS template allowing to create REST APIs running on .NET Core 2.1.x (including DI, mappings, OpenAPI/Swagger, error handling).</Description>
<Icon>img.png</Icon>
<ProjectType>CSharp</ProjectType>
<DefaultName>CoreAPI</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<ShowByDefault>true</ShowByDefault>
<SortOrder>10</SortOrder>
<TemplateID>05b79cc9-2146-4716-a8e5-7e085cdd2215</TemplateID>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<FrameworkVersion>netcoreapp2.1</FrameworkVersion>
<BuildOnLoad>true</BuildOnLoad>
<CreateInPlace>true</CreateInPlace>
</TemplateData>
</VSTemplateHeader>
</VSTemplateContainer>
</VSTemplateManifest> </TemplateData>
</VSTemplateHeader>
</VSTemplateContainer>
</VSTemplateManifest>
What am I missing?
What is wrong?
VSIX file is here:
Debug
Any help will be appreciated.
Bests,
Jon
Continue reading...