从相同的源代码生成的两个DLL文件中的这些差异是什么

Roy*_* T. 6 c# msbuild patch hexdump

我的所有代码都在源代码管理下,所以我100%确定源代码没有改变.但是如果我构建一个C#DLL两次,它们的内容就会略有不同.我可以通过构建,然后再次构建,100%的时间重现问题.

这似乎根本不会对程序产生影响,但是用于从两个MSI文件创建补丁的MSIMSP等工具会因这些微小的更改而被抛弃.制作补丁(对于我的产品)比它们应该大40倍.

我已经反编译了这两个DLL及其汇编信息,类等等......完全相同.文件大小也完全相同,但当然有不同的创建时间.所以我真的无法理解发生了什么变化.

所以我挖了一点.

我已经使用WinDiff查找更改,然后在十六进制编辑器中交叉引用这些更改.WinDiff显示第二个"行"的变化,并在文件的大约80%的行中显示.

在十六进制编辑器中,我看到更改的第一个字节是字节0x088(字节136).这似乎是这条'线'上唯一改变的字节.我找不到第二个更改,因为WinDiff没有告诉我更改的确切字节偏移量.

这是更改的图像,右侧文件是较新文件的内容. 十六进制视图

是否有人熟悉(C#)DLL文件的组成知道更改的字节可能意味着什么?或者更好的是如何确保DLL文件在重建时保持完全相同?

Fuz*_*ear 5

这可能与 Build 和 ReBuild 之间的差异有关

Visual Studio 中生成解决方案、重建解决方案和清理解决方案之间的区别?

如果它认为不需要重建项目,它就不会。如果它们没有改变,它也可能使用项目的部分构建位

执行构建在幕后使用元数据,因此您的 dll 可能会有所不同

为什么在干净构建后生成不同的 dll,没有代码更改?

解决方案:

您将需要按照此处所述执行确定性构建


归档时间:

查看次数:

928 次

最近记录:

8 年,9 月 前