Diff 如何确定程序集实际已更改?

Diff 如何确定程序集实际已更改?,diff,.net-assembly,il,Diff,.net Assembly,Il,我有一个软件包,它在几个程序集上执行昂贵的计算工作。这项工作基于IL代码,相同的代码总是产生相同的结果 我认为缓存工作结果是一个好主意,但在实现缓存时,我注意到每次编译项目时(例如,当我在Visual Studio中单击“重建”时),生成的程序集都是不同的,即使源代码保持不变 其中一个区别来自MVID,即。似乎还有另一个变化,但我还不能确定它的性质。ª 考虑到程序集的一个简单的diff将始终显示程序集是不同的,我的其他选项是什么 将程序集反编译为IL并修剪MVID对于基本任务来说似乎太多了 尽

我有一个软件包,它在几个程序集上执行昂贵的计算工作。这项工作基于IL代码,相同的代码总是产生相同的结果

我认为缓存工作结果是一个好主意,但在实现缓存时,我注意到每次编译项目时(例如,当我在Visual Studio中单击“重建”时),生成的程序集都是不同的,即使源代码保持不变

其中一个区别来自MVID,即。似乎还有另一个变化,但我还不能确定它的性质。ª

考虑到程序集的一个简单的
diff
将始终显示程序集是不同的,我的其他选项是什么

将程序集反编译为IL并修剪MVID对于基本任务来说似乎太多了



尽管WinMerge在二进制级别的两个完全不同的位置显示了两个差异,但在比较ILSpy中的程序集时,我只能看到MVID的差异。

直到最近,您还不能,至少不容易。编译C#或VB.NET的过程中有许多部分(我假设您正在使用)是不确定的


但随着Roslyn 1.2/Visual Studio 2015更新2的出现,这是一个问题。您可以通过将
/deterministic
传递到csc/vbc或手动将
true
添加到csproj/vbproj来选择此模式。

程序集是PE32文件,它将生成日期存储在标头中。IMAGE\u FILE\u HEADER.TimeDateStamp字段。您可以通过Dumpbin.exe/headers查看它