如何为ClickOnce应用程序设置LARGEADRESSAWARE?

and*_*mar 6 deployment clickonce

我一直在努力解决这个问题.我有一个使用大量内存的应用程序,真的会受益于LargeAddressAware.

问题简而言之:使用LAA-flag,应用程序将无法启动.

实验结果:

1)我有一个发布脚本,运行整个ClickOnce发布,然后重新签署可执行文件和dll,然后重新创建清单,签名等

2)运行脚本为我提供了一个安装和运行良好的应用程序

3)将其添加到后期构建中会破坏应用程序:

editbin /LARGEADDRESSAWARE <path>/obj/Publish/app.exe
Run Code Online (Sandbox Code Playgroud)

(是的,我知道,我们有一个名为Publish的构建配置- 白痴 - 但有效......)

我得到的错误信息是:

激活\ betabox\appbeta\app.application导致异常. 检测到以下失败消息:

+强名称签名对此程序集app.exe无效.

我的清单和exe都由有效的代码签名证书签名.当标志没有设置时,脚本工作正常.

我已经尝试过没有我的脚本,只有后期构建中的editbin命令并通过VS发布 - 同样的错误.

那么 - 通过ClickOnce发布LARGEADRESSAWARE设置的应用是否完全不可能?

谢谢!

and*_*mar 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
Run Code Online (Sandbox Code Playgroud)

之后,同样在后期构建中,exe必须重新签名:

sn -Ra obj\$(ConfigurationName)\app.exe PublicPrivateKeyFile.snk
Run Code Online (Sandbox Code Playgroud)

这当然是假设PublicPrivateKeyFile.snk是代码签名密钥并且在Visual Studio项目的路径中.

我的问题是我在构建之后使用以下方法重新签署所有dll/exes:

for /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"
Run Code Online (Sandbox Code Playgroud)

但这并没有更新强名称,只是签署了exe文件.

希望这有助于某人!