Я создаю развертывание 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 также выйдет из строя, потому что информация будет еще более явно неправильной (другой размер файла, а не только хеш).
В любом случае, я могу понять, почему проверка хэша не работает, когда я думаю, что она действительна?
Или, что еще лучше, есть ли способ генерировать манифесты после того, как переписчик кодовых контрактов закончит взламывать мои исполняемые файлы?
Спасибо