Sto solo cercando di ottenere una migliore comprensione di ciò che accade in un semplice scenario in cui viene aggiunto il seguente codice in un file e salvato con l'estensione .cs:Il file .exe prodotto dal compilatore C# è costituito esclusivamente da Common Intermediate Language (CIL)?
public class HelloWorld
{
public static void Main()
{
System.Console.WriteLine("Hello World!");
System.Console.ReadLine();
}
}
e poi questo programma viene eseguito presso il riga di comando di Windows con:
C:\Windows\Microsoft.NET\Framework\v4.0.30319>csc /t:exe /out:C:\HelloWorld\HelloWorld.exe C:\HelloWorld\HelloWorld.cs
posso vedere questo processo produce un file exe, tuttavia quando la lettura circa la compile process on wikipedia afferma:
- Il codice sorgente viene convertito in Common Intermediate Language (CIL), che è l'equivalente della CLI del linguaggio Assembly per una CPU.
- CIL viene quindi assemblato in un modulo di cosiddetto bytecode e viene creato un assembly CLI.
- Dopo l'esecuzione di un assembly CLI, il suo codice viene passato al compilatore JIT del runtime per generare codice nativo ...
- Il codice nativo viene eseguito dal processore del computer.
Così fa il file exe in sé consiste solo di Common Intermediate Lanaguage? Ed è questo stesso file ciò che l'articolo di wikipedia definisce "assemblaggio CLI"? Sono un po 'confuso perché posso vedere solo il file .exe e per me il termine' assembly 'contiene più di un file.
E RELATIVA domanda:
- è il compilatore JIT da qualche parte nella directory Microsoft.NET e su eseguendo il file exe il file comunica con il compilatore JIT che poi emette le istruzioni in codice nativo?
Penso che il tuo terzo punto dovrebbe essere '1 o più moduli', se non ci sono moduli allora non c'è nessun posto dove mettere il manifest. È anche interessante notare che un assembly può estendersi su più file e un modulo senza manifest può appartenere a più assiemi. –