DNX与DNX Core的区别

23

我已经开始了一个非常简单的ASP.Net MVC(beta)项目,使用VS2015,并且在理解DNX和DNX Core引用方面遇到了问题。

在这个例子中,我尝试使用DateTime.ToShortDateString(),并启用了DNX Core的智能感知。

DNX Core Error

我明白这是因为DNX Core没有实现它,可以用编译指令来包装它。

Conditional Compilation

这是正确的方法吗?这两个平台之间的差异是否有文档记录?最后,如果我只在Windows上使用IIS,DNX Core提供了什么东西,或者我的第一项任务是从project.json文件中删除它?

1个回答

20

我猜唯一的答案是这取决于具体情况。

Dnx vs Dnx Core

Dnx 运行在今天的 .NET Framework 上(也可以运行在 mono 上)并且可以访问完整的.NET 4.5.2(现在是 .NET 4.6) BCL。基本上自从 1.0 版本以来,所有东西都已经添加到了 .NET 中。

Dnx Core 运行在 CoreClr 之上,它实际上是 .NET Framework 的一个简化版本。有些功能会缺失,有些功能出于各种原因永远不会被转移到 CoreClr 上。我不知道具体哪些功能会/不会被迁移到 CoreClr 上。您可以在corefxcoreclr github 项目中查看哪些功能已经存在。

现在问题真正涉及的是最佳方案。您有几个选择。

如果您永远不打算在 CoreCLR 上运行该项目,则可以将其从 project.json 中删除。

如果您计划在 CoreCLR 上运行(无论原因是什么),则可以采取以下措施:

  • 使用环境的通用 API 方法

    在您的情况下,如果 theDate.ToString("d") 等价于 theDate.ToShortDateString(),那么为什么不直接使用前者呢?

  • 使用适当的编译器指令 DNX451等。

    对于没有实现您要查找的功能的环境,可以抛出异常或自行实现该功能(如果有意义)。


3
这里存在一个误解,DNX Core并不存在。DNX是一个.NET执行环境,是一个托管进程,基本上对于CoreCLR和CLR来说是相同的,除了运行时加载方面有非常微小的变化。DNX不是我们直接编译或使用的内容,只用于运行代码和其他基础设施。实际的.NET运行时是CLR或CoreCLR(详情请参见:docs.asp.net/en/latest/dnx/overview.html)。 - pg0xC
3
是的,但问题是针对dnx提出的,对于试图理解coreclr和clr之间区别的新用户来说,使用他们在应用程序中看到的相同措辞会更容易。 project.json有dnxcorednx,因此使用这些词语会更简单。尽管运行时可能没有区别,但它们与dnx交互的方式与在PCL中没有dnx的方式可能不同。 - David Driscoll
这是一篇关于“DNX vs DNX core”的非常清晰的文章:http://docs.asp.net/en/latest/getting-started/choosing-the-right-dotnet.html - AlexandruC

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