2

私はそれが何をするかを知っていますが、それがどのように実行されるかについての説明を見つけていません。Java とは異なり、プログラムを実行するために仮想マシンの実行可能ファイルを呼び出す必要はありません。

.NET では、実行可能ファイルを通常どおり実行するだけです。それはWindowsサービスですか?.Net 実行可能ファイルによって参照される DLL ですか? オペレーティング システムのカーネルにバインドされていますか? アンチウイルスのようなインターセプターの一種ですか?それは何ですか?

4

3 に答える 3

3

Windows NT で実行可能ファイルに使用され、その後、PE ヘッダー内のメタデータを使用して CLR 実行可能ファイルをサポートするPortable Executable形式。

.NET Framework がインストールされている場合、Windows はこの情報を認識し、それを使用して実行可能ファイルで CLR を起動します。

于 2013-01-30T00:09:12.940 に答える
2

お使いの Windows のバージョンによって異なります。ただし、基本的なメカニズムでは、すべての .NET アセンブリに5バイトのアンマネージ コードが含まれます。EXE の場合、c:\windows\system32\mscoree.dll の _CorExeMain() への JMP 命令です。次に、CLR を初期化し、プログラムの Main() メソッドを開始するという面倒な作業を行います。

それ以降のバージョンの Windows には、.NET アセンブリの形式を認識し、mscoree.dll と直接統合するローダーがあります。32 ビットの実行可能ファイルが 64 ビット プロセスを開始できるという非常に珍しい機能をサポートするために必要です。詳細については、この回答を参照してください。

これは 10,000 フィート ビューです。.NET と Java の本質的な違いは、.NET アセンブリにはアンマネージ コード (JMP など) とデータ (アセンブリ マニフェストと IL) の両方を含めることができることです。Java .class または .jar ファイルは純粋なデータです。

于 2013-01-30T00:30:39.910 に答える
0

私の記憶が正しければ、初期バージョンの .net は Windows によって自動的に読み込まれませんでしたが、長年にわたって Windows のリリースが増えるにつれて、プロセスのブートストラップは今ではほとんど見られなくなりました。

.Net の CLR は、Microsoft による CLI Common Language Infrastructureの実装です。Mono はその別の実装です。

技術的には、CLR は Windows で実行され、.net アセンブリの実行を管理する COM サーバー コンポーネントとして実装されます。

詳細を本当に知りたい場合は、Jeffrey Richter の本「CLR via C# 」を参照してください。

于 2013-01-30T00:26:54.363 に答える