editbin
使用强名称密钥对程序集进行签名时,在构建后事件中使用的第一种方法失败。程序集更改后,使用editbin
签名程序集的验证将失败。sn.exe -v assembly.exe
将返回Failed to verify assembly -- Strong name validation failed ...
另见:
使用该AfterCompile
事件并退出程序集是一种解决方法(我现在正在使用)。项目文件应包含以下行:
<Target Name="AfterCompile">
<Exec Command="
"$(DevEnvDir)..\..\VC\bin\editbin.exe" /STACK:16777216 "$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)"
"$(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>
当我阅读以下答案时,我意识到编译后事件:https ://stackoverflow.com/a/22617361/7556646
第二种方法,但对于孔程序,而不仅仅是递归代码块,看起来像这样:
static class Program
{
[STAThread]
static void Main(string[] args)
{
Thread thread = new Thread(delegate()
{
Main2(args);
}, 16 * 1024 * 1024);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
}
static void Main2(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(app);
}
}
第二种方法的缺点是 BackgroundWorker DoWork 事件的堆栈大小仍然是 1 MB(32 位或任何)或 4 MB(64 位)。
另见:
- 为这个计算创建一个具有更大堆栈大小的新线程有什么缺点?
- 合理的堆栈大小是多少?
请参阅 Hans Passant 的评论。