【发布时间】:2015-09-17 18:34:25
【问题描述】:
我有一个build task,它在一些程序集上执行计算量很大的工作。工作基于 IL 代码,相同的代码总是产生相同的结果。
我认为缓存工作结果是个好主意,但是在实现缓存时,我注意到每次编译项目时(例如,当我在 Visual Studio 中单击 Rebuild 时),生成的程序集是不同的,即使源代码保持不变。
其中一个区别来自 MVID,即Module.ModuleVersionId。似乎还有另一个变化,但我还无法确定它的性质。¹
鉴于程序集的简单diff 将始终显示程序集不同,我还有哪些其他选择?
将程序集反编译为 IL 并修剪 MVID 对于基本任务来说似乎工作量太大。
¹ 虽然 WinMerge 在二进制级别显示两个完全不同位置的两个差异,但在 ILSpy 中比较程序集时,我只能看到 MVID 差异。
【问题讨论】:
-
程序集是一个 PE32 文件,它在标题中存储构建日期。 IMAGE_FILE_HEADER.TimeDateStamp 字段。您可以使用 Dumpbin.exe /headers 查看它
标签: diff .net-assembly il