我正在构建一个c#可执行文件,必须构建为32位应用程序(由于其他环境限制)。作为构建后的步骤,我使用editbin.exe LARGEADDRESSAWARE
来允许32位应用程序使用超过2GB的内存;尽管我注意到这破坏了强名称验证。
执行editbin.exe
命令前先执行sn.exe -vf
命令验证强名称:
sn.exe -vf [my exe]
输出:Assembly '[my exe]' is valid
然后我运行editbin.exe /LARGEADDRESSAWARE [my exe]
,它只是退出没有任何消息。我通过dumpbin /headers [my exe]
检查头来验证它是否可以使用超过2GB。
最后,重新运行sn.exe
命令,得到以下输出:
Failed to verify assembly -- Strong name validation failed for assembly '[my exe]'
有任何想法我可以启用LARGEADDRESSAWARE功能而不破坏强名称验证吗?
强名称考虑了强命名文件的哈希值;通过使用editbin.exe LARGEADDRESSAWARE
更改文件,您正在更改文件,从而更改文件的哈希值,从而使强名称无效。
您需要更改生成步骤,并在运行强名称步骤之前确保程序集与您所希望的完全一致。根据您的构建管道,这可能意味着不要在Visual Studio中对其进行强命名,而是使用命令行来命名。