我几天来一直在努力解决这个问题。我见过像ClickOnce Deployment Error: different computed hash than specified in manifest这样的其他帖子,但这些解决方案对我来说似乎不起作用。
我有一个有效的代码签名证书,并且已经使用它签署我的ClickOnce应用程序数月。我意识到我没有签署可执行文件和dll自己,所以我试图这样做。现在,每次我发布并运行setup.exe时,它都会失败:“文件,xxxxxx.dll,具有与清单中指定的不同的计算哈希值。”
如果我不签署exe和Dlls,我可以重新部署。在发布之前,我确保exe / dll的所有副本都在所有目录(Target,Obj)中签名。我尝试过使用Mage / MageUI,但没有成功。是否可以在没有签名代码的情况下配置ClickOnce安装,然后发布签名代码?似乎合乎逻辑,但也许我错过了一些东西。
谢谢,格雷格
您是否有可能尝试部署WPF应用程序并使用Visual Studio 2012或更高版本?如果是这样,您必须使用项目文件中的“AfterCompile”设置来签署应用程序,否则最终会导致哈希不匹配。
请参阅此stackoverflow帖子:SignTool Not Signing ClickOnce App Using SHA256, Only Uses SHA1
链接到罗宾的优秀博客解决方案:http://robindotnet.wordpress.com/2013/04/14/windows-8-and-clickonce-the-definitive-answer-revisited/
首先要检查:发布 - 更新 - 应用程序更新 - URL是正确的(例如,您有测试URL和部署URL)
要检查的第二件事:删除System.Deployment引用并将其重新添加。在将项目从VS2012移动到VS2015之后我们遇到了问题,并且这个操作在经过数小时尝试不同的想法后再次运行。
顺便说一句 - 这是一个如何做出公认答案的简单指南:
<Target Name="AfterCompile" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Exec Command=""C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe" sign /f "C:\temp\myPFX.pfx" /p "admin" /v "$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)"" />
</Target>
我仍在使用Visual Studio 2015,每个构建配置的应用程序配置转换,TFS和使用不同的发布分支。经过大量研究,在我开始使用发布向导按钮之前,我无法找到解决此问题的解决方案。
如果您使用的是VS2015,请首先尝试使用“发布向导...”按钮而不是“立即发布”按钮进行发布。显然,发布向导按钮会在应用程序配置转换发生后更新清单文件。
我使用Visual Studio 2013进行clickonce和代码签名的许多问题(包括此特定问题)都是通过安装vs2013 update 4解决的。
(也许更新3就足够了,但是经过几天的挫折后我安装了更新4)
我在每个程序集的post-build事件中使用带有/ sha1选项的signtool。 (一直运行)。
清除应用程序的调试文件夹后,我的问题解决了,然后在服务器(目标机器)上删除了一切从发布文件夹。 Cleaning Publish fodler不会阻止您的应用程序在客户端计算机上安装。所以按照指示,经过3天的搜索,我已经为我工作了。然后我重新发布应用程序,它开始工作,他们的客户端应用程序也更新。