web-dev-qa-db-ja.com

compilationOptions.emitEntryPointはどういう意味ですか?

Rc1ツールをインストールし、新しいWebプロジェクトを作成して、テンプレートの変更点を確認しました。

今、project.jsonに以下が含まれていることに気づきました:

"compilationOptions": {
    "emitEntryPoint": true
}

しかし、これが何をするかは不明です。

誰かがアイデアを持っていますか?

27
SaphuA

下記のとおり:プロジェクトがコンソールアプリケーションではなくライブラリであることを示すのは、コンパイラーに対するフラグのようです(つまり、コンソールアプリケーションにはpublic static void Main()が含まれている必要があります)。

source から確認できます。

新しいRC1のデフォルトのWebアプリケーションテンプレートでは、Startup.csエントリポイントとして機能する新しい式のボディメソッドがあります。

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

このメソッドを削除すると、ビルド(dnu build)エラーが発生します:

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

ただし、emitEntryPointフラグをfalseに変更して、もう一度ビルドしようとすると、成功します。これは、コンソールアプリではなくライブラリを作成しているためです。

25
armen.shimoon

これは source ;にあります。

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

コンソールアプリケーションとライブラリのどちらを作成するかをコンパイラーに指示するように見えます。

さらに、VS2015で新しいクラスライブラリ(パッケージ)とコンソールアプリケーション(パッケージ)を作成すると、コンソールアプリケーションのproject.jsonに以下が含まれますが、クラスライブラリには含まれません。

"compilationOptions": {
  "emitEntryPoint": true
}
10