C#:比较两个DLL是否是相等的二进制文件,是否使用C#代码而不是工具

C#:比较两个DLL是否是相等的二进制文件,是否使用C#代码而不是工具,c#,dll,compare,C#,Dll,Compare,我的问题与下面的不同 我试图比较两个DLL是否是相等的二进制文件,是否使用C#代码。如果需要,我可以参考一些第三方DLL,但比较必须通过C代码完成,而不是手动打开工具 这是我更大的任务。。 我在下面的位置有一个名为MyDll.dll的dll C:\Source\MyDll.dll C:\Destination\MyDll.dll 我编写了一个从C:\Source获取MyDll.dll并将其放入C:\Destination的方法,但我不想盲目地替换C:\Destination中的MyDll.d

我的问题与下面的不同

我试图比较两个DLL是否是相等的二进制文件,是否使用C#代码。如果需要,我可以参考一些第三方DLL,但比较必须通过C代码完成,而不是手动打开工具

这是我更大的任务。。

我在下面的位置有一个名为MyDll.dll的dll

C:\Source\MyDll.dll

C:\Destination\MyDll.dll

我编写了一个从C:\Source获取MyDll.dll并将其放入C:\Destination的方法,但我不想盲目地替换C:\Destination中的MyDll.dll我想检查C:\Source\MyDll.dll和C:\Destination\MyDll.dll是否相同。如果没有,则仅更换

请记住,由于此方法在windows服务的启动事件上运行,所以所有操作都需要在C代码中进行。

public void LoadAssembly()
{
  string source = @"C:\Source\MyDll.dl"
  string destination = @"C:\Destination\MyDll.dll"

  // To copy a file to another location and
  // overwrite the destination file if it already exists.
  System.IO.File.Copy(source, destination, true);

}
看这个没用

更新

我创建了下面的方法,我觉得它的性能问题取决于我的dll有多大。我有什么办法可以改进这一点吗

public static bool AreFilesEqual()
{
    string source = @"C:\Source\MyDll.dll";
    string dest = @"C:\Destination\MyDll.dll";

    byte[] sourceFileBytes = File.ReadAllBytes(source);
    byte[] destinationFileBytes = File.ReadAllBytes(dest);

    // if two files length are not same then they are not equal
    if(sourceFileBytes.Length != destinationFileBytes.Length)
    {
        return false;
    }

    return sourceFileBytes.SequenceEqual(destinationFileBytes);
}

那么为什么不使用校验和呢?这有帮助吗?你对“平等”的定义是什么?完全相等的二进制文件?相同的程序集名称和版本?您的规则是“仅在不同时替换”,但如果它们相同,则“替换”与不替换相同,对吗?您是出于性能原因而试图避免不必要的更换,还是有其他原因来避免不必要的更换?是否有理由不为此使用库版本号?构建工具非常擅长在重建时自动增加版本号,并且只在实际发生更改时重建,因此可以将问题转移到更合适的位置。此外,还可以避免每次服务启动时对所有库进行大量逐字节比较。