Roslyn でメソッド呼び出しの完全修飾名を取得するにはどうすればよいですか?
たとえば
Request.QueryString
、 は から来ていますがSystem.Web.UI
、どうすればそれを検出できますか?
同じプロジェクト内で名前空間が異なるクラス宣言はどうですか? 同じプロジェクトの他のクラスからの関数呼び出しと同様。
どんな形の助けにも感謝します、ありがとう!
Roslyn でメソッド呼び出しの完全修飾名を取得するにはどうすればよいですか?
たとえば
Request.QueryString
、 は から来ていますがSystem.Web.UI
、どうすればそれを検出できますか?
同じプロジェクト内で名前空間が異なるクラス宣言はどうですか? 同じプロジェクトの他のクラスからの関数呼び出しと同様。
どんな形の助けにも感謝します、ありがとう!
SyntaxTree
すべてのプロジェクト ファイルに対してCompilation for all を作成する必要があります。その後、任意のノードのシンボル情報を使用できます。
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"
}