1

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

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

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

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

4

1 回答 1

3

Roslyn 公开了 AdditionalFiles 机制,您可以在其中指定一些要传递到分析器的附加文件,您需要这些文件的内容。您正在做的事情的 XAML 文件将是一个完美的例子。我们有一个在 Roslyn 本身上运行的 Roslyn 分析器,它验证我们在 API 中拥有的类型是否与附加文件(称为 PublicAPI.Shipped.txt)相匹配。如果您将此视为示例,它将向您展示如何读取额外文件。

这对解释文件没有任何帮助(您需要自己解析它们),但这至少为您提供了获取它们内容的机制。我们将为您处理从磁盘读取文件的所有麻烦以及一切。

您仍然必须首先指定您实际上希望文件包含在 AdditionalFiles 列表中。如果您查看此处,您会看到您可以指定一个 MSBuild 项目组名称,该名称将通过所有内容。

于 2015-09-04T17:47:49.227 回答