3

ASP.Netのライフサイクルと同様に、C#コンソールアプリケーションに何らかのライフサイクルがあるかどうかを知りたいと思います。

特に興味があります

  • アセンブリの解決-これはいつ発生しますか
  • static Mainコンパイル-メソッドは依存オブジェクトのコンパイルにどのように影響しますか
4

1 に答える 1

6

通常、各メソッドは最初に実行されたときにJITされ、必要に応じてアセンブリの解決が再度行われます。これは通常、「まだ必要のないアセンブリを使用するメソッドのJIT中に」を意味します(ただし、リフレクションを介して)。 。

static 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アセンブリ解決エラーを引き起こしている場合に役立ちます...最初に正常にJITできない場合はcatch、何かを入れることができないためです。MainMain

ライフサイクルは...

  • エントリポイントが開始されます(Main
  • バックグラウンド以外のスレッドが存在しない場合、アプリケーションは終了します。「終了時」を意味する典型的な線形コンソールexeの場合Main、スレッドサーバーの例ではより複雑になる可能性があります
    • または、内部または外部から早期に終了する可能性があります
于 2012-04-24T07:24:07.277 に答える