在生成后事件之前或之后,程序集是否用强名签名?

时间:2019-06-12 08:22:03

标签: c# .net-assembly signing post-build-event strongname

我正在使用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>

1 个答案:

答案 0 :(得分:0)

在生成后事件之前,在之前对装配体进行签名。这意味着editbin将更改该程序集,并且签名不再有效。

sn.exe -v assembly.exe将返回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>