aboutsummaryrefslogtreecommitdiff
path: root/src/ext/VisualStudio
diff options
context:
space:
mode:
Diffstat (limited to 'src/ext/VisualStudio')
-rw-r--r--src/ext/VisualStudio/README.md4
-rw-r--r--src/ext/VisualStudio/ca/vsca.cpp81
-rw-r--r--src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/Package.wxs1
-rw-r--r--src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/VisualStudioExtensionFixture.cs13
-rw-r--r--src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/WixToolsetTest.VisualStudio.csproj2
-rw-r--r--src/ext/VisualStudio/wixlib/VS2026.wxs134
-rw-r--r--src/ext/VisualStudio/wixlib/VSExtension_Platform.wxi6
-rw-r--r--src/ext/VisualStudio/wixlib/VsixPackage.wxs26
-rw-r--r--src/ext/VisualStudio/wixlib/vs.wixproj4
9 files changed, 259 insertions, 12 deletions
diff --git a/src/ext/VisualStudio/README.md b/src/ext/VisualStudio/README.md
index bf48670c..55f5d1df 100644
--- a/src/ext/VisualStudio/README.md
+++ b/src/ext/VisualStudio/README.md
@@ -17,9 +17,9 @@ To pay the Maintenance Fee, [become a Sponsor](https://github.com/sponsors/wixto
17Add the WiX Extension as a PackageReference to your .wixproj: 17Add the WiX Extension as a PackageReference to your .wixproj:
18 18
19``` 19```
20<Project Sdk="WixToolset.Sdk/7.0.0"> 20<Project Sdk="WixToolset.Sdk/8.0.0">
21 <ItemGroup> 21 <ItemGroup>
22 <PackageReference Include="WixToolset.VisualStudio.wixext" Version="7.0.0" /> 22 <PackageReference Include="WixToolset.VisualStudio.wixext" Version="8.0.0" />
23 </ItemGroup> 23 </ItemGroup>
24</Project> 24</Project>
25``` 25```
diff --git a/src/ext/VisualStudio/ca/vsca.cpp b/src/ext/VisualStudio/ca/vsca.cpp
index 681187d6..8524629b 100644
--- a/src/ext/VisualStudio/ca/vsca.cpp
+++ b/src/ext/VisualStudio/ca/vsca.cpp
@@ -59,6 +59,12 @@ static HRESULT ProcessVS2022(
59 __in BOOL fComplete 59 __in BOOL fComplete
60 ); 60 );
61 61
62static HRESULT ProcessVS2026(
63 __in_opt ISetupInstance* pInstance,
64 __in DWORD64 qwVersion,
65 __in BOOL fComplete
66);
67
62static HRESULT SetPropertyForComponent( 68static HRESULT SetPropertyForComponent(
63 __in DWORD cComponents, 69 __in DWORD cComponents,
64 __in VS_COMPONENT_PROPERTY* rgComponents, 70 __in VS_COMPONENT_PROPERTY* rgComponents,
@@ -70,6 +76,7 @@ static VS_INSTANCE vrgInstances[] =
70 { FILEMAKEVERSION(15, 0, 0, 0), FILEMAKEVERSION(15, 0xffff, 0xffff, 0xffff), ProcessVS2017 }, 76 { FILEMAKEVERSION(15, 0, 0, 0), FILEMAKEVERSION(15, 0xffff, 0xffff, 0xffff), ProcessVS2017 },
71 { FILEMAKEVERSION(16, 0, 0, 0), FILEMAKEVERSION(16, 0xffff, 0xffff, 0xffff), ProcessVS2019 }, 77 { FILEMAKEVERSION(16, 0, 0, 0), FILEMAKEVERSION(16, 0xffff, 0xffff, 0xffff), ProcessVS2019 },
72 { FILEMAKEVERSION(17, 0, 0, 0), FILEMAKEVERSION(17, 0xffff, 0xffff, 0xffff), ProcessVS2022 }, 78 { FILEMAKEVERSION(17, 0, 0, 0), FILEMAKEVERSION(17, 0xffff, 0xffff, 0xffff), ProcessVS2022 },
79 { FILEMAKEVERSION(18, 0, 0, 0), FILEMAKEVERSION(18, 0xffff, 0xffff, 0xffff), ProcessVS2026 },
73}; 80};
74 81
75/****************************************************************** 82/******************************************************************
@@ -566,6 +573,80 @@ LExit:
566 return hr; 573 return hr;
567} 574}
568 575
576static HRESULT ProcessVS2026(
577 __in_opt ISetupInstance* pInstance,
578 __in DWORD64 qwVersion,
579 __in BOOL fComplete
580)
581{
582 static ISetupInstance* pLatest = NULL;
583 static DWORD64 qwLatest = 0;
584
585 static LPCWSTR rgwzProducts[] =
586 {
587 L"Microsoft.VisualStudio.Product.Community",
588 L"Microsoft.VisualStudio.Product.Professional",
589 L"Microsoft.VisualStudio.Product.Enterprise",
590 };
591
592 // TODO: Consider making table-driven with these defaults per-version for easy customization.
593 static VS_COMPONENT_PROPERTY rgComponents[] =
594 {
595 { L"Microsoft.VisualStudio.Component.FSharp", L"VS2026_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" },
596 { L"Microsoft.VisualStudio.Component.Roslyn.LanguageServices", L"VS2026_IDE_VB_PROJECTSYSTEM_INSTALLED" },
597 { L"Microsoft.VisualStudio.Component.Roslyn.LanguageServices", L"VS2026_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" },
598 { L"Microsoft.VisualStudio.PackageGroup.TestTools.Core", L"VS2026_IDE_VSTS_TESTSYSTEM_INSTALLED" },
599 { L"Microsoft.VisualStudio.Component.VC.CoreIde", L"VS2026_IDE_VC_PROJECTSYSTEM_INSTALLED" },
600 { L"Microsoft.VisualStudio.Component.Web", L"VS2026_IDE_VWD_PROJECTSYSTEM_INSTALLED" },
601 { L"Microsoft.VisualStudio.PackageGroup.DslRuntime", L"VS2026_IDE_MODELING_PROJECTSYSTEM_INSTALLED" },
602 };
603
604 HRESULT hr = S_OK;
605
606 if (fComplete)
607 {
608 if (pLatest)
609 {
610 hr = ProcessInstance(pLatest, L"VS2026_ROOT_FOLDER", countof(rgComponents), rgComponents);
611 ExitOnFailure(hr, "Failed to process VS2026 instance.");
612 }
613 }
614 else if (pInstance)
615 {
616 hr = InstanceInProducts(pInstance, countof(rgwzProducts), rgwzProducts);
617 ExitOnFailure(hr, "Failed to compare product IDs.");
618
619 if (S_FALSE == hr)
620 {
621 ExitFunction();
622 }
623
624 hr = InstanceIsGreater(pLatest, qwLatest, pInstance, qwVersion);
625 ExitOnFailure(hr, "Failed to compare instances.");
626
627 if (S_FALSE == hr)
628 {
629 ExitFunction();
630 }
631
632 ReleaseNullObject(pLatest);
633
634 pLatest = pInstance;
635 qwLatest = qwVersion;
636
637 // Caller will do a final Release() otherwise.
638 pLatest->AddRef();
639 }
640
641LExit:
642 if (fComplete)
643 {
644 ReleaseObject(pLatest);
645 }
646
647 return hr;
648}
649
569static HRESULT SetPropertyForComponent( 650static HRESULT SetPropertyForComponent(
570 __in DWORD cComponents, 651 __in DWORD cComponents,
571 __in VS_COMPONENT_PROPERTY* rgComponents, 652 __in VS_COMPONENT_PROPERTY* rgComponents,
diff --git a/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/Package.wxs b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/Package.wxs
index d56674e3..d827dafb 100644
--- a/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/Package.wxs
+++ b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/TestData/UsingVsixPackage/Package.wxs
@@ -6,6 +6,7 @@
6 <PropertyRef Id="VS2017DEVENV" /> 6 <PropertyRef Id="VS2017DEVENV" />
7 <PropertyRef Id="VS2019_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" /> 7 <PropertyRef Id="VS2019_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" />
8 <PropertyRef Id="VS2022_ROOT_FOLDER" /> 8 <PropertyRef Id="VS2022_ROOT_FOLDER" />
9 <PropertyRef Id="VS2026_ROOT_FOLDER" />
9 10
10 <Feature Id="ProductFeature" Title="!(loc.FeatureTitle)"> 11 <Feature Id="ProductFeature" Title="!(loc.FeatureTitle)">
11 <ComponentGroupRef Id="ProductComponents" /> 12 <ComponentGroupRef Id="ProductComponents" />
diff --git a/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/VisualStudioExtensionFixture.cs b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/VisualStudioExtensionFixture.cs
index 361f5274..bffb5e14 100644
--- a/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/VisualStudioExtensionFixture.cs
+++ b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/VisualStudioExtensionFixture.cs
@@ -36,7 +36,7 @@ namespace WixToolsetTest.VisualStudio
36 "CustomAction:Vwd2012VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2012_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t", 36 "CustomAction:Vwd2012VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2012_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t",
37 "CustomAction:Vwd2013VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2013_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t", 37 "CustomAction:Vwd2013VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2013_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t",
38 "CustomAction:Vwd2015VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2015_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t", 38 "CustomAction:Vwd2015VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2015_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t",
39 "CustomAction:Wix4VSFindInstances_X86\t257\tVSCA_X86\tFindInstances\t", 39 "CustomAction:Wix4VSFindInstances_X86\t257\tWix4VSCA_X86\tFindInstances\t",
40 }, results); 40 }, results);
41 } 41 }
42 42
@@ -64,7 +64,7 @@ namespace WixToolsetTest.VisualStudio
64 "CustomAction:Vwd2012VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2012_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t", 64 "CustomAction:Vwd2012VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2012_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t",
65 "CustomAction:Vwd2013VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2013_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t", 65 "CustomAction:Vwd2013VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2013_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t",
66 "CustomAction:Vwd2015VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2015_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t", 66 "CustomAction:Vwd2015VsixWhenVSAbsent\t51\tVS_VSIX_INSTALLER_PATH\t[VWD2015_VSIX_INSTALL_ROOT]\\Common7\\IDE\\VSIXInstaller.exe\t",
67 "CustomAction:Wix4VSFindInstances_A64\t257\tVSCA_A64\tFindInstances\t", 67 "CustomAction:Wix4VSFindInstances_A64\t257\tWix4VSCA_A64\tFindInstances\t",
68 }, customActionResults); 68 }, customActionResults);
69 69
70 var propertyResults = results.Single(r => r.StartsWith("Property:SecureCustomProperties")).Split('\t')[1].Split(';'); 70 var propertyResults = results.Single(r => r.StartsWith("Property:SecureCustomProperties")).Split('\t')[1].Split(';');
@@ -77,9 +77,18 @@ namespace WixToolsetTest.VisualStudio
77 "VS2015_VSIX_INSTALLER_PATH", 77 "VS2015_VSIX_INSTALLER_PATH",
78 "VS2017_IDE_DIR", 78 "VS2017_IDE_DIR",
79 "VS2017_ROOT_FOLDER", 79 "VS2017_ROOT_FOLDER",
80 "VS2017_VSIX_INSTALLER_PATH",
80 "VS2017DEVENV", 81 "VS2017DEVENV",
82 "VS2019_IDE_DIR",
81 "VS2019_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED", 83 "VS2019_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED",
84 "VS2019_ROOT_FOLDER",
85 "VS2019_VSIX_INSTALLER_PATH",
86 "VS2022_IDE_DIR",
82 "VS2022_ROOT_FOLDER", 87 "VS2022_ROOT_FOLDER",
88 "VS2022_VSIX_INSTALLER_PATH",
89 "VS2026_IDE_DIR",
90 "VS2026_ROOT_FOLDER",
91 "VS2026_VSIX_INSTALLER_PATH",
83 "WIX_DOWNGRADE_DETECTED", 92 "WIX_DOWNGRADE_DETECTED",
84 "WIX_UPGRADE_DETECTED", 93 "WIX_UPGRADE_DETECTED",
85 }, propertyResults); 94 }, propertyResults);
diff --git a/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/WixToolsetTest.VisualStudio.csproj b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/WixToolsetTest.VisualStudio.csproj
index 8b8f6ad9..148b963b 100644
--- a/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/WixToolsetTest.VisualStudio.csproj
+++ b/src/ext/VisualStudio/test/WixToolsetTest.VisualStudio/WixToolsetTest.VisualStudio.csproj
@@ -3,7 +3,7 @@
3 3
4<Project Sdk="MSTest.Sdk"> 4<Project Sdk="MSTest.Sdk">
5 <PropertyGroup> 5 <PropertyGroup>
6 <TargetFramework>net8.0</TargetFramework> 6 <TargetFramework>net10.0</TargetFramework>
7 <IsWixMSTestProject>true</IsWixMSTestProject> 7 <IsWixMSTestProject>true</IsWixMSTestProject>
8 </PropertyGroup> 8 </PropertyGroup>
9 9
diff --git a/src/ext/VisualStudio/wixlib/VS2026.wxs b/src/ext/VisualStudio/wixlib/VS2026.wxs
new file mode 100644
index 00000000..2cc78845
--- /dev/null
+++ b/src/ext/VisualStudio/wixlib/VS2026.wxs
@@ -0,0 +1,134 @@
1<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
2
3
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
5 <?include ..\..\caDecor.wxi ?>
6
7 <Fragment>
8 <Property Id="VS2026_ROOT_FOLDER" Secure="yes" />
9 </Fragment>
10
11 <Fragment>
12 <PropertyRef Id="VS2026_ROOT_FOLDER" />
13 <Property Id="VS2026_IDE_DIR" Secure="yes">
14 <DirectorySearch Id="VS2026DirectorySearch" Path="[VS2026_ROOT_FOLDER]">
15 <DirectorySearch Id="VS2026EnvironmentDirectorySearch" Path="Common7\IDE" Depth="1" />
16 </DirectorySearch>
17 </Property>
18 </Fragment>
19
20 <Fragment>
21 <Property Id="VS2026_EXTENSIONS_DIR" Secure="yes">
22 <DirectorySearchRef Id="VS2026EnvironmentDirectorySearch" Parent="VS2026DirectorySearch" Path="Common7\IDE">
23 <DirectorySearch Id="VS2026ExtensionsDirectorySearch" Path="Extensions" Depth="1" />
24 </DirectorySearchRef>
25 </Property>
26 </Fragment>
27
28 <Fragment>
29 <Property Id="VS2026_PROJECTTEMPLATES_DIR" Secure="yes">
30 <DirectorySearchRef Id="VS2026EnvironmentDirectorySearch" Parent="VS2026DirectorySearch" Path="Common7\IDE">
31 <DirectorySearch Id="VS2026ProjectTemplatesDirectorySearch" Path="ProjectTemplates" Depth="1" />
32 </DirectorySearchRef>
33 </Property>
34 </Fragment>
35
36 <Fragment>
37 <PropertyRef Id="VS2026_ROOT_FOLDER" />
38 <Property Id="VS2026_SCHEMAS_DIR" Secure="yes">
39 <DirectorySearch Id="VS2026XmlDirectorySearch" Path="[VS2026_ROOT_FOLDER]\Xml" Depth="1">
40 <DirectorySearch Id="VS2026XmlSchemasDirectorySearch" Path="Schemas" Depth="1" />
41 </DirectorySearch>
42 </Property>
43 </Fragment>
44
45 <Fragment>
46 <Property Id="VS2026_ITEMTEMPLATES_DIR" Secure="yes">
47 <DirectorySearchRef Id="VS2026EnvironmentDirectorySearch" Parent="VS2026DirectorySearch" Path="Common7\IDE">
48 <DirectorySearch Id="VS2026ItemTemplatesDirectorySearch" Path="ItemTemplates" Depth="1" />
49 </DirectorySearchRef>
50 </Property>
51 </Fragment>
52
53 <Fragment>
54 <PropertyRef Id="VS2026_ROOT_FOLDER" />
55 <Property Id="VS2026_BOOTSTRAPPER_PACKAGE_FOLDER" Secure="yes">
56 <DirectorySearch Id="VS2026SDKDirectorySearch" Path="[VS2026_ROOT_FOLDER]\SDK" Depth="1">
57 <DirectorySearch Id="SearchForVS2026BootstrapperPackageDirectory" Path="Bootstrapper" Depth="1" />
58 </DirectorySearch>
59 </Property>
60 </Fragment>
61
62 <Fragment>
63 <Property Id="VS2026DEVENV" Secure="yes">
64 <DirectorySearchRef Id="VS2026EnvironmentDirectorySearch" Parent="VS2026DirectorySearch" Path="Common7\IDE">
65 <FileSearch Id="VS2026DevEnvSearch" Name="devenv.exe" />
66 </DirectorySearchRef>
67 </Property>
68 </Fragment>
69
70 <Fragment>
71 <CustomAction Id="VS2026Setup" Property="VS2026DEVENV" ExeCommand="/setup" Execute="deferred" Return="ignore" Impersonate="no" />
72 <PropertyRef Id="VS2026DEVENV" />
73
74 <InstallExecuteSequence>
75 <Custom Action="VS2026Setup" Before="InstallFinalize" Overridable="yes" Condition="VS2026DEVENV" />
76 </InstallExecuteSequence>
77 </Fragment>
78
79 <Fragment>
80 <CustomAction Id="VS2026InstallVSTemplates" Property="VS2026DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />
81 <PropertyRef Id="VS2026DEVENV" />
82
83 <InstallExecuteSequence>
84 <Custom Action="VS2026InstallVSTemplates" Before="InstallFinalize" Overridable="yes" Condition="VS2026DEVENV" />
85 </InstallExecuteSequence>
86 </Fragment>
87
88 <!-- Indicates whether the Visual C# project system is installed as a part of -->
89 <!-- Visual Studio 2026 standard or higher. If this property is set, that -->
90 <!-- means Visual Studio 2026 standard or higher is installed and the Visual -->
91 <!-- C# language tools were installed as a part of VS 2026 setup. -->
92 <Fragment>
93 <Property Id="VS2026_IDE_VCSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes" />
94 </Fragment>
95
96 <!-- Indicates whether the Visual Basic project system is installed as a part of -->
97 <!-- Visual Studio 2026 standard or higher. If this property is set, that -->
98 <!-- means Visual Studio 2026 standard or higher is installed and the Visual -->
99 <!-- Basic language tools were installed as a part of VS 2026 setup. -->
100 <Fragment>
101 <Property Id="VS2026_IDE_VB_PROJECTSYSTEM_INSTALLED" Secure="yes" />
102 </Fragment>
103
104 <!-- Indicates whether the Visual Web Developer project system is installed as a part of -->
105 <!-- Visual Studio 2026 standard or higher. If this property is set, that -->
106 <!-- means Visual Studio 2026 standard or higher is installed and the Visual -->
107 <!-- Web Developer language tools were installed as a part of VS 2026 setup. -->
108 <Fragment>
109 <Property Id="VS2026_IDE_VWD_PROJECTSYSTEM_INSTALLED" Secure="yes" />
110 </Fragment>
111
112 <!-- Indicates whether the Visual C++ project system is installed as a part of -->
113 <!-- Visual Studio 2026 standard or higher. If this property is set, that -->
114 <!-- means Visual Studio 2026 standard or higher is installed and the Visual -->
115 <!-- C++ language tools were installed as a part of VS 2026 setup. -->
116 <Fragment>
117 <Property Id="VS2026_IDE_VC_PROJECTSYSTEM_INSTALLED" Secure="yes" />
118 </Fragment>
119
120 <!-- Indicates whether the Visual Studio 2026 Team Test project system is installed -->
121 <Fragment>
122 <Property Id="VS2026_IDE_VSTS_TESTSYSTEM_INSTALLED" Secure="yes" />
123 </Fragment>
124
125 <!-- Indicates whether the Visual Studio 2026 Modeling project system is installed -->
126 <Fragment>
127 <Property Id="VS2026_IDE_MODELING_PROJECTSYSTEM_INSTALLED" Secure="yes" />
128 </Fragment>
129
130 <!-- Indicates whether the Visual Studio 2026 F# project system is installed -->
131 <Fragment>
132 <Property Id="VS2026_IDE_FSHARP_PROJECTSYSTEM_INSTALLED" Secure="yes" />
133 </Fragment>
134</Wix>
diff --git a/src/ext/VisualStudio/wixlib/VSExtension_Platform.wxi b/src/ext/VisualStudio/wixlib/VSExtension_Platform.wxi
index 71c3a6c5..3242ba37 100644
--- a/src/ext/VisualStudio/wixlib/VSExtension_Platform.wxi
+++ b/src/ext/VisualStudio/wixlib/VSExtension_Platform.wxi
@@ -1,10 +1,10 @@
1<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. --> 1<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
2 2
3<Include xmlns="http://wixtoolset.org/schemas/v4/wxs"> 3<Include xmlns="http://wixtoolset.org/schemas/v4/wxs">
4 <?include ..\..\caDecor.wxi ?> 4 <?include ..\..\caDecor.wxi ?>
5 5
6 <Fragment> 6 <Fragment>
7 <CustomAction Id="$(var.Prefix)VSFindInstances$(var.Suffix)" DllEntry="FindInstances" Execute="firstSequence" Return="check" SuppressModularization="yes" BinaryRef="VSCA$(var.Suffix)" /> 7 <CustomAction Id="$(var.Prefix)VSFindInstances$(var.Suffix)" DllEntry="FindInstances" Execute="firstSequence" Return="check" SuppressModularization="yes" BinaryRef="$(var.Prefix)VSCA$(var.Suffix)" />
8 <InstallExecuteSequence> 8 <InstallExecuteSequence>
9 <Custom Action="virtual $(var.Prefix)VSFindInstances$(var.Suffix)" Before="AppSearch" /> 9 <Custom Action="virtual $(var.Prefix)VSFindInstances$(var.Suffix)" Before="AppSearch" />
10 </InstallExecuteSequence> 10 </InstallExecuteSequence>
@@ -14,6 +14,6 @@
14 </Fragment> 14 </Fragment>
15 15
16 <Fragment> 16 <Fragment>
17 <Binary Id="VSCA$(var.Suffix)" SourceFile="vsca.dll" /> 17 <Binary Id="$(var.Prefix)VSCA$(var.Suffix)" SourceFile="!(bindpath.vsca.$(var.platform))vsca.dll" />
18 </Fragment> 18 </Fragment>
19</Include> 19</Include>
diff --git a/src/ext/VisualStudio/wixlib/VsixPackage.wxs b/src/ext/VisualStudio/wixlib/VsixPackage.wxs
index 5937177b..098f81fc 100644
--- a/src/ext/VisualStudio/wixlib/VsixPackage.wxs
+++ b/src/ext/VisualStudio/wixlib/VsixPackage.wxs
@@ -1,4 +1,4 @@
1<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. --> 1<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
2 2
3 3
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> 4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
@@ -28,6 +28,30 @@
28 </RegistrySearch> 28 </RegistrySearch>
29 </Property> 29 </Property>
30 30
31 <Property Id="VS2017_VSIX_INSTALLER_PATH" Secure="yes">
32 <DirectorySearchRef Id="VS2017EnvironmentDirectorySearch" Parent="VS2017DirectorySearch" Path="Common7\IDE">
33 <FileSearch Id="WixVS2017VsixInstaller" Name="VSIXInstaller.exe" />
34 </DirectorySearchRef>
35 </Property>
36
37 <Property Id="VS2019_VSIX_INSTALLER_PATH" Secure="yes">
38 <DirectorySearchRef Id="VS2019EnvironmentDirectorySearch" Parent="VS2019DirectorySearch" Path="Common7\IDE">
39 <FileSearch Id="WixVS2019VsixInstaller" Name="VSIXInstaller.exe" />
40 </DirectorySearchRef>
41 </Property>
42
43 <Property Id="VS2022_VSIX_INSTALLER_PATH" Secure="yes">
44 <DirectorySearchRef Id="VS2022EnvironmentDirectorySearch" Parent="VS2022DirectorySearch" Path="Common7\IDE">
45 <FileSearch Id="WixVS2022VsixInstaller" Name="VSIXInstaller.exe" />
46 </DirectorySearchRef>
47 </Property>
48
49 <Property Id="VS2026_VSIX_INSTALLER_PATH" Secure="yes">
50 <DirectorySearchRef Id="VS2026EnvironmentDirectorySearch" Parent="VS2026DirectorySearch" Path="Common7\IDE">
51 <FileSearch Id="WixVS2026VsixInstaller" Name="VSIXInstaller.exe" />
52 </DirectorySearchRef>
53 </Property>
54
31 <Property Id="VS_VSIX_INSTALLER_PATH" Secure="yes" /> 55 <Property Id="VS_VSIX_INSTALLER_PATH" Secure="yes" />
32 56
33 <!-- VWD2012 registers differently than the rest of Visual Studio, so search for it in the case VS2012 is missing. --> 57 <!-- VWD2012 registers differently than the rest of Visual Studio, so search for it in the case VS2012 is missing. -->
diff --git a/src/ext/VisualStudio/wixlib/vs.wixproj b/src/ext/VisualStudio/wixlib/vs.wixproj
index e416c67a..f714609c 100644
--- a/src/ext/VisualStudio/wixlib/vs.wixproj
+++ b/src/ext/VisualStudio/wixlib/vs.wixproj
@@ -9,9 +9,7 @@
9 </PropertyGroup> 9 </PropertyGroup>
10 10
11 <ItemGroup> 11 <ItemGroup>
12 <ProjectReference Include="..\ca\vsca.vcxproj" Properties="Platform=x86" ReferenceOutputAssembly="false" /> 12 <ProjectReference Include="..\ca\vsca.vcxproj" Platforms="arm64,x86,x64" />
13 <ProjectReference Include="..\ca\vsca.vcxproj" Properties="Platform=x64" ReferenceOutputAssembly="false" />
14 <ProjectReference Include="..\ca\vsca.vcxproj" Properties="Platform=ARM64" ReferenceOutputAssembly="false" />
15 </ItemGroup> 13 </ItemGroup>
16 14
17 <ItemGroup> 15 <ItemGroup>