compilationOptions.emitEntryPoint是什么意思?

时间:2015-11-24 08:24:51

标签: asp.net-core project.json

刚刚安装了rc1工具并创建了一个新的Web项目,以查看模板中的更改内容。

我注意到project.json现在包含:

"compilationOptions": {
    "emitEntryPoint": true
}

但目前还不清楚这是做什么的。

有没有人有想法?

2 个答案:

答案 0 :(得分:25)

如下所述:看起来它是编译器的标志,表明项目是控制台应用程序而不是库(即:控制台应用程序必须包含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并尝试重新生成,则会成功。这是因为它正在创建一个库而不是一个控制台应用程序。

答案 1 :(得分:10)

我在source;

中看到了这一点
var outputKind = compilerOptions.EmitEntryPoint.GetValueOrDefault() ?
    OutputKind.ConsoleApplication : OutputKind.DynamicallyLinkedLibrary;

看起来它告诉编译器是创建控制台应用程序还是库。

另外,如果在VS2015中创建新的类库(包)和控制台应用程序(包),您将看到控制台应用程序的project.json包含以下内容,而类库则不包含;

"compilationOptions": {
  "emitEntryPoint": true
}