2015-11-24 4 views
26

Sie haben die rc1-Tools installiert und ein neues Webprojekt erstellt, um zu sehen, was sich in der Vorlage geändert hat.Was bedeutet compilationOptions.emitEntryPoint?

bemerkte ich, dass project.json jetzt enthält:

"compilationOptions": { 
    "emitEntryPoint": true 
} 

Aber es ist unklar, was dies tut.

Hat jemand eine Idee?

Antwort

25

Wie weiter unten erwähnt: Es sieht aus wie es ein Flag für den Compiler ist, um anzuzeigen, dass das Projekt ist eine Konsolenanwendung gegenüber einer Bibliothek (nämlich: eine Konsolenanwendung public static void Main() enthalten)

Sie können siehe von source hier.

In der neuen RC1 Standard-Web-Anwendungsvorlage, werden Sie am unteren Rand des Startup.cs bemerken, dass es ein neuer Ausdruck bodied Methode, die als Einstiegspunkt wirkt:

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

Wenn Sie diese Methode entfernen Sie dann ausführen ein Build (dnu build) erhalten Sie eine Fehlermeldung erhalten:

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

wenn Sie jedoch die emitEntryPoint Flagge zu false ändern und wieder aufzubauen versuchen, wird es gelingen. Dies liegt daran, dass eine Bibliothek statt einer Konsolenanwendung erstellt wird.

10

Ich sehe das in der source;

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

Offenbar teilt es dem Compiler mit, ob eine Konsolenanwendung oder eine Bibliothek erstellt werden soll.

Wenn Sie in VS2015 eine neue Klassenbibliothek (Paket) und Konsolenanwendung (Paket) erstellen, sehen Sie, dass project.json für die Konsolenanwendung Folgendes enthält, während die Klassenbibliothek dies nicht tut.

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

das macht Sinn. Vielen Dank –