10

私はMSILマネージコードと混同していますが、それらは同じですか、それとも異なりますか?つまり、C#コードをビルドするとどうなりますか?

どちらが正しいですか

C# Code → C# compiler → Managed Code → MSIL

また

C# Code → C# compiler → MSIL

あなたの答えを裏付ける本物の参照またはリンクを提供してください。

4

5 に答える 5

13

あなたはさまざまなことを混乱させています。マネージ コードは、マネージ言語 (C#、VB.NET、F# など) で記述されたコードで、CIL (Common Intermediate Language、以前の Microsoft Intermediate Language または MSIL) にコンパイルされ、CLR のマネージ環境で実行されます。

一方、アンマネージ コードはネイティブ コード (アセンブリとも呼ばれます) に直接コンパイルされ、CLR では実行されません。

C# コードをビルドすると、CIL にコンパイルされます。これが、ildasm や Reflector などのツールを使用してコンパイル済みコードを検査できる理由です。CIL コードを実行すると正確に何が起こるかは、状況によって異なります。かもしれない

  1. JIT コンパイラ (最も一般的なオプション) を使用して「ジャスト イン タイム」にネイティブ コードにコンパイルされます。
  2. コンパイル済みのネイティブ コードを使用して実行されます (NGEN を使用して取得できます)。
  3. 直接解釈; Windows CE 用の .Net のいくつかのバージョン、または同様のバージョンがそれを行うと思います。
于 2012-04-24T12:13:50.017 に答える
11

コメントに記載されているように、MSILはCILに名前が変更されました。

C# Code --> C# compiler --> CIL

なぜなら

CIL = Managed

その文脈に置くと、

Native Code = Unmanaged

Managed Codeこれは完全に異なるものであり、ソースコードを参照していることに注意してください。


それを拡張したい場合、修正された完全なプロセスは次のとおりです。

.NET Code --Compiler--> CIL (Managed) --JIT/NGEN--> Native Code (Unmanaged)


参照:

  1. C#の紹介(.NET Frameworkとは何ですか?->CILとJIT->最初の2つの文)

  2. JIT / NGEN(マネージコードのコストモデルに向けて->ジャストインタイムコンパイラ->全体)

于 2012-04-24T11:44:35.767 に答える
3

CLRの制御下で排他的に実行するように記述されたコードは、マネージコードと呼ばれます。(ソース)。それで

C#コード→C#コンパイラ→CIL(旧称MSIL)

正しい。

于 2012-04-24T11:49:11.707 に答える