【发布时间】:2021-10-18 15:23:27
【问题描述】:
我有一个测试套件,其 Main 函数返回 1。但是,应用程序终止后的退出代码为 0。
这似乎与我在后台运行的 ASP.NET 服务器有关。如果我禁用服务器,退出代码如预期的那样为 1。
此代码按预期工作,控制台报告退出代码 1(这是 F# 语法,但我很确定这不相关):
[<EntryPoint>
let main (arts : string array) : int =
1
虽然它的退出代码为 0,但这不是我所期望的:
[<EntryPoint>
let main (arts : string array) : int =
MyHttpServer.init()
1
这是 MyHttpServer.init 函数:
let init() : Task =
Host
.CreateDefaultBuilder()
.Build()
.RunAsync()
我的问题:让服务器在后台运行导致退出代码为零的原因是什么? .NET 中是否存在退出代码受后台任务和线程影响的地方?
注意:.NET 6 preview 5,但这发生在我从 .NET 5 开始使用的所有版本上。
【问题讨论】:
-
如果您可以选择,使用退出代码通常不是一个好主意。进程中代码的任何部分都可以调用Environment.Exit,或者设置代码(c#)或ExitProcess(winapi),%ERRORLEVEL% env变量,例如:github.com/dotnet/aspnetcore/blob/main/src/Hosting/Hosting/src/…。您可以做的是使用调试器并在 ExitProcess 上放置一个断点。
标签: asp.net .net asp.net-core .net-core