Подтвердить что ты не робот

Что означает compilationOptions.emitEntryPoint?

Просто установил инструменты rc1 и создал новый веб-проект, чтобы увидеть, что изменилось в шаблоне.

Я заметил, что project.json теперь содержит:

"compilationOptions": {
    "emitEntryPoint": true
}

Но неясно, что это делает.

Есть ли у кого-нибудь идеи?

4b9b3361

Ответ 1

Как уже упоминалось ниже: похоже, что это флаг для компилятора, указывающий, что проект представляет собой консольное приложение или библиотеку (а именно: консольное приложение должно содержать public static void Main())

Здесь вы можете увидеть источник .

В новом шаблоне веб-приложения RC1 по умолчанию вы заметите, что внизу Startup.cs существует новый метод выражения, который действует как точка входа:

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

Если вы удалите этот метод, выполните команду build (dnu build), вы получите сообщение об ошибке:

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

Однако, если вы измените флаг emitEntryPoint на false и попытаетесь построить снова, он будет успешным. Это происходит потому, что он создает библиотеку вместо консольного приложения.

Ответ 2

Я вижу это в источнике;

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

Похоже, он сообщает компилятору, создавать ли консольное приложение или библиотеку.

Дополнительно, если вы создаете новую библиотеку классов (пакет) и консольное приложение (пакет) в VS2015, вы увидите, что project.json для Консольного приложения включает в себя следующее, в то время как библиотека классов не работает;

"compilationOptions": {
  "emitEntryPoint": true
}