Я создаю развертывание ClickOnce.
Теперь я использую программу переписывания CodeContracts, что означает, что манифест приложения генерируется до того, как CodeContracts изменит мою сборку.
Поэтому я обновляю файл манифеста приложения, используя новейший хэш и размер файла. Вот алгоритм для вычисления хеша:
public static string ComputeHash(FileInfo info)
{
SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
byte[] hashBytes = sha1.ComputeHash(info.OpenRead());
return Convert.ToBase64String(hashBytes);
}
Затем я сохраняю манифест. Затем я обновляю манифест развертывания ClickOnce (.application), который имеет хэш и размер для манифеста приложения, используя ту же самую процедуру вычисления хеша.
После этого я запускаю тестовую программу, которая сообщает мне, что все хэши и размеры файлов соответствуют размерам реальных файлов на диске.
Тем не менее, когда я запускаю развертывание ClickOnce, всегда жалуется, что проверка хэша не удалась для основного файла .exe (который является единственной зависимой сборкой в манифесте приложения, которая требует изменения).
Обратите внимание, что если я не изменю хеши и размеры самостоятельно, ClickOnce также не будет работать, потому что информация еще более ощутимо неверна (размер файла отличается, а не только хэш).
Есть ли в любом случае, я могу понять, почему проверка хеша терпит неудачу, когда я думаю, что она действительна?
Или, что еще лучше, есть ли способ, которым я могу генерировать манифесты после того, как переписчик контрактов кода завершил взлом моих исполняемых файлов?
Спасибо