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

TLDR;

我需要在.NET代码中提取Microsoft.Extensions.Localization.IStringLocalizer的索引运算符的所有调用的参数的字符串值.实际上我还需要封闭类的全名.

警告:上面还包括我的ASP.NET核心MVC剃刀视图.

基本上我的需求与Visual Studio中的“查找所有引用”功能非常相似.

为什么和其他想法

原因是我们使用IStringLocalizer来欣赏开发流程,而无需实际创建资源.此外,我们使用Damien Bods AspNetCoreLocalization将资源文件的使用替换为数据库存储.

这使我们能够让业务专家完成所有翻译(1)而无需访问Web服务器的文件系统,(2)从我们提供的良好界面,以及(3)独立于开发周期.但是,为了让业务专家了解哪些文本存在 – 因此需要翻译 –
 我们需要提取IStringLocalizer(和IViewStringLocalizor)索引运算符的所有用法.

基于this article,我部分设法从加载的程序集中提取信息.

我的主要问题是:

>我的代码基于SDILReader,它很老,不再维护,显然有很多问题(使用较新的CIL?)
>我如何在运行时编译JIT的razor视图中提取用法?
>我更喜欢在部署时最近提取数据,但最好是在提交或CI构建时
>罗斯林可以帮助满足我的需求吗?
>我忽略了任何工具或替代方法吗?
>我更喜欢不易受未来.NET框架/运行时版本或新C#功能攻击的解决方案

任何想法或指针都是最受欢迎的:-)
谢谢

最佳答案 按照你的bulet积分:

>我使用Mono Reflection分析了IL代码它说它适用于.NET 4并且似乎有所保持(最新版本是2016)
> Razor视图被编译为C#类,您可以使用ASP.NET Compiler在构建时执行此操作(这对于避免缓慢的首次加载时间也很有用)编译页面后,您可以分析生成的类.
>在提交时提取可能需要很长时间(构建视图需要一段时间,如果它们是任何)我会在CI服务器上执行.
>对于C#Roslyn绝对是一个选择,但我不认为它可以帮助你剃刀视图,但我不是100%肯定这一点.
>我不知道有任何工具可以帮助你完成这项任务,但我不确定
>如果IL发生变化,分析IL很容易中断,但对于C#代码分析器来说也是如此,并且IL的变化比C#少很多.

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

点赞