如何在 ClickOnce 应用的无签名程序集项目中设置 LARGEADRESSAWARE
本文关键字:程序集 项目 LARGEADRESSAWARE 设置 ClickOnce 应用 | 更新日期: 2023-09-27 18:37:28
我有一个应用程序,其中包含接下来的两个编译后命令:
call editbin /LARGEADDRESSAWARE $(TargetPath)
call editbin /LARGEADDRESSAWARE $(ProjectDir)obj'$(PlatformName)'$(ConfigurationName)'$(TargetFileName)
并且工作正常。
但是当我发布到服务器中时,ClickOne 应用程序没有错误,但是当我尝试在客户端中安装时,文件的哈希与清单中计算的值不同。
我尝试使用下一个命令:
sn -Ra $(ProjectDir)obj'$(PlatformName)'$(ConfigurationName)'$(TargetFileName) PublicPrivateKeyFile.snk
但不起作用,它显示下一条消息:
app.exe 不表示任何强名称程序集。
我想这是因为我的所有项目都具有具有 false 值的"签名程序集"选项。在使用 LARGEADDRESSAWARE 之前,ClickOnce 应用程序运行良好。
有必要为所有项目设置具有真值的"签名程序集"选项,或者有没有办法将带有假值的 LARGEADDRESSAWARE 用于此选项?
编辑:
马克·索乌尔的解决方案工作正常:我还在AfterBuild中添加了下一行,以检查AfterCompile是否正常工作
call "$(VS110COMNTOOLS)vsvars32.bat"
dumpbin /headers "$(TargetPath)" > "$(TargetPath).info"
findstr "(>2GB)" "$(TargetPath).info"
set BUID_ERRORLEVEL=%ERRORLEVEL%
del "$(TargetPath).info"
if [%BUID_ERRORLEVEL%]==[0] echo EXE program updated to use more than 2GB
if [%BUID_ERRORLEVEL%]==[1] echo ERROR: EXE PROGRAM WAS NOT UPDATED TO USE MORE THAN 2GB
set ERRORLEVEL=%BUID_ERRORLEVEL%
后期构建事件在游戏中为时已晚。 您已经像我一样在一定程度上发现了这一点,通过意识到您需要在 obj 中更改文件。
但是,生成后发生在清单生成之后。 所以在那里编辑obj文件为时已晚。 更好的位置是在 AfterCompile 构建目标中。
您必须编辑 csproj;在你已经看到的行之后添加:
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
**<Target Name="AfterCompile">
<Exec Command="
call "$(VS110COMNTOOLS)'vsvars32.bat"
editbin /largeaddressaware "$(IntermediateOutputPath)$(TargetFileName)"
" />
</Target>**