Skip to content

Commit ef20a8c

Browse files
authored
Adding visualizers support for VS 2026 (#149)
1 parent bea1160 commit ef20a8c

File tree

53 files changed

+292
-61
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+292
-61
lines changed

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<Company>AgileObjects Ltd</Company>
66
<Product>AgileObjects.ReadableExpressions</Product>
77
<Authors>Steve Wilkes</Authors>
8-
<Copyright>Copyright © AgileObjects Ltd 2024</Copyright>
8+
<Copyright>Copyright © AgileObjects Ltd 2025</Copyright>
99
<NeutralResourcesLanguage>en</NeutralResourcesLanguage>
1010
<RepositoryType>git</RepositoryType>
1111
<RepositoryUrl>https://github.com/AgileObjects/ReadableExpressions</RepositoryUrl>

src/ReadableExpressions.sln

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReadableExpressions.Visuali
9393
EndProject
9494
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReadableExpressions.UnitTests.Net8", "Tests\ReadableExpressions.UnitTests.Net8\ReadableExpressions.UnitTests.Net8.csproj", "{E40E25FE-C7FA-4455-87A3-15D41784706E}"
9595
EndProject
96+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReadableExpressions.Visualizers.Vs18", "Visualizers\ReadableExpressions.Visualizers.Vs18\ReadableExpressions.Visualizers.Vs18.csproj", "{727C180A-D9C1-3600-EB56-978CCC734004}"
97+
EndProject
98+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReadableExpressions.Visualizers.Vs18.ObjectSource", "Visualizers\ReadableExpressions.Visualizers.Vs18.ObjectSource\ReadableExpressions.Visualizers.Vs18.ObjectSource.csproj", "{ACA78171-2194-D12B-E147-5F2DBC77CF3D}"
99+
EndProject
96100
Global
97101
GlobalSection(SolutionConfigurationPlatforms) = preSolution
98102
Debug|Any CPU = Debug|Any CPU
@@ -364,6 +368,22 @@ Global
364368
{E40E25FE-C7FA-4455-87A3-15D41784706E}.Release|Any CPU.Build.0 = Release|Any CPU
365369
{E40E25FE-C7FA-4455-87A3-15D41784706E}.Release|x86.ActiveCfg = Release|Any CPU
366370
{E40E25FE-C7FA-4455-87A3-15D41784706E}.Release|x86.Build.0 = Release|Any CPU
371+
{727C180A-D9C1-3600-EB56-978CCC734004}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
372+
{727C180A-D9C1-3600-EB56-978CCC734004}.Debug|Any CPU.Build.0 = Debug|Any CPU
373+
{727C180A-D9C1-3600-EB56-978CCC734004}.Debug|x86.ActiveCfg = Debug|Any CPU
374+
{727C180A-D9C1-3600-EB56-978CCC734004}.Debug|x86.Build.0 = Debug|Any CPU
375+
{727C180A-D9C1-3600-EB56-978CCC734004}.Release|Any CPU.ActiveCfg = Release|Any CPU
376+
{727C180A-D9C1-3600-EB56-978CCC734004}.Release|Any CPU.Build.0 = Release|Any CPU
377+
{727C180A-D9C1-3600-EB56-978CCC734004}.Release|x86.ActiveCfg = Release|Any CPU
378+
{727C180A-D9C1-3600-EB56-978CCC734004}.Release|x86.Build.0 = Release|Any CPU
379+
{ACA78171-2194-D12B-E147-5F2DBC77CF3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
380+
{ACA78171-2194-D12B-E147-5F2DBC77CF3D}.Debug|Any CPU.Build.0 = Debug|Any CPU
381+
{ACA78171-2194-D12B-E147-5F2DBC77CF3D}.Debug|x86.ActiveCfg = Debug|Any CPU
382+
{ACA78171-2194-D12B-E147-5F2DBC77CF3D}.Debug|x86.Build.0 = Debug|Any CPU
383+
{ACA78171-2194-D12B-E147-5F2DBC77CF3D}.Release|Any CPU.ActiveCfg = Release|Any CPU
384+
{ACA78171-2194-D12B-E147-5F2DBC77CF3D}.Release|Any CPU.Build.0 = Release|Any CPU
385+
{ACA78171-2194-D12B-E147-5F2DBC77CF3D}.Release|x86.ActiveCfg = Release|Any CPU
386+
{ACA78171-2194-D12B-E147-5F2DBC77CF3D}.Release|x86.Build.0 = Release|Any CPU
367387
EndGlobalSection
368388
GlobalSection(SolutionProperties) = preSolution
369389
HideSolutionNode = FALSE
@@ -405,6 +425,8 @@ Global
405425
{CAC4A53F-D4B9-4AD5-864A-F1141ECE91DA} = {4A12EE3E-81ED-4842-A69F-9D15413DC46D}
406426
{EFF649F7-ABD2-49E6-BA1A-07BC34F89AA2} = {4A12EE3E-81ED-4842-A69F-9D15413DC46D}
407427
{E40E25FE-C7FA-4455-87A3-15D41784706E} = {E2401C71-C5F2-46FB-B5A3-E6EFB85106B9}
428+
{727C180A-D9C1-3600-EB56-978CCC734004} = {4A12EE3E-81ED-4842-A69F-9D15413DC46D}
429+
{ACA78171-2194-D12B-E147-5F2DBC77CF3D} = {4A12EE3E-81ED-4842-A69F-9D15413DC46D}
408430
EndGlobalSection
409431
GlobalSection(ExtensibilityGlobals) = postSolution
410432
SolutionGuid = {7EFE121E-7A84-43A4-8C76-7EE70DF2736A}

src/Visualizers/CommonVisualizerAssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44
[assembly: AssemblyCompany("AgileObjects")]
55
[assembly: AssemblyProduct("ReadableExpressions.Visualizers")]
66

7-
[assembly: AssemblyVersion("4.7.1")]
8-
[assembly: AssemblyFileVersion("4.7.1")]
7+
[assembly: AssemblyVersion("4.8.0")]
8+
[assembly: AssemblyFileVersion("4.8.0")]
Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
namespace AgileObjects.ReadableExpressions.Visualizers.Installer.Custom
22
{
3+
using System;
34
using System.Collections.Generic;
45
using System.IO;
56
using System.Linq;
67
using System.Reflection;
78

8-
internal static class EmbeddedResourceExtensions
9+
internal static class InstallationExtensions
910
{
1011
private static readonly int _resourceAssemblyNameLength =
1112
(typeof(Visualizer).Namespace?.Length + 1).GetValueOrDefault();
1213

14+
private static readonly string _ideDirectory =
15+
Path.DirectorySeparatorChar +
16+
"IDE" +
17+
Path.DirectorySeparatorChar;
18+
1319
public static IEnumerable<string> GetManifestResourceNamesOfType(
1420
this Assembly assembly,
1521
string extension)
@@ -46,5 +52,17 @@ public static string GetResourceContent(
4652

4753
public static string GetResourceFileName(string resourceName)
4854
=> resourceName.Substring(_resourceAssemblyNameLength);
55+
56+
public static int StartIndexOfIde(this string installPath) =>
57+
installPath.IndexOf(_ideDirectory, StringComparison.OrdinalIgnoreCase);
58+
59+
public static int EndIndexOfIde(this string installPath)
60+
{
61+
var startIndex = installPath.StartIndexOfIde();
62+
63+
return startIndex != -1
64+
? startIndex + _ideDirectory.Length
65+
: -1;
66+
}
4967
}
5068
}

src/Visualizers/Installation/ReadableExpressions.Visualizers.Installer.Custom/Post2015VsInstallation.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
namespace AgileObjects.ReadableExpressions.Visualizers.Installer.Custom;
22

3+
using Microsoft.Win32;
34
using System;
45
using System.Collections.Generic;
56
using System.Diagnostics;
67
using System.IO;
78
using System.Linq;
8-
using Microsoft.Win32;
99

10-
internal class Post2015VsInstallation : IDisposable
10+
internal sealed class Post2015VsInstallation : IDisposable
1111
{
1212
private static readonly Dictionary<int, Version> _vsVersionsByYear = Visualizer
1313
.VsYearByVersionNumber
@@ -46,14 +46,14 @@ private static string GetInstallPath(RegistryKey capabilitiesKey)
4646
return null;
4747
}
4848

49-
var indexOfIde = installPath.IndexOf("IDE", StringComparison.OrdinalIgnoreCase);
49+
var endIndexOfIde = installPath.EndIndexOfIde();
5050

51-
if (indexOfIde == -1)
51+
if (endIndexOfIde == -1)
5252
{
5353
return null;
5454
}
5555

56-
installPath = installPath.Substring(0, indexOfIde + "IDE".Length);
56+
installPath = installPath.Substring(0, endIndexOfIde);
5757

5858
if (installPath.StartsWith("@", StringComparison.Ordinal))
5959
{

src/Visualizers/Installation/ReadableExpressions.Visualizers.Installer.Custom/ReadableExpressions.Visualizers.Installer.Custom.csproj

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<AppDesignerFolder>Properties</AppDesignerFolder>
1111
<RootNamespace>AgileObjects.ReadableExpressions.Visualizers.Installer.Custom</RootNamespace>
1212
<AssemblyName>ReadableExpressions.Visualizers.Installer.Custom</AssemblyName>
13-
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
13+
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
1414
<FileAlignment>512</FileAlignment>
1515
<TargetFrameworkProfile />
1616
</PropertyGroup>
@@ -53,7 +53,7 @@
5353
<Compile Include="Visualizer.cs" />
5454
<Compile Include="VisualizerInstallerFactory.cs" />
5555
<Compile Include="VisualizerInstallationActions.cs" />
56-
<Compile Include="EmbeddedResourceExtensions.cs" />
56+
<Compile Include="InstallationExtensions.cs" />
5757
<Compile Include="Properties\AssemblyInfo.cs" />
5858
<Compile Include="VisualizerInstaller.cs" />
5959
<Compile Include="VsixManifest.cs" />
@@ -110,6 +110,12 @@
110110
<EmbeddedResource Include="..\..\VisualizerAssemblies\AgileObjects.ReadableExpressions.Visualizers.Vs17.6.ObjectSource.dll">
111111
<Link>AgileObjects.ReadableExpressions.Visualizers.Vs17.6.ObjectSource.dll</Link>
112112
</EmbeddedResource>
113+
<EmbeddedResource Include="..\..\VisualizerAssemblies\AgileObjects.ReadableExpressions.Visualizers.Vs18.dll">
114+
<Link>AgileObjects.ReadableExpressions.Visualizers.Vs18.dll</Link>
115+
</EmbeddedResource>
116+
<EmbeddedResource Include="..\..\VisualizerAssemblies\AgileObjects.ReadableExpressions.Visualizers.Vs18.ObjectSource.dll">
117+
<Link>AgileObjects.ReadableExpressions.Visualizers.Vs18.ObjectSource.dll</Link>
118+
</EmbeddedResource>
113119
<EmbeddedResource Include="..\..\VisualizerAssemblies\AgileObjects.NetStandardPolyfills.dll">
114120
<Link>AgileObjects.NetStandardPolyfills.dll</Link>
115121
</EmbeddedResource>

src/Visualizers/Installation/ReadableExpressions.Visualizers.Installer.Custom/Visualizer.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
using System.Reflection;
88
using System.Text.RegularExpressions;
99
using static System.StringComparison;
10-
using static EmbeddedResourceExtensions;
10+
using static InstallationExtensions;
1111

12-
internal class Visualizer
12+
internal sealed class Visualizer
1313
{
1414
private static readonly Assembly _thisAssembly = typeof(Visualizer).Assembly;
1515

@@ -25,7 +25,8 @@ internal class Visualizer
2525
[new(15, 0)] = 2017,
2626
[new(16, 0)] = 2019,
2727
[new(17, 0)] = 2022,
28-
[new(17, 6)] = 2022
28+
[new(17, 6)] = 2022,
29+
[new(18, 0)] = 2026
2930
};
3031

3132
private readonly Action<string> _logger;

src/Visualizers/Installation/ReadableExpressions.Visualizers.Installer.Custom/VisualizerInstaller.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
namespace AgileObjects.ReadableExpressions.Visualizers.Installer.Custom
22
{
3+
using Microsoft.Win32;
34
using System;
45
using System.IO;
5-
using Microsoft.Win32;
6-
using static System.StringComparison;
76

8-
internal class VisualizerInstaller
7+
internal sealed class VisualizerInstaller
98
{
109
private readonly Action<string> _logger;
1110
private readonly VsixManifestInstaller _vsixManifestInstaller;
@@ -30,7 +29,7 @@ public VisualizerInstaller(
3029
_visualizer = visualizer;
3130
VsId = _visualizer.VsYear.ToString();
3231

33-
var indexOfIde = vsInstallDirectory.IndexOf("IDE", OrdinalIgnoreCase);
32+
var indexOfIde = vsInstallDirectory.StartIndexOfIde();
3433
var pathToCommon7 = vsInstallDirectory.Substring(0, indexOfIde);
3534

3635
_visualizersDirectory = Path.Combine(pathToCommon7, "Packages", "Debugger", "Visualizers");

src/Visualizers/Installation/ReadableExpressions.Visualizers.Installer/Product.wxs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
3-
<Product Id="*" Version="4.7.1.0" Name="AgileObjects.ReadableExpressions.Visualizers"
3+
<Product Id="*" Version="4.8.0.0" Name="AgileObjects.ReadableExpressions.Visualizers"
44
Language="1033" Manufacturer="AgileObjects" UpgradeCode="BB7C528F-ECFD-45F2-B50C-9F0A71EC8BE9">
55

66
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

0 commit comments

Comments
 (0)