C# 如何使用Roslyn获取.g.cs文件中定义的成员符号?
给定WPF窗口的INAMEDYPESYMBOL,我似乎无法获得XAML中定义的成员(然后作为自动生成的.g.cs文件的一部分进行编译)的ISymbol 为了重现我的问题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
添加到MainWindow.xamlpublic 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。