2015-11-24 19 views
26

Wystarczy zainstalować narzędzia rc1 i utworzyć nowy projekt internetowy, aby zobaczyć, co zmieniło się w szablonie.Co oznacza pozycja compilationOptions.emitEntryPoint?

zauważyłem, że project.json zawiera teraz:

"compilationOptions": { 
    "emitEntryPoint": true 
} 

Ale to jasne, co to robi.

Czy ktoś ma pomysł?

Odpowiedz

25

Jak wspomniano poniżej: Wygląda na to, że jest to flaga do kompilatora, aby wskazać, że projekt jest aplikacją konsola vs biblioteki (w tym: a aplikacja konsola musi zawierać public static void Main())

Można patrz od strony source tutaj.

W nowym domyślnym szablonie RC1 aplikacji internetowych, zauważysz u dołu Startup.cs jest nowy wyraz mocny sposób, który działa jako punkt wyjścia:

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

Jeśli usuniesz ten sposób następnie wykonać kompilacji (dnu build) otrzymasz błąd:

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

jeśli jednak zmienić flagę emitEntryPoint do false i próbować budować kolejny, to uda. Dzieje się tak, ponieważ tworzy bibliotekę zamiast aplikacji konsoli.

10

Widzę to w source;

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

Wygląda na to, że informuje kompilator, czy utworzyć aplikację konsoli, czy bibliotekę.

Dodatkowo, jeśli utworzysz nową bibliotekę klas (pakiet) i aplikację konsoli (pakiet) w VS2015, zobaczysz, że project.json dla aplikacji konsolowej zawiera następujące elementy, podczas gdy biblioteka klas nie zawiera;

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

ma to sens. dzięki –