我一直在努力解决这个问题。我有一个使用大量内存的应用程序,真的会受益于 LargeAddressAware 。
问题简而言之:使用LAA-flag,应用程序将无法启动。
实证结果:
1)我有一个发布脚本,运行整个ClickOnce发布,然后重新签名可执行文件和dll,然后重新创建清单,签名等等
2)运行脚本为我提供了一个可以安装并且运行良好的应用程序
3)将其添加到后期制作会破坏应用程序:
editbin /LARGEADDRESSAWARE <path>/obj/Publish/app.exe
(是的,我知道,我们有一个名为 Publish 的构建配置 - 白痴 - 但是有效......)
我得到的错误信息是:
激活\ betabox \ appbeta \ app.application导致异常。 检测到以下失败消息:
+强名称签名对此程序集app.exe无效。
我的manifest和exe都是由有效的代码签名证书签名的。当标志没有设置时,脚本工作正常。
我已经尝试过没有我的脚本,只有在构建后的 editbin 命令并通过VS发布 - 同样的错误。
那么 - 通过ClickOnce发布LARGEADRESSAWARE设置的应用是否完全不可能?
谢谢!
答案 0 :(得分:5)
解决!
在ClickOnce论坛中获得Kira的帮助:http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/b008087c-45f8-4de6-b8f5-f34fddb29c8c/?prof=required
<强>解决方案:强> 在设置LAA标志后,必须使用新的强名称重新签名EXE。
如何执行此操作 在后期构建中,标志由:
设置cd $(ProjectDir)
editbin /LARGEADDRESSAWARE obj/$(ConfigurationName)/app.exe
之后,同样在后期构建中,exe必须重新签名:
sn -Ra obj\$(ConfigurationName)\app.exe PublicPrivateKeyFile.snk
这当然是假设PublicPrivateKeyFile.snk是代码签名密钥并且在Visual Studio项目的路径中。
我的问题是我在构建之后使用:
重新签名所有dll / exesfor /R %BIN_DIR% %%f in (*.dll) do signtool sign /a /i "Thawte" /t http://timestamp.verisign.com/scripts/timstamp.dll "%%f"
for /R %BIN_DIR% %%f in (*.exe) do signtool sign /a /i "Thawte" /t http://timestamp.verisign.com/scripts/timstamp.dll "%%f"
但这并没有更新强名称,只是按照原样签署。
希望这有助于某人!