程序集是在 post-build 事件之前还是之后使用强名称签名的?

Is an assembly signed with a strong name before or after the post-build event?

我正在使用 editbin 修改程序集的堆栈大小,请参阅

现在我问自己:程序集是在 post-build 事件之前还是之后使用强名称签名的?因为 editbin 正在更改 post-build 事件中的程序集。

我的 post 构建事件看起来像这样:

"$(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>

程序集在 post-build 事件之前使用强名称签名。这意味着 editbin 将更改该程序集并且签名不再有效。

sn.exe -v assembly.exe 将 return Failed to verify assembly -- Strong name validation failed ...

获得使用 editbin 修改的有效签名程序集的解决方法是使用 AfterCompile 事件并使用 sn.

退出程序集

项目文件应如下所示:

  <Target Name="AfterCompile">
    <Exec Command="
&quot;$(DevEnvDir)..\..\VC\bin\editbin.exe&quot; /STACK:16777216 &quot;$(ProjectDir)obj$(ConfigurationName)$(TargetFileName)&quot;
echo $(FrameworkSDKDir)bin\NETFX 4.5.1 Tools\
&quot;$(FrameworkSDKDir)bin\NETFX 4.5.1 Tools\sn.exe&quot; -Ra &quot;$(ProjectDir)obj$(ConfigurationName)$(TargetFileName)&quot; &quot;$(SolutionDir)\STRONGNAME.snk&quot;
" />
  </Target>
  <PropertyGroup>
    <PostBuildEvent>REM "See AfterCompile for stack size and resigning"</PostBuildEvent>
  </PropertyGroup>