Roslyn:从代码分析器访问部分类的XAML



上下文:我们目前使用的解决方案是,所有可本地化的字符串都在被翻译的XAML文件中。为了在代码中翻译字符串,我们使用一个函数从相关的资源字典中搜索:

MessageBox.Show(this.i18n("my message"));

我想实现一个代码分析器,它将检查"我的消息"字符串是否实际上在关联的XAML文件中声明。问题是,我在编译上下文中找不到任何可以引导我找到正确的XAML文件的内容。

如果资源管理超出了Roslyn的范围,我可以使用DTE接口来完成我的任务,但我想知道是否有更好的解决方案。

Roslyn公开了一个AdditionalFiles机制,在这个机制中,你可以指定一些额外的文件传递给你的分析器,你需要这些文件的内容。XAML文件就是一个很好的例子。我们有一个在Roslyn本身上运行的Roslyn分析器,它验证API中的类型是否与一个附加文件(称为PublicAPI.Shipped.txt)匹配。如果你把这个作为一个示例,它将向你展示如何读取额外的文件。

这在解释文件时没有给您任何帮助(您需要自己解析它们),但这至少为您提供了获取它们内容的机制。我们会为你处理从磁盘读取文件的所有杂事。

您仍然必须首先指定您实际上希望将这些文件包含在AdditionalFiles列表中。如果你看这里,你可以看到你可以指定一个MSBuild项目组名,它将被传递到所有东西

最新更新