【问题标题】:Can I use many DNX versions?我可以使用多个 DNX 版本吗?
【发布时间】:2016-01-05 01:45:10
【问题描述】:

我创建了一个新的 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 的优势,如跨平台等?

【问题讨论】:

  • 4.5.1 是 .NET Framework 的配置文件,而 5.0 是 .NET Core 的配置文件。它们是不同的 CLR 环境。如果您的应用需要支持 Linux,也就是跨平台,那么您必须选择 .NET Core 5 并确保所有依赖项都与该环境兼容。许多现有的软件包可能还不兼容。您要么等待作者赶上进度,要么切换到其他一些包。
  • 谢谢!我试图将一些代码从 ASP.NET 4 项目传递到 ASP.NET 5 项目,但我在包兼容性方面遇到了很多问题,主要是我的 WebAPI 所基于的 OWN Selfhost。

标签: asp.net nuget asp.net-core asp.net-core-mvc dnx


【解决方案1】:

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 功能,并且由于平台仍在发展,一些 API 根本尚未在 .NET Core 中实现。这就是在使用现有代码/库以 .NET Core 为目标时可能会看到许多编译错误的原因。为了在 .NET 核心上运行,现有的 .NET 代码通常需要至少进行一些小的调整,以解决较小的 API 占用空间,并可能需要进行认真的重新设计以解决缺失的功能。

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

.NET Core 是一个新的运行时,您应该这样对待它。迁移到这个平台可能不是一项简单的任务。该平台的好处是占用空间更小,并且可以跨多个操作系统平台运行。

随着微软扩展功能集和跨平台兼容性,.NET Core 的全部潜力可能需要一些时间才能实现,但我们不会真正知道它会是什么样子,因为它是仍处于 Beta 版(虽然是 RC,但它确实是一个 Beta 版,RC2 中仍有重大变化)。

【讨论】:

  • 谢谢!我开始构建我大学的期末项目,并开始在 ASP.NET 4 项目(.NET Framework 4.6)中编码,然后我注意到“大型 ASP.NET 5 RC”的公告!所以我尝试将我在第一个项目中所做的一些事情传递给新的 ASP.NET 5 项目,但是很多事情都不起作用。主要是我的 WebAPIs 项目所基于的 OWIN Selfhost 包。好吧,我想至少等一年再使用它是个好主意……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
相关资源
最近更新 更多