1
如何獲取Roslyn方法調用的完全限定名稱?如何獲取使用Roslyn的方法調用/類聲明的全名路徑
例如, Request.QueryString
,來自System.Web.UI
,我怎麼能夠檢測到?
如何在同一個項目中的類聲明,但不同的名稱空間? 以及來自同一項目的其他類的函數調用。
感謝任何形式的幫助!
如何獲取Roslyn方法調用的完全限定名稱?如何獲取使用Roslyn的方法調用/類聲明的全名路徑
例如, Request.QueryString
,來自System.Web.UI
,我怎麼能夠檢測到?
如何在同一個項目中的類聲明,但不同的名稱空間? 以及來自同一項目的其他類的函數調用。
感謝任何形式的幫助!
您應該爲所有項目文件創建所有SyntaxTree
的編譯。之後你可以使用任何節點的符號信息:
static string Code =
@"namespace TestNamespace
{
public class Test
{
public int A { get; set; }
public int B { get; set; }
public Test(int a, int b)
{
A = a;
B = b;
}
}
}";
static void Main(string[] args)
{
var syntaxTree = CSharpSyntaxTree.ParseText(Code);
var syntaxTrees = new SyntaxTree[] { syntaxTree }; // Add SyntaxTree array from project files.
var compilation = CSharpCompilation.Create("tempAssembly", syntaxTrees);
var semanticModel = compilation.GetSemanticModel(syntaxTree);
var caretPosition = 46;
var symbol = SymbolFinder.FindSymbolAtPositionAsync(semanticModel, caretPosition, new AdhocWorkspace()).Result;
var fullName = symbol.ToString(); // fullName is "TestNamespace.Test"
}
感謝您的支持!有沒有關於符號的很好的教程/指南?羅斯林教程在幫助我理解符號及其用法方面沒有太多幫助。 –
如果我調用具有多個標識符的函數調用,例如'test.ToString()。ToUpper()。Contains(「asd」)',Roslyn的Symbol API /語義建模如何幫助我分析這個? –