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