resharper/resharper-unity-visual-studio-common/src/Utils/VsUnityWorkloadDetector.cs (23 lines of code) (raw):

using System; using System.Linq; using JetBrains.Util.DevEnv; namespace JetBrains.ReSharper.Plugins.Unity.VisualStudio.Utils { public abstract class VsUnityWorkloadDetector { protected readonly Lazy<bool> IsUnityWorkloadInstalled; protected VsUnityWorkloadDetector(IVsEnvironmentStaticInformation vsEnvironment) { IsUnityWorkloadInstalled = new Lazy<bool>(() => GetIsUnityWorkloadInstalled(vsEnvironment)); } public static bool GetIsUnityWorkloadInstalled(IVsEnvironmentStaticInformation vsEnvironment) { // https://learn.microsoft.com/en-us/visualstudio/gamedev/unity/get-started/getting-started-with-visual-studio-tools-for-unity?pivots=windows // Workload marketing name: "Game development with Unity". const string VsUnityWorkloadName = "Microsoft.VisualStudio.Workload.ManagedGame"; if (DevenvHostDiscovery.ShouldIgnoreDetectedWorkloads()) return true; if (vsEnvironment.InstalledWorkloads.IsDefault) return true; // We don't know installed VS workloads, enable the plugin return vsEnvironment.InstalledWorkloads.Any(name => name.StartsWith(VsUnityWorkloadName, StringComparison.OrdinalIgnoreCase)); } } }