12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- using System;
- using System.Linq;
- using Unity.CodeEditor;
-
- namespace Microsoft.Unity.VisualStudio.Editor
- {
- internal static class Cli
- {
- internal static void Log(string message)
- {
- // Use writeline here, instead of UnityEngine.Debug.Log to not include the stacktrace in the editor.log
- Console.WriteLine($"[VisualStudio.Editor.{nameof(Cli)}] {message}");
- }
-
- internal static string GetInstallationDetails(IVisualStudioInstallation installation)
- {
- return $"{installation.ToCodeEditorInstallation().Name} Path:{installation.Path}, LanguageVersionSupport:{installation.LatestLanguageVersionSupported} AnalyzersSupport:{installation.SupportsAnalyzers}";
- }
-
- internal static void GenerateSolutionWith(VisualStudioEditor vse, string installationPath)
- {
- if (vse != null && vse.TryGetVisualStudioInstallationForPath(installationPath, lookupDiscoveredInstallations: true, out var vsi))
- {
- Log($"Using {GetInstallationDetails(vsi)}");
- vse.SyncAll();
- }
- else
- {
- Log($"No Visual Studio installation found in ${installationPath}!");
- }
- }
-
- internal static void GenerateSolution()
- {
- if (CodeEditor.CurrentEditor is VisualStudioEditor vse)
- {
- Log($"Using default editor settings for Visual Studio installation");
- GenerateSolutionWith(vse, CodeEditor.CurrentEditorInstallation);
- }
- else
- {
- Log($"Visual Studio is not set as your default editor, looking for installations");
- try
- {
- var installations = Discovery
- .GetVisualStudioInstallations()
- .Cast<VisualStudioInstallation>()
- .OrderByDescending(vsi => !vsi.IsPrerelease)
- .ThenBy(vsi => vsi.Version)
- .ToArray();
-
- foreach(var vsi in installations)
- {
- Log($"Detected {GetInstallationDetails(vsi)}");
- }
-
- var installation = installations
- .FirstOrDefault();
-
- if (installation != null)
- {
- var current = CodeEditor.CurrentEditorInstallation;
- try
- {
- CodeEditor.SetExternalScriptEditor(installation.Path);
- GenerateSolutionWith(CodeEditor.CurrentEditor as VisualStudioEditor, installation.Path);
- }
- finally
- {
- CodeEditor.SetExternalScriptEditor(current);
- }
- } else
- {
- Log($"No Visual Studio installation found!");
- }
- }
- catch (Exception ex)
- {
- Log($"Error detecting Visual Studio installations: {ex}");
- }
- }
- }
- }
- }
|