2

Roslyn でメソッド呼び出しの完全修飾名を取得するにはどうすればよいですか?

たとえば Request.QueryString、 は から来ていますがSystem.Web.UI、どうすればそれを検出できますか?

同じプロジェクト内で名前空間が異なるクラス宣言はどうですか? 同じプロジェクトの他のクラスからの関数呼び出しと同様。

どんな形の助けにも感謝します、ありがとう!

4

1 に答える 1

2

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"
}
于 2016-05-31T10:50:01.903 に答える