关于asp.net:我可以使用多个DNX 版本吗?

Can I use many DNX versions?

我创建了一个新的 ASP.NET 5 项目,但遇到了一些我不太了解新 ASP.NET 的工作原理的问题。

在我的参考资料中有 DNX 4.5.1 和 DNX Core 5.0。当我从 Nu-Get 安装新包时,有些包在两者中都安装成功,有些告诉我 DNX Core 5.0 不支持它们。

我是否可以使用多个版本的 DNX 来支持我的包,或者我必须将这些东西与 DNX Core 5.0 绑定才能享受 ASP.NET 5 的优势,例如跨平台等?


ASP.NET 5 项目是多目标的,这意味着您可以同时针对多个平台进行编译。在您的情况下,.NET 4.5.1 面向完整 .NET 运行时 (4.5.1) 和 .NET Core (5.0) 上的 ASP.NET 5。当您编译项目时,ASP.NET 5 实际上为这两个目标创建了输出,因此 - 假设您获得了为两个平台编译的代码 - 应用程序可以在其中任何一个上运行。可以为您的项目运行其他目标。

当您实际运行应用程序时,您必须选择要在其下运行的 .NET 运行时的特定版本。在 Visual Studio 中,项目设置中有一个下拉菜单,您可以在其中选择实际执行的运行时。当您使用命令行发布时,您还可以使用参数指定要发布到哪个平台(如果省略它,我相信它将使用活动的 DNX 运行时)。

至于差异 - .NET Core 是完整 .NET 运行时的精简版,它是跨平台的,可以在 Windows 和其他平台(如 Linux 和 OSX)上运行。由于它必须在其他平台上运行,因此此运行时不支持许多特定于平台的 Windows 功能,并且由于该平台仍在发展中,因此在 .NET Core 中还没有实现一些 API。这就是当您使用现有代码/库定位 .NET Core 时,您可能会看到许多编译错误的原因。为了在 .NET 核心上运行,现有的 .NET 代码通常需要至少进行一些小的调整,以解决更小的 API 占用空间和潜在的严重重新设计以解决缺失的功能。

如果您需要使用现有代码并依赖于基于以前版本 .NET 的程序集/NuGet 包,您必须坚持使用完整的 .NET 版本。您仍然可以利用新的 ASP.NET 5 功能和生态系统,以及从以前的 .NET 版本中获得您习惯的完整 .NET 运行时和完整 API 界面的好处。缺点是运行时仅适用于 Windows 并且具有更大的资源占用。

.NET Core 是一个新的运行时,您应该如此对待它。迁移到这个平台可能不是一项微不足道的任务。该平台的优点是占用空间更小,并且可以跨多个操作系统平台运行。

随着 Microsoft 扩展功能集和跨平台兼容性,.NET Core 的全部潜力可能需要一些时间才能实现,但我们真的不知道这会是什么样子,因为它是仍处于 Beta 版(好吧 RC,但它确实是一个 Beta 版,RC2 中仍在进行重大更改)。