上下文:我们目前正在使用一种解决方案,其中所有可本地化的字符串都在XAML文件中进行翻译。为了在代码中翻译字符串,我们使用一个将从相关资源字典中搜索的函数:
MessageBox.Show(this.i18n("my message"));
我想实现一个代码分析器,它将检查“my message”字符串是否在关联的XAML文件中实际声明。问题是我在编译上下文中找不到任何可以引导我找到正确的XAML文件的内容。
如果资源管理超出了Roslyn的范围,我可以使用DTE Interface来完成我的任务,但我想知道是否有更好的解决方案。
答案 0 :(得分:2)
Roslyn公开了一个AdditionalFiles机制,您可以在其中指定一些其他文件,这些文件将传递到您需要其内容的分析器中。您正在做的XAML文件就是一个很好的例子。我们有one Roslyn analyzer that we run on Roslyn itself验证我们API中的类型是否与其他文件(称为PublicAPI.Shipped.txt)匹配。如果您将此视为示例,它将向您展示如何阅读额外文件。
这并没有给你解释文件的任何帮助(你自己需要解析它们),但这至少为你提供了获取它们内容的机制。我们将负责处理从磁盘读取文件的所有问题,并为您解决所有问题。
您仍然必须指定您实际上希望文件首先包含在AdditionalFiles列表中。如果您look here,您可以看到您可以指定将通过所有内容传递的MSBuild项目组名称。