C# 如何使用Roslyn获取.g.cs文件中定义的成员符号?

C# 如何使用Roslyn获取.g.cs文件中定义的成员符号?,c#,xaml,roslyn,C#,Xaml,Roslyn,给定WPF窗口的INAMEDYPESYMBOL,我似乎无法获得XAML中定义的成员(然后作为自动生成的.g.cs文件的一部分进行编译)的ISymbol 为了重现我的问题 在Visual Studio中创建新的空白WPF应用程序 将添加到MainWindow.xaml 将以下代码放在MainWindow.xaml.cs中: public MainWindow() { InitializeComponent(); var comp = CSharpCompilation.Create

给定WPF窗口的INAMEDYPESYMBOL,我似乎无法获得XAML中定义的成员(然后作为自动生成的.g.cs文件的一部分进行编译)的ISymbol

为了重现我的问题

  • 在Visual Studio中创建新的空白WPF应用程序
  • 添加到MainWindow.xaml
  • 将以下代码放在MainWindow.xaml.cs中:

    public MainWindow()
    {
        InitializeComponent();
        var comp = CSharpCompilation.Create("My Compilation");
        comp = comp.AddReferences(MetadataReference.CreateFromFile(GetType().Assembly.Location));
        INamedTypeSymbol mainWindow = comp.GetTypeByMetadataName(GetType().FullName);
        var members = mainWindow.GetMembers();
        Debug.Assert(members.FirstOrDefault(m => m.Name == "MyTextBlock") != null) ;
    
    }
    
    如您所见,断言失败,我似乎找不到表示“MyTextBlock”成员字段的ISymbol


  • 这是因为Roslyn不从元数据导入类型的私有成员。如果将
    x:FieldModifier=“public”
    添加到
    TextBlock
    中,它将按预期工作


    这与WPF或.g.cs文件中生成的符号无关。

    尝试将该代码放入已加载的
    事件处理程序。@Sheridan:他问的是编译时代码分析,而不是WPF。