什么是vNext控制台应用程序?

5
我安装了Visual Studio 2015 RC来尝试ASP.Net vNext模板。在“Web”部分,我注意到一个控制台应用程序的存在,如下图所示: enter image description here 我决定研究一下它,并发现了一些有趣的点:
- 默认模板没有将`Main()`指定为`static`。 - 许多程序集,例如`System.CodeDom`和`System.Net`是不可用的。 - 许多方法,例如`System.Console.ReadKey`无法使用。
这些vNext控制台应用程序是什么?为什么有这些限制?它们有什么用处?

4
这是一篇非常棒的文章:https://msdn.microsoft.com/zh-cn/magazine/dn913182.aspx - Frison Alexander
3
微软在命名和版本控制方面做得很糟糕。DNX比ASP.NET更大。可以创建针对DNX的应用程序或库(并间接地支持一个或多个框架)。该应用程序或库可能与ASP.NET无关。在C#下,将模板控制台应用程序(DNX)和类库(DNX)放在一起更加合理。如果您仍然想知道为什么这些项目模板在ASP.NET下,则请参见第一句话。在发布候选版之前,该模板甚至被称为“ASP.NET 5控制台应用程序”,可谓更糟糕了。 - Gerald Davis
3个回答

6

答案

什么是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.ReadKeydnx451中可用,但在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

Using System.Net.Mail in ASP NET MVC 6 project


3
那些控制台应用程序正在利用新的.NET执行环境(DNX,之前是KRE)。它包括一个新的项目系统,并允许您针对不同版本的CLR进行定位。
其中一个版本是CoreCLR,这是.NET的精简版本。这个版本是模块化的,其被分发为一堆NuGet包。当针对.NET Core时,您可能需要包含一些附加包(在project.json文件的依赖项部分)。
尽管如此,一些限制可能源于并非所有API都已迁移到.NET Core或者由于API表面在.NET Core上更小而不会迁移。

0

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