EnvDTE.ProjectItem から Roslyn の SyntaxTree を取得する最良の方法は何ですか? 別の方法 (Roslyn のドキュメントを 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))
アクティブなドキュメントから Roslyn のドキュメントを取得するより良い方法はありますか?