Мой вопрос отличается от приведенного ниже.
Сравнить две библиотеки DLL
Я пытаюсь сравнить, являются ли две библиотеки DLL одинаковыми двоичными файлами или не используют код C# , При необходимости я могу обратиться к какой-нибудь сторонней DLL, но сравнение должно выполняться с помощью C# кода, а не инструмента ручного открытия.
Это моя большая задача .. C# Общие библиотеки в одном и том же месте для разных служб WCF
У меня есть библиотека MyDll.dll, расположенная ниже
C: \ Source \ MyDll.dll
C: \ Destination \ MyDll.dll
Я написал метод, который получает MyDll.dll из C: \ Source и перетаскивает / заменяет в C: \ Destination, но я не хочу слепо заменять MyDll.dll в C: \ Destination. Я хочу проверить, совпадают ли C: \ Source \ MyDll.dll и C: \ Destination \ MyDll.dll . Если нет, то только замените.
Пожалуйста, помните, что все должно происходить в коде C#, так как этот метод запускается при событии запуска службы windows.
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);
}
Посмотрел на это не использовать C# - сравнение двух. net DLL с использованием отражения
ОБНОВЛЕНИЕ
Я создал ниже метод и я чувствую, что это проблема производительности в зависимости от того, насколько большой мой 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);
}