diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d20ec3b..d75cbf9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -75,8 +75,11 @@ jobs: - name: Build E2E.Templates.AutoDiscovery run: dotnet build tests/e2e/E2E.Templates.AutoDiscovery/E2E.Templates.AutoDiscovery.csproj -c Release - - name: Build E2E.Templates.PreBuiltZip - run: dotnet build tests/e2e/E2E.Templates.PreBuiltZip/E2E.Templates.PreBuiltZip.csproj -c Release + - name: Build E2E.Templates.Reference + run: dotnet build tests/e2e/E2E.Templates.Reference/E2E.Templates.Reference.csproj -c Release + + - name: Build E2E.Templates.ReferenceManual + run: dotnet build tests/e2e/E2E.Templates.ReferenceManual/E2E.Templates.ReferenceManual.csproj -c Release - name: Build E2E.Templates.ManualWithSubPath run: dotnet build tests/e2e/E2E.Templates.ManualWithSubPath/E2E.Templates.ManualWithSubPath.csproj -c Release @@ -106,6 +109,28 @@ jobs: if ($files -notcontains "NewClass.vstemplate") { throw "Missing ItemTemplates/NewClass/NewClass.vstemplate" } Write-Host "E2E.Templates.AutoDiscovery VSIX verified successfully" + - name: Verify E2E.Templates.Reference VSIX + run: | + $vsix = "tests/e2e/E2E.Templates.Reference/bin/Release/net472/E2E.Templates.Reference.vsix" + if (!(Test-Path $vsix)) { throw "VSIX not found: $vsix" } + Expand-Archive -Path $vsix -DestinationPath "tests/e2e/E2E.Templates.Reference/vsix-contents" -Force + $files = Get-ChildItem -Path "tests/e2e/E2E.Templates.Reference/vsix-contents" -Recurse | Select-Object -ExpandProperty Name + # Verify templates copied from referenced project are included + if ($files -notcontains "RefProject.vstemplate") { throw "Missing ProjectTemplates/ProjectTemplate/RefProject.vstemplate" } + if ($files -notcontains "RefItem.vstemplate") { throw "Missing ItemTemplates/ItemTemplate/RefItem.vstemplate" } + Write-Host "E2E.Templates.Reference VSIX verified successfully" + + - name: Verify E2E.Templates.ReferenceManual VSIX + run: | + $vsix = "tests/e2e/E2E.Templates.ReferenceManual/bin/Release/net472/E2E.Templates.ReferenceManual.vsix" + if (!(Test-Path $vsix)) { throw "VSIX not found: $vsix" } + Expand-Archive -Path $vsix -DestinationPath "tests/e2e/E2E.Templates.ReferenceManual/vsix-contents" -Force + $files = Get-ChildItem -Path "tests/e2e/E2E.Templates.ReferenceManual/vsix-contents" -Recurse | Select-Object -ExpandProperty Name + # Verify templates copied from referenced project are included (manual manifest) + if ($files -notcontains "RefProject.vstemplate") { throw "Missing ProjectTemplates/ProjectTemplate/RefProject.vstemplate" } + if ($files -notcontains "RefItem.vstemplate") { throw "Missing ItemTemplates/ItemTemplate/RefItem.vstemplate" } + Write-Host "E2E.Templates.ReferenceManual VSIX verified successfully" + - name: Verify E2E.AllFeatures VSIX run: | $vsix = "tests/e2e/E2E.AllFeatures/bin/Release/net472/E2E.AllFeatures.vsix" diff --git a/docs/templates.md b/docs/templates.md index 7fef526..598a96e 100644 --- a/docs/templates.md +++ b/docs/templates.md @@ -6,19 +6,30 @@ This document explains how to include Visual Studio project templates and item t The built-in VSIX Manifest Designer in Visual Studio cannot enumerate SDK-style projects when adding template assets. This is because the designer uses legacy DTE extenders that are registered for the old project system, not the Common Project System (CPS) used by SDK-style projects. -Additionally, SDK-style projects don't define the `TemplateProjectOutputGroup` and `ItemTemplateOutputGroup` MSBuild output groups that VSSDK expects for template assets. +This SDK provides MSBuild-based template support that works around these limitations by: +- Auto-discovering templates in standard folders +- Supporting cross-project template references +- Providing validation warnings for missing manifest Content entries -This SDK provides MSBuild-based template support that bypasses these limitations entirely. +## How It Works + +This SDK handles template packaging by: + +1. **Auto-discovering** templates in `ProjectTemplates/` and `ItemTemplates/` folders +2. **Including template files** in the VSIX package automatically +3. **Supporting cross-project template references** for including templates from other SDK-style projects +4. **Providing validation warnings** if your manifest is missing required Content entries + +Your manifest must contain `` entries for Visual Studio to register and display templates. The SDK includes the template files in the VSIX; the manifest entries tell VS how to find and register them. ## Item Types -The SDK provides four item types for including templates: +The SDK provides the following item types for templates: | Item Type | Description | |-----------|-------------| -| `VsixProjectTemplate` | A folder containing a `.vstemplate` file for a project template | -| `VsixItemTemplate` | A folder containing a `.vstemplate` file for an item template | -| `VsixTemplateZip` | A pre-built template zip file | +| `VsixProjectTemplate` | (Auto-discovered) A folder containing a `.vstemplate` file for a project template | +| `VsixItemTemplate` | (Auto-discovered) A folder containing a `.vstemplate` file for an item template | | `VsixTemplateReference` | Reference a template folder from another project | ## Auto-Discovery @@ -45,10 +56,12 @@ MyExtension/ MyClass.cs ``` -With this structure, no additional configuration is needed. The SDK will: +With this structure, minimal configuration is needed. The SDK will: 1. Find the templates automatically -2. Zip each template folder during build -3. Include the zips in the VSIX at `ProjectTemplates/` and `ItemTemplates/` +2. Include all template files in the VSIX +3. Warn if `` entries are missing from the manifest + +You need to add the Content entries to your manifest manually (see Manifest Configuration below). ### Disabling Auto-Discovery @@ -71,33 +84,9 @@ To use different folder names: ``` -## Manual Template Configuration - -### Folder-Based Templates - -If your templates are in non-standard locations, add them explicitly: - -```xml - - - - -``` - -### Pre-Built Template Zips - -If you have pre-built template zip files: - -```xml - - - - -``` - -### Template References +## Cross-Project Template References -To include a template from another project in your solution: +When you have templates in a separate SDK-style project that the VSIX Manifest Designer cannot enumerate, use `VsixTemplateReference`: ```xml @@ -107,6 +96,10 @@ To include a template from another project in your solution: ``` +The SDK will: +1. Copy the template folder from the referenced project to your local `ProjectTemplates/` or `ItemTemplates/` folder +2. Include the copied template files in the VSIX + The `TemplatePath` is relative to the referenced project's directory. ## Manifest Configuration @@ -120,24 +113,10 @@ Visual Studio requires `` entries in your `.vsixmanifest` to register t ``` -The SDK will emit warnings if you have templates defined but missing manifest entries: +The SDK will emit warnings if you have templates but missing manifest entries: - **VSIXSDK011**: Project templates defined but no `` in manifest - **VSIXSDK012**: Item templates defined but no `` in manifest -## Target Subfolders - -To organize templates into subfolders within the VSIX: - -```xml - - - - - - - -``` - ## Complete Example ### Project File @@ -149,7 +128,9 @@ To organize templates into subfolders within the VSIX: 1.0.0 - + + + ` entries for your templates: + ```xml @@ -206,7 +189,6 @@ To organize templates into subfolders within the VSIX: | Code | Description | |------|-------------| -| VSIXSDK010 | `VsixTemplateZip` item missing `TemplateType` metadata | | VSIXSDK011 | Project templates defined but no `` in manifest | | VSIXSDK012 | Item templates defined but no `` in manifest | | VSIXSDK013 | `VsixTemplateReference` item missing `TemplateType` metadata | @@ -217,7 +199,7 @@ To organize templates into subfolders within the VSIX: ### Templates not appearing in Visual Studio 1. Ensure your manifest has the appropriate `` entries -2. Check that the template zip files are included in the VSIX (open the .vsix as a zip) +2. Check that the template folders are included in the VSIX (open the .vsix as a zip) 3. Verify the `.vstemplate` file has correct `` or `` 4. Reset the Visual Studio template cache: delete `%LocalAppData%\Microsoft\VisualStudio\\ComponentModelCache` @@ -225,6 +207,9 @@ To organize templates into subfolders within the VSIX: Ensure the template folder exists and contains a `.vstemplate` file. For `VsixTemplateReference`, verify the `TemplatePath` is correct relative to the referenced project. -### Templates in wrong location in VSIX +### Cross-project templates not working -Check the `TargetSubPath` metadata if you're using custom paths. By default, templates are placed directly in `ProjectTemplates/` or `ItemTemplates/`. +1. Verify the referenced project path is correct +2. Check that `TemplateType` is set to `Project` or `Item` +3. Ensure `TemplatePath` points to a folder containing a `.vstemplate` file +4. The template folder will be copied to your local `ProjectTemplates/` or `ItemTemplates/` folder during build diff --git a/src/CodingWithCalvin.VsixSdk/Sdk/Sdk.Vsix.Templates.props b/src/CodingWithCalvin.VsixSdk/Sdk/Sdk.Vsix.Templates.props index eaff8a6..7f672e6 100644 --- a/src/CodingWithCalvin.VsixSdk/Sdk/Sdk.Vsix.Templates.props +++ b/src/CodingWithCalvin.VsixSdk/Sdk/Sdk.Vsix.Templates.props @@ -2,11 +2,16 @@ @@ -28,23 +33,22 @@ - - - - - diff --git a/src/CodingWithCalvin.VsixSdk/Sdk/Sdk.Vsix.Templates.targets b/src/CodingWithCalvin.VsixSdk/Sdk/Sdk.Vsix.Templates.targets index 8c5080d..d6fa714 100644 --- a/src/CodingWithCalvin.VsixSdk/Sdk/Sdk.Vsix.Templates.targets +++ b/src/CodingWithCalvin.VsixSdk/Sdk/Sdk.Vsix.Templates.targets @@ -2,23 +2,21 @@ - - - <_VsixTemplateIntermediateOutputPath>$(IntermediateOutputPath)VsixTemplates\ - + Note: VSSDK handles template packaging when the manifest contains + entries. This file provides + discovery, cross-project template support, and validation. + --> - + <_DiscoveredProjectTemplateFiles Include="$(MSBuildProjectDirectory)\$(VsixProjectTemplatesFolder)\**\*.vstemplate" @@ -27,10 +25,9 @@ Condition="Exists('$(MSBuildProjectDirectory)\$(VsixItemTemplatesFolder)')" /> - + - <_TemplateFolderName>%(_DiscoveredProjectTemplateFiles.Filename) @@ -40,173 +37,105 @@ <_TemplateFolderName>%(_DiscoveredItemTemplateFiles.Filename) - - - - $(DefaultItemExcludes);$(VsixProjectTemplatesFolder)\** - $(DefaultItemExcludes);$(VsixItemTemplatesFolder)\** - + + + <_ProjectTemplateFiles Include="$(MSBuildProjectDirectory)\$(VsixProjectTemplatesFolder)\**\*" /> + + true + $(VsixProjectTemplatesFolder)\%(RecursiveDir) + Never + + + + + <_ItemTemplateFiles Include="$(MSBuildProjectDirectory)\$(VsixItemTemplatesFolder)\**\*" /> + + true + $(VsixItemTemplatesFolder)\%(RecursiveDir) + Never + + + - + - - - - <_ZipFileName>%(VsixProjectTemplate._TemplateFolderName).zip - <_ZipOutputPath>$(_VsixTemplateIntermediateOutputPath)ProjectTemplates\%(VsixProjectTemplate.TargetSubPath) - - - - - <_ZipFileName>%(VsixItemTemplate._TemplateFolderName).zip - <_ZipOutputPath>$(_VsixTemplateIntermediateOutputPath)ItemTemplates\%(VsixItemTemplate.TargetSubPath) - - - + <_ReferencedProjectDir>$([System.IO.Path]::GetDirectoryName('%(Identity)')) <_TemplateFolderName>$([System.IO.Path]::GetFileName('%(VsixTemplateReference.TemplatePath)')) - + <_FullTemplatePath>%(VsixTemplateReference._ReferencedProjectDir)\%(VsixTemplateReference.TemplatePath) - <_ZipFileName>%(VsixTemplateReference._TemplateFolderName).zip - <_ZipOutputPath Condition="'%(VsixTemplateReference.TemplateType)' == 'Project'">$(_VsixTemplateIntermediateOutputPath)ProjectTemplates\%(VsixTemplateReference.TargetSubPath) - <_ZipOutputPath Condition="'%(VsixTemplateReference.TemplateType)' == 'Item'">$(_VsixTemplateIntermediateOutputPath)ItemTemplates\%(VsixTemplateReference.TargetSubPath) + <_TargetFolder Condition="'%(VsixTemplateReference.TemplateType)' == 'Project'">$(MSBuildProjectDirectory)\$(VsixProjectTemplatesFolder)\%(VsixTemplateReference._TemplateFolderName) + <_TargetFolder Condition="'%(VsixTemplateReference.TemplateType)' == 'Item'">$(MSBuildProjectDirectory)\$(VsixItemTemplatesFolder)\%(VsixTemplateReference._TemplateFolderName) - - - - - - - - - - - - - - + DependsOnTargets="PrepareVsixTemplateReferences" + Condition="'@(VsixTemplateReference)' != ''"> - + + + <_TemplateFilesToCopy Include="%(VsixTemplateReference._FullTemplatePath)\**\*"> + <_DestinationFolder>%(VsixTemplateReference._TargetFolder) + <_SourceFolder>%(VsixTemplateReference._FullTemplatePath) + <_VsixSubPathBase Condition="'%(VsixTemplateReference.TemplateType)' == 'Project'">$(VsixProjectTemplatesFolder)\%(VsixTemplateReference._TemplateFolderName) + <_VsixSubPathBase Condition="'%(VsixTemplateReference.TemplateType)' == 'Item'">$(VsixItemTemplatesFolder)\%(VsixTemplateReference._TemplateFolderName) + + - + + + + + + true + %(_VsixSubPathBase)\%(RecursiveDir) + Never + + - - - - - - - ProjectTemplates\%(VsixProjectTemplate.TargetSubPath) - false - - - - - ItemTemplates\%(VsixItemTemplate.TargetSubPath) - false - - - - - ProjectTemplates\%(VsixTemplateZip.TargetSubPath) - false - - - - - ItemTemplates\%(VsixTemplateZip.TargetSubPath) - false - - - - - ProjectTemplates\%(VsixTemplateReference.TargetSubPath) - false - - - - - ItemTemplates\%(VsixTemplateReference.TargetSubPath) - false - - - - - - - - - - @@ -257,12 +186,4 @@ Condition="'$(_HasItemTemplates)' == 'true' and '@(_ManifestItemTemplates)' == ''" /> - - - - - diff --git a/tests/e2e/E2E.AllFeatures/E2E.AllFeatures.csproj b/tests/e2e/E2E.AllFeatures/E2E.AllFeatures.csproj index 9956861..f87baeb 100644 --- a/tests/e2e/E2E.AllFeatures/E2E.AllFeatures.csproj +++ b/tests/e2e/E2E.AllFeatures/E2E.AllFeatures.csproj @@ -11,18 +11,13 @@ 1.0.0 - $(DefaultItemExcludes);PreBuiltSource\**;ManualTemplates\** + $(DefaultItemExcludes);ManualTemplates\** - - - - - @@ -33,13 +28,4 @@ - - - - - - diff --git a/tests/e2e/E2E.AllFeatures/PreBuiltSource/PreBuiltProject/Class1.cs b/tests/e2e/E2E.AllFeatures/PreBuiltSource/PreBuiltProject/Class1.cs deleted file mode 100644 index 4fc708c..0000000 --- a/tests/e2e/E2E.AllFeatures/PreBuiltSource/PreBuiltProject/Class1.cs +++ /dev/null @@ -1,4 +0,0 @@ -namespace $safeprojectname$ -{ - public class Class1 { } -} diff --git a/tests/e2e/E2E.Templates.PreBuiltZip/E2E.Templates.PreBuiltZip.csproj b/tests/e2e/E2E.Templates.PreBuiltZip/E2E.Templates.PreBuiltZip.csproj deleted file mode 100644 index a77135c..0000000 --- a/tests/e2e/E2E.Templates.PreBuiltZip/E2E.Templates.PreBuiltZip.csproj +++ /dev/null @@ -1,46 +0,0 @@ - - - - - 1.0.0 - - false - - $(DefaultItemExcludes);TemplateSource\** - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/e2e/E2E.Templates.PreBuiltZip/E2ETemplatesPreBuiltZipPackage.cs b/tests/e2e/E2E.Templates.PreBuiltZip/E2ETemplatesPreBuiltZipPackage.cs deleted file mode 100644 index 2df0cb9..0000000 --- a/tests/e2e/E2E.Templates.PreBuiltZip/E2ETemplatesPreBuiltZipPackage.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Runtime.InteropServices; -using System.Threading; -using Microsoft.VisualStudio.Shell; -using Task = System.Threading.Tasks.Task; - -namespace E2E.Templates.PreBuiltZip -{ - [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)] - [Guid("00000000-0000-0000-0000-00000000000A")] - public sealed class E2ETemplatesPreBuiltZipPackage : AsyncPackage - { - protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress progress) - { - await base.InitializeAsync(cancellationToken, progress); - await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken); - } - } -} diff --git a/tests/e2e/E2E.Templates.PreBuiltZip/TemplateSource/ItemTemplate/PreBuiltItem.vstemplate b/tests/e2e/E2E.Templates.PreBuiltZip/TemplateSource/ItemTemplate/PreBuiltItem.vstemplate deleted file mode 100644 index 055f055..0000000 --- a/tests/e2e/E2E.Templates.PreBuiltZip/TemplateSource/ItemTemplate/PreBuiltItem.vstemplate +++ /dev/null @@ -1,13 +0,0 @@ - - - - Pre-Built Item - An item template from a pre-built zip - CSharp - 10 - PreBuiltItem.cs - - - Item.cs - - diff --git a/tests/e2e/E2E.Templates.Reference/E2E.Templates.Reference.csproj b/tests/e2e/E2E.Templates.Reference/E2E.Templates.Reference.csproj new file mode 100644 index 0000000..c5fe1b2 --- /dev/null +++ b/tests/e2e/E2E.Templates.Reference/E2E.Templates.Reference.csproj @@ -0,0 +1,32 @@ + + + + + 1.0.0 + + $(DefaultItemExcludes);SharedTemplates\** + + + + + + + + + + + + + diff --git a/tests/e2e/E2E.Templates.Reference/E2ETemplatesReferencePackage.cs b/tests/e2e/E2E.Templates.Reference/E2ETemplatesReferencePackage.cs new file mode 100644 index 0000000..fcc6111 --- /dev/null +++ b/tests/e2e/E2E.Templates.Reference/E2ETemplatesReferencePackage.cs @@ -0,0 +1,11 @@ +using Microsoft.VisualStudio.Shell; +using System.Runtime.InteropServices; + +namespace E2E.Templates.Reference +{ + [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)] + [Guid("00000000-0000-0000-0000-000000000020")] + public sealed class E2ETemplatesReferencePackage : AsyncPackage + { + } +} diff --git a/tests/e2e/E2E.Templates.PreBuiltZip/TemplateSource/ItemTemplate/Item.cs b/tests/e2e/E2E.Templates.Reference/SharedTemplates/ItemTemplate/Item.cs similarity index 60% rename from tests/e2e/E2E.Templates.PreBuiltZip/TemplateSource/ItemTemplate/Item.cs rename to tests/e2e/E2E.Templates.Reference/SharedTemplates/ItemTemplate/Item.cs index 3889610..2adf76c 100644 --- a/tests/e2e/E2E.Templates.PreBuiltZip/TemplateSource/ItemTemplate/Item.cs +++ b/tests/e2e/E2E.Templates.Reference/SharedTemplates/ItemTemplate/Item.cs @@ -2,6 +2,5 @@ namespace $rootnamespace$ { public class $safeitemname$ { - // Created from pre-built item template } } diff --git a/tests/e2e/E2E.Templates.Reference/SharedTemplates/ItemTemplate/RefItem.vstemplate b/tests/e2e/E2E.Templates.Reference/SharedTemplates/ItemTemplate/RefItem.vstemplate new file mode 100644 index 0000000..63ddd28 --- /dev/null +++ b/tests/e2e/E2E.Templates.Reference/SharedTemplates/ItemTemplate/RefItem.vstemplate @@ -0,0 +1,12 @@ + + + + Referenced Item Template + An item template from a referenced project + CSharp + RefItem + + + Item.cs + + diff --git a/tests/e2e/E2E.Templates.PreBuiltZip/TemplateSource/ProjectTemplate/Class1.cs b/tests/e2e/E2E.Templates.Reference/SharedTemplates/ProjectTemplate/Class1.cs similarity index 100% rename from tests/e2e/E2E.Templates.PreBuiltZip/TemplateSource/ProjectTemplate/Class1.cs rename to tests/e2e/E2E.Templates.Reference/SharedTemplates/ProjectTemplate/Class1.cs diff --git a/tests/e2e/E2E.AllFeatures/PreBuiltSource/PreBuiltProject/Project.csproj b/tests/e2e/E2E.Templates.Reference/SharedTemplates/ProjectTemplate/Project.csproj similarity index 70% rename from tests/e2e/E2E.AllFeatures/PreBuiltSource/PreBuiltProject/Project.csproj rename to tests/e2e/E2E.Templates.Reference/SharedTemplates/ProjectTemplate/Project.csproj index ec2cce1..d54876d 100644 --- a/tests/e2e/E2E.AllFeatures/PreBuiltSource/PreBuiltProject/Project.csproj +++ b/tests/e2e/E2E.Templates.Reference/SharedTemplates/ProjectTemplate/Project.csproj @@ -1,5 +1,6 @@ net8.0 + $safeprojectname$ diff --git a/tests/e2e/E2E.AllFeatures/PreBuiltSource/PreBuiltProject/PreBuiltProject.vstemplate b/tests/e2e/E2E.Templates.Reference/SharedTemplates/ProjectTemplate/RefProject.vstemplate similarity index 74% rename from tests/e2e/E2E.AllFeatures/PreBuiltSource/PreBuiltProject/PreBuiltProject.vstemplate rename to tests/e2e/E2E.Templates.Reference/SharedTemplates/ProjectTemplate/RefProject.vstemplate index 8b424ad..5d2fb04 100644 --- a/tests/e2e/E2E.AllFeatures/PreBuiltSource/PreBuiltProject/PreBuiltProject.vstemplate +++ b/tests/e2e/E2E.Templates.Reference/SharedTemplates/ProjectTemplate/RefProject.vstemplate @@ -1,10 +1,10 @@ - Pre-Built Project - Pre-built zip template in AllFeatures + Referenced Project Template + A project template from a referenced project CSharp - PreBuiltProject + RefProject true diff --git a/tests/e2e/E2E.Templates.Reference/SharedTemplates/SharedTemplates.csproj b/tests/e2e/E2E.Templates.Reference/SharedTemplates/SharedTemplates.csproj new file mode 100644 index 0000000..23d6163 --- /dev/null +++ b/tests/e2e/E2E.Templates.Reference/SharedTemplates/SharedTemplates.csproj @@ -0,0 +1,18 @@ + + + + + netstandard2.0 + + false + + + + + $(DefaultItemExcludes);ProjectTemplate\**;ItemTemplate\** + + + diff --git a/tests/e2e/E2E.Templates.PreBuiltZip/source.extension.vsixmanifest b/tests/e2e/E2E.Templates.Reference/source.extension.vsixmanifest similarity index 73% rename from tests/e2e/E2E.Templates.PreBuiltZip/source.extension.vsixmanifest rename to tests/e2e/E2E.Templates.Reference/source.extension.vsixmanifest index 302eb62..ab6f4d1 100644 --- a/tests/e2e/E2E.Templates.PreBuiltZip/source.extension.vsixmanifest +++ b/tests/e2e/E2E.Templates.Reference/source.extension.vsixmanifest @@ -1,9 +1,9 @@ - - E2E Templates PreBuiltZip Test - E2E test for VsixTemplateZip with pre-built zip files + + E2E Templates Reference Test + E2E test for VsixTemplateReference - cross-project template references diff --git a/tests/e2e/E2E.Templates.ReferenceManual/E2E.Templates.ReferenceManual.csproj b/tests/e2e/E2E.Templates.ReferenceManual/E2E.Templates.ReferenceManual.csproj new file mode 100644 index 0000000..e4fcbdb --- /dev/null +++ b/tests/e2e/E2E.Templates.ReferenceManual/E2E.Templates.ReferenceManual.csproj @@ -0,0 +1,31 @@ + + + + + 1.0.0 + + $(DefaultItemExcludes);SharedTemplates\** + + + + + + + + + + + + + diff --git a/tests/e2e/E2E.Templates.ReferenceManual/E2ETemplatesReferenceManualPackage.cs b/tests/e2e/E2E.Templates.ReferenceManual/E2ETemplatesReferenceManualPackage.cs new file mode 100644 index 0000000..3d96142 --- /dev/null +++ b/tests/e2e/E2E.Templates.ReferenceManual/E2ETemplatesReferenceManualPackage.cs @@ -0,0 +1,11 @@ +using Microsoft.VisualStudio.Shell; +using System.Runtime.InteropServices; + +namespace E2E.Templates.ReferenceManual +{ + [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)] + [Guid("00000000-0000-0000-0000-000000000021")] + public sealed class E2ETemplatesReferenceManualPackage : AsyncPackage + { + } +} diff --git a/tests/e2e/E2E.Templates.ReferenceManual/SharedTemplates/ItemTemplate/Item.cs b/tests/e2e/E2E.Templates.ReferenceManual/SharedTemplates/ItemTemplate/Item.cs new file mode 100644 index 0000000..2adf76c --- /dev/null +++ b/tests/e2e/E2E.Templates.ReferenceManual/SharedTemplates/ItemTemplate/Item.cs @@ -0,0 +1,6 @@ +namespace $rootnamespace$ +{ + public class $safeitemname$ + { + } +} diff --git a/tests/e2e/E2E.Templates.ReferenceManual/SharedTemplates/ItemTemplate/RefItem.vstemplate b/tests/e2e/E2E.Templates.ReferenceManual/SharedTemplates/ItemTemplate/RefItem.vstemplate new file mode 100644 index 0000000..2e14a7c --- /dev/null +++ b/tests/e2e/E2E.Templates.ReferenceManual/SharedTemplates/ItemTemplate/RefItem.vstemplate @@ -0,0 +1,12 @@ + + + + Referenced Item Template (Manual) + An item template from a referenced project (manual manifest) + CSharp + RefItem + + + Item.cs + + diff --git a/tests/e2e/E2E.Templates.ReferenceManual/SharedTemplates/ProjectTemplate/Class1.cs b/tests/e2e/E2E.Templates.ReferenceManual/SharedTemplates/ProjectTemplate/Class1.cs new file mode 100644 index 0000000..468679e --- /dev/null +++ b/tests/e2e/E2E.Templates.ReferenceManual/SharedTemplates/ProjectTemplate/Class1.cs @@ -0,0 +1,6 @@ +namespace $safeprojectname$ +{ + public class Class1 + { + } +} diff --git a/tests/e2e/E2E.Templates.PreBuiltZip/TemplateSource/ProjectTemplate/Project.csproj b/tests/e2e/E2E.Templates.ReferenceManual/SharedTemplates/ProjectTemplate/Project.csproj similarity index 62% rename from tests/e2e/E2E.Templates.PreBuiltZip/TemplateSource/ProjectTemplate/Project.csproj rename to tests/e2e/E2E.Templates.ReferenceManual/SharedTemplates/ProjectTemplate/Project.csproj index e8cd599..d54876d 100644 --- a/tests/e2e/E2E.Templates.PreBuiltZip/TemplateSource/ProjectTemplate/Project.csproj +++ b/tests/e2e/E2E.Templates.ReferenceManual/SharedTemplates/ProjectTemplate/Project.csproj @@ -1,7 +1,6 @@ net8.0 - enable - enable + $safeprojectname$ diff --git a/tests/e2e/E2E.Templates.PreBuiltZip/TemplateSource/ProjectTemplate/PreBuiltProject.vstemplate b/tests/e2e/E2E.Templates.ReferenceManual/SharedTemplates/ProjectTemplate/RefProject.vstemplate similarity index 54% rename from tests/e2e/E2E.Templates.PreBuiltZip/TemplateSource/ProjectTemplate/PreBuiltProject.vstemplate rename to tests/e2e/E2E.Templates.ReferenceManual/SharedTemplates/ProjectTemplate/RefProject.vstemplate index 6c17dd0..70b00c5 100644 --- a/tests/e2e/E2E.Templates.PreBuiltZip/TemplateSource/ProjectTemplate/PreBuiltProject.vstemplate +++ b/tests/e2e/E2E.Templates.ReferenceManual/SharedTemplates/ProjectTemplate/RefProject.vstemplate @@ -1,17 +1,15 @@ - Pre-Built Project Template - A project template from a pre-built zip + Referenced Project Template (Manual) + A project template from a referenced project (manual manifest) CSharp - 1000 - PreBuiltProject + RefProject true - true - Class1.cs + Class1.cs diff --git a/tests/e2e/E2E.Templates.ReferenceManual/SharedTemplates/SharedTemplates.csproj b/tests/e2e/E2E.Templates.ReferenceManual/SharedTemplates/SharedTemplates.csproj new file mode 100644 index 0000000..23d6163 --- /dev/null +++ b/tests/e2e/E2E.Templates.ReferenceManual/SharedTemplates/SharedTemplates.csproj @@ -0,0 +1,18 @@ + + + + + netstandard2.0 + + false + + + + + $(DefaultItemExcludes);ProjectTemplate\**;ItemTemplate\** + + + diff --git a/tests/e2e/E2E.Templates.ReferenceManual/source.extension.vsixmanifest b/tests/e2e/E2E.Templates.ReferenceManual/source.extension.vsixmanifest new file mode 100644 index 0000000..3ca269e --- /dev/null +++ b/tests/e2e/E2E.Templates.ReferenceManual/source.extension.vsixmanifest @@ -0,0 +1,24 @@ + + + + + E2E Templates Reference Manual Test + E2E test for VsixTemplateReference with manual manifest Content entries + + + + amd64 + + + + + + + + + + + + + +