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

时间:2015-06-18 13:40:18

标签: c# xaml roslyn

给定WPF窗口的INamedTypeSymbol,我似乎无法为XAML中定义的成员获取ISymbol(然后将其编译为自动生成的.g.cs文件的一部分)。

重现我遇到的问题,

  1. 在Visual Studio中创建一个新的空白WPF应用程序
  2. <TextBlock Name="MyTextBlock"/>添加到MainWindow.xaml
  3. 将以下代码放在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) ;
    
    }
    

    正如你所看到的,断言失败了,我似乎无法找到代表&#34; MyTextBlock&#34;的ISymbol。会员领域。

1 个答案:

答案 0 :(得分:0)

这是因为Roslyn不从元数据导入类型的私有成员。如果您将x:FieldModifier="public"添加到TextBlock,则按预期方式工作。

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