![enter image description here](https://istack.dev59.com/Ib8xi.webp)
- 默认模板没有将`Main()`指定为`static`。 - 许多程序集,例如`System.CodeDom`和`System.Net`是不可用的。 - 许多方法,例如`System.Console.ReadKey`无法使用。
这些vNext控制台应用程序是什么?为什么有这些限制?它们有什么用处?
什么是vNext控制台应用程序?
它是在新的.NET运行时环境(DNX)中运行的控制台应用程序。
为什么有限制,限制的用途是什么?
限制是因为您正在针对.NET Core (dnxcore50
)而不是(或除了)完整的.NET Framework (dnx451
)。就我所知,使用这些限制是为了允许与许多不同的操作系统进行交叉兼容。也就是说,.NET Core的功能比完整框架少,因为这样更容易与许多系统兼容。随着时间的推移,随着更多内容被完全跨平台化,这些限制可能会消失。
默认模板未将Main()指定为静态方法。
DNX
附带Microsoft.Framework.ApplicationHost
。此默认应用程序主机“知道如何查找public void Main
方法。这是设置ASP.NET托管层的入口点...”它还知道如何找到传统的static void Main
方法。实例Main
方法的优点是可以让我们请求运行时环境将服务注入到我们的应用程序中。
许多程序集,如System.CodeDom和System.Net不可用。许多方法,例如System.Console.ReadKey不能使用。
System.Console.ReadKey
在dnx451
中可用,但在dnxcore50
中不可用。我上次检查时也是这样。因此,如果要使用它们,请确保将目标设置为dnx451
而不是dnxcore50
。
想要删除限制?只需从您的project.json
文件中删除dnxcore50
条目。然后,您将仅针对没有限制的完整框架。
https://msdn.microsoft.com/en-us/magazine/dn913182.aspx
'Console' does not contain a definition for 'ReadKey' in asp.net 5 console App
我正在慢慢地研究新的运行时,并将在此帖子中更新相关参考资料。
Microsoft.Framework.Runtime.Sources.EntryPointExecutor->TryGetEntryPoint() 这段代码正在挑选出 Program 类和它的 Main 函数。