File: InProcess\Shell_InProc.cs
Web Access
Project: ..\..\..\src\VisualStudio\IntegrationTest\TestUtilities\Microsoft.VisualStudio.IntegrationTest.Utilities.csproj (Microsoft.VisualStudio.IntegrationTest.Utilities)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
 
namespace Microsoft.VisualStudio.IntegrationTest.Utilities.InProcess
{
    internal class Shell_InProc : InProcComponent
    {
        public static Shell_InProc Create() => new Shell_InProc();
 
        public bool IsUIContextActive(Guid context)
        {
            return UIContext.FromUIContextGuid(context).IsActive;
        }
 
        public Version GetVersion()
        {
            return InvokeOnUIThread(cancellationToken =>
            {
                var shell = GetGlobalService<SVsShell, IVsShell>();
                shell.GetProperty((int)__VSSPROPID5.VSSPROPID_ReleaseVersion, out var versionProperty);
 
                var fullVersion = versionProperty?.ToString() ?? string.Empty;
                var firstSpace = fullVersion.IndexOf(' ');
                if (firstSpace >= 0)
                {
                    // e.g. "17.1.31907.60 MAIN"
                    fullVersion = fullVersion[..firstSpace];
                }
 
                if (Version.TryParse(fullVersion, out var version))
                {
                    return version;
                }
 
                throw new NotSupportedException($"Unexpected version format: {versionProperty}");
            });
        }
    }
}