using System; using System.Collections.Generic; using Microsoft.VisualStudio.Setup.Configuration; using Cosmos.Build.Builder.Services.VisualStudioSetup; namespace Cosmos.Build.Builder.Services { internal class VisualStudioService : IVisualStudioService { private Lazy> _instances; public VisualStudioService() { _instances = new Lazy>(GetSetupInstances); } public IReadOnlyList GetInstances() => _instances.Value; private static List GetSetupInstances() { var instances = new List(); var setupConfiguration = new SetupConfiguration(); var instanceEnumerator = setupConfiguration.EnumInstances(); var setupInstance = new ISetupInstance2[1]; var count = 0; while (true) { instanceEnumerator.Next(1, setupInstance, out count); if (count == 0) { break; } instances.Add(new VisualStudioSetupInstance(setupInstance[0])); } return instances; } } }