我安装了Visual Studio 2015 RC来试用ASP.Net vNext模板。在“Web”部分中,我注意到一个控制台应用程序显示为
我决定把它弄得乱七八糟,我发现了一些有趣的观点:
Main()
指定为static
。System.CodeDom
和System.Net
都不可用。System.Console.ReadKey
等许多方法。这些vNext控制台应用程序是什么?为什么限制以及它们的用途是什么?
答案 0 :(得分:6)
什么是vNext控制台应用程序?
它是在新的.NET运行时环境(DNX)中运行的控制台应用程序。
为什么限制以及它们的用途是什么?
出现限制是因为您的目标是.NET Core(dnxcore50
)而不是(或除了)完整的.NET Framework(dnx451
)。使用这些限制,至于我知道,是允许与许多不同的操作系统交叉兼容。也就是说,.NET Core比完整框架具有更少的功能,因为它更容易与许多系统兼容。加班,这些限制可能会因为更多的完全跨平台而消失。
{p>默认模板未将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
。我最后一次检查System.Net
时也是如此。因此,如果您想使用这些,请确保定位dnx451
而不是dnxcore50
。
想要删除限制吗?只需从dnxcore50
文件中删除project.json
条目即可。然后,您只会无限制地定位完整框架。
https://msdn.microsoft.com/en-us/magazine/dn913182.aspx
'Console' does not contain a definition for 'ReadKey' in asp.net 5 console App
答案 1 :(得分:3)
这些控制台应用程序正在利用新的.NET execution environment(DNX,以前的KRE)。它包括一个新的项目系统,允许您定位different versions of the CLR。
其中一个版本是CoreCLR,它是.NET的精简版本。此版本是模块化的,其libraries作为一堆NuGet包分发。在针对.NET Core(project.json文件的依赖项部分)时,您可能需要包含一些其他软件包。
尽管如此,一些限制可能源于这样一个事实,即并非所有的API都已迁移到.NET Core或者它们不会迁移到.NET Core,因为.NET Core上的API表面较小。
答案 2 :(得分:0)
我正在慢慢浏览新的运行时,并将使用相关参考更新此帖子。
Microsoft.Framework.Runtime.Sources.EntryPointExecutor->TryGetEntryPoint() 是否有一段代码正在挑选Program类及其Main函数