如何在VSIX扩展中找到打开的文件夹

时间:2018-03-14 12:54:20

标签: visual-studio-extensions vsix vs-extensibility language-server-protocol

我想写一个VSIX LSP扩展。我希望这能以最简单的方式工作 - 这似乎是使用“打开文件夹”功能打开代码文件夹,并做我的事情。

要启动LSP服务器,我需要知道打开的文件夹的目录。我如何知道Visual Studio是否处于“打开文件夹”模式(如果不是,LSP应该不启动),我如何知道该文件夹的路径(所以我可以启动LSP服务器)?

我发现https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.shell.interop.ivssolutionevents7?view=visualstudiosdk-2017看起来很有希望,因为当我打开一些特定的文件夹时我可以注册 - 这个事件告诉我已经使用了“打开文件夹”功能完美 - 如果打开文件夹,启动该文件夹的LSP。

1 个答案:

答案 0 :(得分:1)

以下代码将为您提供3条信息:

    // get solution reference from a service provider (package, etc.)
    var solution = (IVsSolution)ServiceProvider.GetService(typeof(SVsSolution));

    solution.GetSolutionInfo(out string dir, out string file, out string ops);
    // dir will contain the solution's directory path (folder in the open folder case)

    solution.GetProperty((int)__VSPROPID.VSPROPID_IsSolutionOpen, out object open);
    bool isOpen = (bool)open; // is the solution open?

    // __VSPROPID7 needs Microsoft.VisualStudio.Shell.Interop.15.0.DesignTime.dll
    solution.GetProperty((int)__VSPROPID7.VSPROPID_IsInOpenFolderMode, out object folderMode);
    bool isInFolderMode = (bool)folderMode; // is the solution in folder mode?