混合.NETアセンブリ(つまり、管理されていないマネージ/アンマネージのC++アセンブリを意味する)のCLRとCRTの初期化の順序についていくつか質問があります。混合管理/非管理アセンブリのロード順序
私は、混在モードのアセンブリdllファイルを持っており、Assembly.Load経由でロードされます。私は、静的なネイティブオブジェクトは、いくつかのマネージコードが最初に呼び出されるまで、初期化または呼び出されないことに気付きます。 OK。だから私は、起動時にCLRコードが最初に初期化され、CRTの初期化が最後に呼び出されるようにします。シャットダウンの順序はどうですか? CRTのシャットダウンが先に行われ、CLRのシャットダウンは最後に行われますか?
これはどのように行くのですか?
start of program lifetime
initilialize CLR
...initilialize CRT
...construct native static instances
... program runs....
...shutdown CLR
...destruct native static instances
shutdown CLR
end of program lifetime
他の順番ですか?
私の質問は、実行可能ファイル(つまり.exe)である混合モードアセンブリにも当てはまります。それは似ていますか?
start of program lifetime
initilialize CLR
...initilialize CRT
...construct native static instances
... program runs....
...shutdown CLR
...destruct native static instances
shutdown CLR
end of program lifetime
Assembly.Load()を使用すると、かなり前にCLRが初期化されていることがわかります。 CRTは、「module initializers」と呼ばれる曖昧なCLI機能によって初期化されます。クラス初期化子に似ていますが、アセンブリがロードされると自動的に実行されます。 AppDomain :: DomainUnloadおよびProcessExitのイベントハンドラによって、CLRが終了する前に初期化されなくなります。たぶんあなたはこの質問をする理由に焦点を当てるべきです。 –
Reedとの私のコメントを部分的に説明しています。 –