我正在编写Visual Studio扩展,我希望通过名称和位置获取变量的类型。
例如: 有一个C#代码:
class Program
{
static void Main(string[] args)
{
var flagMick = true;
Console.WriteLine(""Hello, World!"");
}
}
我能够与ExpressionEvaluator和DTE进行通信,我能够从快照中读取数据并了解其位置。我有具体的位置但是:
我不想“重新学习”c#解析,这就是Roslyn应该用的。
所以我希望我的扩展能够识别“FlagMick”的类型,因为它的名称和位置在屏幕上。
我如何用Roslyn做到这一点?
答案 0 :(得分:2)
使用以下代码:
var doc = point.Snapshot.GetOpenDocumentInCurrentContextWithChanges();
var model = doc.GetSemanticModelAsync().Result;
var symbol = SymbolFinder.FindSymbolAtPosition(model, point, doc.Project.Solution.Workspace);
您需要引用Microsoft.CodeAnalysis.EditorFeatures.Text.dll,您可以通过添加appropriate NuGet package来获取。