C#可执行控制台应用程序的生命周期是什么?

3

我想了解一下C#控制台应用程序是否有类似ASP.Net生命周期的生命周期。

我特别关注以下内容:

  • 程序集分辨率——这是何时发生的
  • 编译——静态Main方法如何影响相关对象的编译

1
控制台程序的生命周期与 Web 应用程序不同,它运行一次就结束了。仅此而已。但是“生命周期”与您提出的其他两个问题无关。另外,“静态 Main 方法如何影响依赖对象的编译”并不太清楚。 - Mr Lister
1个回答

6
通常情况下,每个方法第一次执行时都会进行JIT编译,并且根据需要再次进行程序集解析,这通常意味着“在JIT编译使用我们尚未需要的程序集的方法期间”(但也可能是通过反射实现)。与任何其他方法一样,静态Main方法的工作方式相同;在Main中使用的任何内容都将在Main开始执行之前进行解析。在某些情况下,您可能希望(为了帮助调试):
static int Main(string[] args) {
    try {
        return MainImpl(args);
    } catch(Exception ex) {
        // .. do something
        return -1;
    }
}
[MethodImpl(MethodImplOptions.NoInlining)]
static int MainImpl(string[] args) { ... }

如果通常运行在Main中的代码(但现在在MainImpl中)导致程序集解析错误,那么这将非常有用……因为如果Main不能成功JIT,你就无法在Main中捕获任何东西。

至于生命周期...

  • 入口点被启动(Main
  • 应用程序在没有非后台线程存在时退出;对于典型的线性控制台exe,这意味着“当Main退出”,但在一个多线程服务器示例中可能更加复杂。
    • 或者它可以在内部或外部被提前终止

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接