我正在使用editbin
修改程序集的堆栈大小,请参见Increase stack size of main program or create a new thread with larger stack size for recursive code blocks?
现在我要问自己:装配体在生成后事件之前或之后是否用强名称签名?因为editbin
正在更改构建后事件中的程序集。
我的帖子构建事件如下:
"$(DevEnvDir)..\..\VC\bin\editbin.exe" /STACK:16777216 "$(TargetPath)"
我的项目.csproj
文件包含以下几行:
<PropertyGroup>
<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>..\STRONGNAME.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
<PropertyGroup>
<PostBuildEvent>"$(DevEnvDir)..\..\VC\bin\editbin.exe" /STACK:16777216 "$(TargetPath)"</PostBuildEvent>
</PropertyGroup>
答案 0 :(得分:0)
在生成后事件之前,在之前对装配体进行签名。这意味着editbin
将更改该程序集,并且签名不再有效。
sn.exe -v assembly.exe
将返回Failed to verify assembly -- Strong name validation failed ...
获取使用editbin
修改的有效签名程序集的一种解决方法是使用AfterCompile
事件,并使用sn
对该程序集进行签名。
项目文件应如下所示:
<Target Name="AfterCompile">
<Exec Command="
"$(DevEnvDir)..\..\VC\bin\editbin.exe" /STACK:16777216 "$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)"
echo $(FrameworkSDKDir)bin\NETFX 4.5.1 Tools\
"$(FrameworkSDKDir)bin\NETFX 4.5.1 Tools\sn.exe" -Ra "$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)" "$(SolutionDir)\STRONGNAME.snk"
" />
</Target>
<PropertyGroup>
<PostBuildEvent>REM "See AfterCompile for stack size and resigning"</PostBuildEvent>
</PropertyGroup>