TLDR;
我需要在我的 .NET 代码中提取对 Microsoft.Extensions.Localization.IStringLocalizer
的索引运算符的所有调用的参数的字符串值。实际上我还需要封闭类的全名。
警告:以上内容还包括我的 ASP.NET Core MVC razor View 。
基本上我的需求与 Visual Studio 中的“查找所有引用”功能非常相似。
为什么和其他想法
原因是我们欣赏使用 IStringLocalizer
的开发流程,而无需实际创建资源。此外,我们已经使用 Damien Bods 将资源文件的使用替换为数据库存储 AspNetCoreLocalization .
这使我们能够让业务专家完成所有翻译(1)无需访问网络服务器的文件系统,(2)从我们提供的一个很好的界面,以及(3)独立于开发周期。然而,为了让业务专家知道存在哪些文本——因此需要翻译——
我们需要提取 IStringLocalizer
(和 IViewStringLocalizor
)索引运算符的所有用法。
基于 this article ,我已经部分设法从加载的程序集中提取信息。
我的主要问题是:
- 我的代码基于 SDILReader,它很旧且不再维护,并且显然有很多问题(使用较新的 CIL?)
- 我如何在运行时 JIT 编译的 razor View 中提取用法?
- 我更喜欢最迟在部署时提取数据,但最好是在提交或 CI 构建时提取数据
- Roslyn 可以帮助满足我的需求吗?
- 我是否忽略了任何工具或替代方法?
- 我更喜欢不易受 future .NET 框架/运行时版本或新 C# 功能影响的解决方案
欢迎提出任何想法或建议 :-) 谢谢
最佳答案
按照您的要点排序:
- 我使用 Mono Reflection 分析了 IL 代码它说它适用于 .NET 4,并且似乎得到了一定程度的维护(最后一个版本是 2016 年)
- Razor View 被编译为 C# 类,您可以在构建时使用 ASP.NET Compiler 执行此操作(这对于避免缓慢的首次加载时间也很有用)编译页面后,您可以分析生成的类。
- 在提交时提取可能需要很长时间(构建 View 需要一段时间,如果有的话)我会在 CI 服务器上进行。
- 对于 C#,Roslyn 绝对是一个选项,但我不认为它可以帮助您处理 Razor View ,但我对此不是 100% 确定。
- 我不知道有什么工具可以帮助您完成这项任务,但我不确定
- 如果 IL 发生变化,分析 IL 很容易中断,但 C# 代码分析器也是如此,而且 IL 的变化比 C# 少得多。
如果您在代码的符号执行方面需要帮助,我可以发布一个简单的符号执行方法,该方法可以跟踪局部变量或执行堆栈中的常量等内容。
关于c# - 从 .NET 代码中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45982132/