2015-11-24 20 views
26

Appena installato gli strumenti rc1 e creato un nuovo progetto web per vedere cosa è cambiato nel modello.Che cosa significa compilationOptions.emitEntryPoint?

ho notato che project.json ora contiene:

"compilationOptions": { 
    "emitEntryPoint": true 
} 

ma non è chiaro che cosa questo fa.

Qualcuno ha un'idea?

risposta

25

come indicato di seguito: Sembra che è una bandiera per il compilatore per indicare che il progetto è un'applicazione console contro una libreria (vale a dire: un'applicazione console deve contenere public static void Main())

Puoi vedere dal source qui.

Nel nuovo modello di applicazione web RC1 di default, si noterà in fondo Startup.cs c'è un nuovo metodo di corpo espressione che funge da punto di ingresso:

public static void Main(string[] args) => WebApplication.Run<Startup>(args); 

Se si rimuove questo metodo quindi eseguire una build (dnu build) si otterrà un errore:

error CS5001: Program does not contain a static 'Main' method suitable for an entry point 

Tuttavia, se si cambia la bandiera emitEntryPoint-false e si tenta di costruire di nuovo, sarà un successo. Questo perché sta creando una libreria invece di un'app console.

10

Lo vedo nello source;

var outputKind = compilerOptions.EmitEntryPoint.GetValueOrDefault() ? 
    OutputKind.ConsoleApplication : OutputKind.DynamicallyLinkedLibrary; 

Sembra che dice al compilatore se creare un'applicazione console o una libreria.

In aggiunta, se si crea una nuova libreria di classi (pacchetto) e un'applicazione console (pacchetto) in VS2015, si vedrà che project.json per l'applicazione console include quanto segue, mentre la libreria di classi non lo fa;

"compilationOptions": { 
    "emitEntryPoint": true 
} 
+0

questo ha senso. Grazie –