我几天都在为这个问题苦苦挣扎。我已经看过其他帖子,例如ClickOnce Deployment Error: different computed hash than specified in manifest,但这些解决方案对我来说似乎不起作用。
我有一个有效的代码签名证书,并且几个月来一直使用它来签署我的ClickOnce应用程序。我意识到我没有签署可执行文件和dll自己,所以我试图这样做。现在,每次我发布并运行setup.exe时,它都会失败:" File,xxxxxx.dll具有与清单中指定的不同的计算哈希。"
如果我没有签署exe和Dlls,我可以重新部署。在发布之前,我确保exe / dll的所有副本都在所有目录(Target,Obj)中签名。我尝试过使用Mage / MageUI,但没有成功。是否可以在没有签名代码的情况下配置ClickOnce安装,然后发布签名代码?似乎合乎逻辑,但也许我错过了一些东西。
谢谢, 格雷格
答案 0 :(得分:7)
您是否有可能尝试部署WPF应用程序并使用Visual Studio 2012或更高版本?如果是这样,您必须使用项目文件中的“AfterCompile”设置来签署应用程序,否则最终会导致哈希不匹配。
请参阅此stackoverflow帖子: SignTool Not Signing ClickOnce App Using SHA256, Only Uses SHA1
链接到Robin优秀的博客解决方案: http://robindotnet.wordpress.com/2013/04/14/windows-8-and-clickonce-the-definitive-answer-revisited/
答案 1 :(得分:3)
要检查的第一件事:发布 - 更新 - 应用程序更新 - URL是正确的(例如,您有测试URL和部署URL)
要检查的第二件事:删除System.Deployment引用并将其重新添加。在将项目从VS2012移动到VS2015之后我们遇到了问题,并且这个操作在经过数小时尝试不同的想法后再次运行。
btw - 这是一个如何做出公认答案的简单指南:
右键单击项目并选择“卸载项目”
右键单击项目并选择“编辑”
在最终项目关闭标记之前添加以下内容:
<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>
将signtool.exe和pfx(签名)文件的位置更改为您自己的位置
保存项目文件
重新加载项目
答案 2 :(得分:1)
我仍在使用Visual Studio 2015,针对每个构建配置的应用程序配置转换,TFS和使用不同的发行分支。经过大量研究,直到我开始使用发布向导按钮时,我才找到解决此问题的解决方案。
如果您使用的是VS2015,请首先尝试使用“发布向导...”按钮而不是“立即发布”按钮进行发布。显然,在完成应用程序配置转换后,发布向导按钮会更新清单文件。
答案 3 :(得分:0)
我使用Visual Studio 2013进行clickonce和代码签名的许多问题(包括此特定问题)都是通过安装vs2013 update 4解决的。
(也许更新3本来就够了,但是经过几天的挫折后我安装了更新4)
我在每个程序集的post-build事件中使用带有/ sha1选项的signtool。 (经常跑)。
答案 4 :(得分:0)
我清除了我的应用程序的调试文件夹,然后从服务器(目标计算机)上的发布文件夹中删除所有内容后解决了我的问题。清除发布 fodler并不会阻止您的应用程序在客户端计算机上安装。所以按照指示,经过3天的搜索,我已经为我工作了。 然后我重新发布应用程序,它开始工作,他们的客户端应用程序也更新。