三国卡牌客户端基础资源仓库
yyl
昨天 cec146fc3fe287928e075c79ece20a20a9b16b20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/*---------------------------------------------------------------------------------------------
 *  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}");
                }
            }
        }
    }
}