C# 比较版本中构建的产品

C# 比较版本中构建的产品,c#,visual-studio-2005,build-process,C#,Visual Studio 2005,Build Process,我需要比较VS2005的构建输出,以确保能够复制完全相同的产品 当我在发行版中一个接一个地进行两个构建并比较生成的文件时,我得到了不同的文件,进行文本比较时,似乎不仅仅是日期时间不同 如何构建以每次复制完全相同的产品?一个问题:您对二进制构建输出进行了比较? 据我所知,大多数编译器从未为同一项目生成二进制相同的构建输出。编译器编码为二进制编译时间、特殊顺序等。无论何时构建,编译器都会嵌入: 日期和时间 GUID(我相信用于调试等) 可能是程序集版本(可能有“1.2.3.*”并自动填充) 可能是

我需要比较VS2005的构建输出,以确保能够复制完全相同的产品

当我在发行版中一个接一个地进行两个构建并比较生成的文件时,我得到了不同的文件,进行文本比较时,似乎不仅仅是日期时间不同


如何构建以每次复制完全相同的产品?

一个问题:您对二进制构建输出进行了比较?
据我所知,大多数编译器从未为同一项目生成二进制相同的构建输出。编译器编码为二进制编译时间、特殊顺序等。

无论何时构建,编译器都会嵌入:

  • 日期和时间
  • GUID(我相信用于调试等)
  • 可能是程序集版本(可能有“1.2.3.*”并自动填充)
  • 可能是一个强散列
有两种选择:

  • 找出文件“已知在本质上不同”的位置,擦除这些字节,然后进行比较
  • 使用ildasm将程序集转换为文本,然后比较这些结果。(我没有检查这是否也揭示了差异——可能会,在这种情况下,您必须再次明确忽略某些部分)

这个问题确实经常出现,所以我会看看是否能找到一个工具来进行比较——尽管它不太可能处理签名的程序集,因为签名的位置可能会有很大的不同。

您实际上可以使用DumpBin对不同的生成进行二进制比较,而忽略每个生成的变化。看见这篇文章说它只适用于Visual Studio 6,所以我不确定它是否能在2005年或以后使用。

在VS 2010中,dumpbin工具存在,但在dll的两个后续版本上运行它会产生许多差异。