Roy*_* T. 6 c# msbuild patch hexdump
我的所有代码都在源代码管理下,所以我100%确定源代码没有改变.但是如果我构建一个C#DLL两次,它们的内容就会略有不同.我可以通过构建,然后再次构建,100%的时间重现问题.
这似乎根本不会对程序产生影响,但是用于从两个MSI文件创建补丁的MSIMSP等工具会因这些微小的更改而被抛弃.制作补丁(对于我的产品)比它们应该大40倍.
我已经反编译了这两个DLL及其汇编信息,类等等......完全相同.文件大小也完全相同,但当然有不同的创建时间.所以我真的无法理解发生了什么变化.
所以我挖了一点.
我已经使用WinDiff查找更改,然后在十六进制编辑器中交叉引用这些更改.WinDiff显示第二个"行"的变化,并在文件的大约80%的行中显示.
在十六进制编辑器中,我看到更改的第一个字节是字节0x088(字节136).这似乎是这条'线'上唯一改变的字节.我找不到第二个更改,因为WinDiff没有告诉我更改的确切字节偏移量.
是否有人熟悉(C#)DLL文件的组成知道更改的字节可能意味着什么?或者更好的是如何确保DLL文件在重建时保持完全相同?
这可能与 Build 和 ReBuild 之间的差异有关
Visual Studio 中生成解决方案、重建解决方案和清理解决方案之间的区别?
如果它认为不需要重建项目,它就不会。如果它们没有改变,它也可能使用项目的部分构建位
执行构建在幕后使用元数据,因此您的 dll 可能会有所不同
解决方案:
您将需要按照此处所述执行确定性构建
归档时间: |
|
查看次数: |
928 次 |
最近记录: |