小编mal*_*ger的帖子

从VSIX命令调用Roslyn

从EnvDTE.ProjectItem获取Roslyn的SyntaxTree的最佳方法是什么?我找到了另一种方法(Roslyn的Document into ProjectItem).

我从打开的文档中调用了VSIX命令,我想在那里试验Roslyn的语法树.

这段代码有效,但对我来说看起来很尴尬:

    var pi = GetProjectItem();
    var piName = pi.get_FileNames(1);

    var componentModel = (IComponentModel)Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(SComponentModel));
    var workspace = componentModel.GetService<Microsoft.VisualStudio.LanguageServices.VisualStudioWorkspace>();
    var ids = workspace.GetOpenDocumentIds();
    var id1 = ids.First(id => workspace.GetFilePath(id) == piName);

        Microsoft.CodeAnalysis.Solution sln = workspace.CurrentSolution;
        var doc = sln.GetDocument(id1);
        //var w = await doc.GetSyntaxTreeAsync();
        Microsoft.CodeAnalysis.SyntaxTree syntaxTree;
        if (doc.TryGetSyntaxTree(out syntaxTree))
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法从活动文档中获取Roslyn的文档?

vsx vsix roslyn visual-studio-package visual-studio-2015

6
推荐指数
2
解决办法
1256
查看次数