c# - 从 .NET 代码中提取数据

标签 c# reflection

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# 功能影响的解决方案

欢迎提出任何想法或建议 :-) 谢谢

最佳答案

按照您的要点排序:

  1. 我使用 Mono Reflection 分析了 IL 代码它说它适用于 .NET 4,并且似乎得到了一定程度的维护(最后一个版本是 2016 年)
  2. Razor View 被编译为 C# 类,您可以在构建时使用 ASP.NET Compiler 执行此操作(这对于避免缓慢的首次加载时间也很有用)编译页面后,您可以分析生成的类。
  3. 在提交时提取可能需要很长时间(构建 View 需要一段时间,如果有的话)我会在 CI 服务器上进行。
  4. 对于 C#,Roslyn 绝对是一个选项,但我不认为它可以帮助您处理 Razor View ,但我对此不是 100% 确定。
  5. 我不知道有什么工具可以帮助您完成这项任务,但我不确定
  6. 如果 IL 发生变化,分析 IL 很容易中断,但 C# 代码分析器也是如此,而且 IL 的变化比 C# 少得多。

如果您在代码的符号执行方面需要帮助,我可以发布一个简单的符号执行方法,该方法可以跟踪局部变量或执行堆栈中的常量等内容。

关于c# - 从 .NET 代码中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45982132/

相关文章:

c# - C# 或一般 .Net 中的 C 解析器

c# - 参数不正确。服务器或代码问题?

java - 在具有运行时保留的对象上找不到注释

java - 理解 Guava 的 TypeToken.isAssignableFrom 方法

reflection - 路径追踪 : why is there no cosine term when calculating perfect mirror reflection?

java - 是否可以使用Java反射或各种技术来检查一个类是否有父类?

c# - 如何在自定义索引的列表中插入对象

c# - 将 LinkBut​​ton 的 OnClick 事件设置为代码隐藏中的方法

c# - 在带有按钮和文本框的表单中运行几个错误

c# - 如何递归迭代实体的属性