Сбои хеша ClickOnce при использовании программы переписывания кода - PullRequest
2 голосов
/ 09 июня 2011

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

Есть ли в любом случае, я могу понять, почему проверка хеша терпит неудачу, когда я думаю, что она действительна?

Или, что еще лучше, есть ли способ, которым я могу генерировать манифесты после того, как переписчик контрактов кода завершил взлом моих исполняемых файлов?

Спасибо

1 Ответ

2 голосов
/ 09 июня 2011

Вы пытались Маг обновить и оставить свои манифесты?Посмотрите на команды Обновить (-u) и Подписать (-s).

...