Подписана ли сборка со строгим именем до или после события после сборки? - PullRequest
0 голосов
/ 12 июня 2019

Я изменяю размер стека сборки, используя editbin, см. Увеличить размер стека основной программы или создать новый поток с большим размером стека для блоков рекурсивного кода?

Теперь я спрашиваю себя: подписана ли сборка со строгим именем до или после события после сборки?Потому что editbin меняет сборку в событии после сборки.

Мой пост-build-событие выглядит так:

"$(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 голосов
/ 12 июня 2019

Сборка подписывается со строгим именем до события после сборки. Это означает, что 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>
...