检查已编译程序集的内容

Posted

技术标签:

【中文标题】检查已编译程序集的内容【英文标题】:Inspecting contents of compiled assemblies 【发布时间】:2014-08-03 00:59:28 【问题描述】:

我希望有人能够为我指明正确的方向。我们正在将数据库中的一些字段从 int 转换为 bigint。这意味着我们需要将代码库中的相应字段从 int 更新为 long。问题是我们的代码库非常庞大。我们有数百个项目,手动搜索它们会很乏味。因此,我想构建一个应用程序,当提供程序集时,它可以在所有代码中搜索特定字符串(在本例中为字段名称)。我已经使用反射来调用方法和获取属性值等,但我可以使用它来搜索已编译程序集的实际代码中的值吗?该值可以是任何东西——属性、常量、方法等。我也看过 ildasm,但它似乎没有为我提供搜索特定字符串值的方法。有什么想法吗?

【问题讨论】:

我建议查看Roslyn,这是微软的编译器即服务。您可以连接到它的 AST(抽象语法树),这将帮助您解析代码并搜索属性、常量、方法等。您可以在这里查看:msdn.microsoft.com/en-us/vstudio/roslyn.aspx 我想这解释了它是如何变得“巨大”的:/这是技术债务,你等待的时间越长,它就越贵。今天是开始重构的时间。 【参考方案1】:

有几种产品可以为您做到这一点:

Red Gate 的反射器 (http://www.red-gate.com/products/dotnet-development/reflector/),付费

Telerik 的 JustDecompile (http://www.telerik.com/products/decompiler.aspx),免费

JetBrains 的 dotPeek (http://www.jetbrains.com/decompiler/),免费

我主要是出于习惯使用 Reflector,因为 1.) 我不久前付费购买了它,2.) 我一直在使用它,因为它是免费的,所以很难改掉这个习惯。它还可以让您将程序集直接导出到源文件,然后您可以从那里对其进行操作。

【讨论】:

【参考方案2】:

您可以使用 Reflector 在程序集中进行搜索。

http://www.red-gate.com/products/dotnet-development/reflector/

【讨论】:

以上是关于检查已编译程序集的内容的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 .ipa 文件中的每个模块或文件集的大小?

MS Access 中的拼写检查 VBA 子程序已停止工作

即时创建我的程序集的签名副本

FxCop,组成依赖程序集的调用者列表

检查用户是不是更改了连续子表单记录集的最简单方法?

C# 防止 AppDomain 程序集的类实例访问文件