我的所有代码都受源代码管理,所以我100%确定源代码没有改变。但是如果我构建一个C#DLL两次,它们的内容就会略有不同。我可以通过构建,然后再次构建来100%重现问题。
这根本不会对程序产生影响,但是这些微小的更改会抛弃用于从两个MSI文件创建补丁的MSIMSP等工具。制作补丁(对于我的产品)比它们应该大40倍。
我已经反编译了这两个DLL及其汇编信息,类等等......完全相同。文件大小也完全相同,但当然有不同的创建时间。所以我真的无法理解发生了什么变化。
所以我挖了一点。
我使用WinDiff查找更改,然后在十六进制编辑器中交叉引用这些更改。 WinDiff显示了第二条线的变化'并且在文件的大约80%的行中。
在十六进制编辑器中,我看到更改的第一个字节是字节0x088(字节136)。这似乎是这条'线上唯一改变的字节。我找不到第二个更改,因为WinDiff没有告诉我更改的确切字节偏移量。
是否有人熟悉(C#)DLL文件的组成知道更改的字节可能意味着什么?或者更好的是如何确保DLL文件在重建时保持完全相同?
答案 0 :(得分:4)
这可能与Build和ReBuild
之间的差异有关Difference between Build Solution, Rebuild Solution, and Clean Solution in Visual Studio?
如果认为不需要重建项目,则不会。有可能 如果没有改变,也可以使用项目的部分构建位
执行构建会在幕后使用元数据,因此您的dll可能会有所不同
Why is a different dll produced after a clean build, with no code changes?
<强> SOLUTION:强>
您需要按照here
所述执行确定性构建答案 1 :(得分:0)
如果您对dll进行了更改,那么大小将受到影响。我在枚举中添加了一些额外的属性,文件变得大了约3kb。 由于解压缩,这也可能是一个看不见的更改,导致文件看起来有所不同。