给定WPF窗口的INamedTypeSymbol,我似乎无法为XAML中定义的成员获取ISymbol(然后将其编译为自动生成的.g.cs文件的一部分)。
重现我遇到的问题,
<TextBlock Name="MyTextBlock"/>
添加到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) ;
}
正如你所看到的,断言失败了,我似乎无法找到代表&#34; MyTextBlock&#34;的ISymbol。会员领域。
答案 0 :(得分:0)
这是因为Roslyn不从元数据导入类型的私有成员。如果您将x:FieldModifier="public"
添加到TextBlock
,则按预期方式工作。
这与WPF无关,或在.g.cs文件中生成符号。