如何比较DLL文件

时间:2010-04-09 19:07:50

标签: svn dll

在构建我的c#项目之后,我有一个构建后的脚本,它将一个dll文件放在一个特定的目录中。此dll保存在SVN中。我的问题是,有没有一种方法,在构建我的项目时,它知道这个DLL没有改变,并且知道不会被复制到目录,所以不会有SVN的修改副本?

6 个答案:

答案 0 :(得分:1)

为什么要将你构建的dll放入svn?

修改

你应该找到一个更好的方法来做到这一点 - 例如在开发人员可以获取你的DLL的地方安装一个安装程序或ftp服务器。将您的派生作品放入svn是一个非常糟糕的主意。特别糟糕。

答案 1 :(得分:0)

快速简便的方法是对两个文件进行统计并比较它们的修改时间 - 如果目标目录中的DLL早于您要复制的DLL,则只复制文件。

更强大但更慢的方法是使用任意数量的diff程序来逐字节地比较两个DLL。

答案 2 :(得分:0)

除非我误解你的问题,否则你无需做任何事情。如果文件未被修改,SVN知道这一点并且不会提交。

修改 你已经澄清了蒂姆的答案,你这样做是为了拯救其他开发者的建设麻烦。这是错误的方式。源控件不应用于保存作为源输出的二进制文件。相反,你应该:

  1. 在树上进行持续集成
  2. 将所有输出从1.发送到普通共享
  3. 告诉所有开发者如果不想构建某些内容,请查看此分享

答案 3 :(得分:0)

SVN应该已经为您解决了这个问题。如果文件之间确实没有差异,并且您将其替换为另一个文件,则SVN将不会认为该文件被“修改”,即使它具有新的时间戳。 SVN保留文件的基本修订版,并使用diff本身来查看需要提交的文件。所以你可以随时复制dll,SVN将负责其余的工作。

答案 4 :(得分:0)

尝试提交,看看SVN是否同意您的图形界面。

如果它试图提交,那么无论构建文件是什么,每次都包含一些不同的信息(可能是时间戳或其他东西)。您可能希望实际提交,因为该文件不同。您可以检查编译选项以查看它是否包含某种时间戳,但如果您找不到这样的选项,则很难判断dll的更改是否有意义或只是某些编译器元数据

答案 5 :(得分:0)

将二进制文件检入subversion是可以的。原因是下游用户(QA或用户)可能没有从源代码构建的环境。他们对源代码构建也不感兴趣。

此处的问题是楼宇管理问题 - 当您发布该DLL时,如果QA发现您的DLL有问题,如何追溯到源。

时间戳不是一种可靠的方法。

为此目的,您需要在建筑物管理方面拥有一些东西。在我的项目中,我们的构建脚本找到所涉及文件的最大修订版号(请注意,这不是当前的修订版号,因为您应该能够在将来构建但产生相同的结果)。然后它将此数字标记到DLL的版本资源。在我们对结果感到满意后,我们通过手动将二进制文件复制到subversion中的文件夹并签入来释放它。

如果QA发现错误,我们总是可以回到构建DLL的状态(通过查找版本号)并找出问题所在。