【发布时间】:2017-04-17 06:27:22
【问题描述】:
我的所有代码都受源代码控制,因此我 100% 确定源代码没有更改。但是,如果我两次构建 C# DLL,它们的内容会略有不同。通过构建,然后再次构建,我可以 100% 地重现问题。
这似乎根本不会影响程序,但是用于从两个 MSI 文件创建补丁的 MSIMSP 等工具被这些微小的更改所抛弃。使补丁(对于我的产品)比应有的大 40 倍。
我已经反编译了两个 DLL,它们的程序集信息、类等...完全相同。这些文件的大小也完全相同,但当然有不同的创建时间。所以我真的无法理解发生了什么变化。
所以我挖得更深了。
我使用 WinDiff 来查找更改,然后在十六进制编辑器中交叉引用这些更改。 WinDiff 显示第二个“行”和文件大约 80% 的行中的更改。
在十六进制编辑器中,我看到更改的第一个字节是字节 0x088(字节 136)。这似乎是此“行”上唯一更改的字节。我很难找到第二个更改,因为 WinDiff 没有告诉我更改的确切字节偏移量。
是否有熟悉 (C#) DLL 文件的构成的人知道更改的字节可能意味着什么?或者更好的是如何确保 DLL 文件在重建时保持完全相同?
【问题讨论】:
-
有时我的 bin/release 文件夹中有一个名为 $RANDOM_SEED$ 的文件,每次重建时该文件的内容都会更改。我没有详细介绍,但我可以想象这是两个变化之一。有人需要做一些研究。 编辑:(它的 nunit,可能对 dll 没有影响,所以忘记我的评论)stackoverflow.com/a/40382757/5962841
-
试试像 Vedit 这样好的文本/十六进制编辑器可能是值得的。自 1989 年以来我一直在使用它。即使在这些 IDE 和智能感知时代,它也是一个可供您使用的好工具。 www.vedit.com
-
How can I tell whether two Net DLLs are the same 似乎从不同的角度解决了同样的问题。
-
@Matteo 的链接应该清除它!