编译选项中的emitEntryPoint是什么意思?

28

刚刚安装了rc1工具,并创建了一个新的Web项目,以查看模板中发生了什么变化。

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

"compilationOptions": {
    "emitEntryPoint": true
}

但是这个的作用还不清楚。

有人知道吗?

2个回答

26

如下所述:这似乎是一个向编译器发出信号的标志,表明该项目是控制台应用程序还是库(即控制台应用程序必须包含public static void Main()

您可以在此处查看源代码。

在新的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并尝试再次构建,它将成功。这是因为它正在创建一个库而不是控制台应用程序。


10

我在源代码中看到了这个;


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

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

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

"compilationOptions": {
  "emitEntryPoint": true
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接