Validation 使用代码约定重写器时ClickOnce哈希失败

Validation 使用代码约定重写器时ClickOnce哈希失败,validation,hash,clickonce,manifest,code-contracts,Validation,Hash,Clickonce,Manifest,Code Contracts,我正在创建ClickOnce部署 现在,我正在使用CodeContracts rewriter,这意味着应用程序清单是在CodeContracts修改我的程序集之前生成的 因此,我使用最新的哈希和文件大小更新应用程序清单文件。下面是计算散列的算法: public static string ComputeHash(FileInfo info) { SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvi

我正在创建ClickOnce部署

现在,我正在使用CodeContracts rewriter,这意味着应用程序清单是在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也会失败,因为信息更明显是错误的(文件大小不同,而不仅仅是散列)

当我认为哈希验证是有效的时,我是否能理解为什么它会失败

或者更好的是,有没有一种方法可以在代码契约重写器完成对我的可执行文件的黑客攻击后生成清单


谢谢

您是否尝试更新并放弃您的清单?查看Update(-u)和Sign(-s)命令。

我目前没有对清单进行签名,因此这不是问题。我确实希望避免使用Mage,因为我希望在构建活动中直接使用API。此外,我尝试在代码中调用ApplicationManifest.UpdateFileInfo()方法,并且它不会修复损坏的文件哈希和大小。在
UpdateFileInfo()
之前是否尝试了
ResolveFiles()
调用?