.NET Core应用程序是否需要在目标机器上安装.NET运行时?

9
在这个视频中,Scott Hanselman采访了ASP.NET团队的一位成员。他说,ASP.NET 5的目标之一是,在.NET Core的基础上,应用程序不会依赖于托管服务器上的.NET Framework和GAC程序集。相反,.NET Core库将通过NuGet包发布,并且应用程序将随其依赖项一起部署。
其中一个原因是微软可以快速发布错误修复或新功能,我们不必等待新版本(完整框架的版本)安装在我们的托管环境中。
我的问题是:
基于.NET Core构建的应用程序是否真正独立于目标机器上安装的.NET版本,并且即使没有安装.NET Framework,它们是否可以运行?
2个回答

7
是的,您在应用程序中使用的框架完全独立于目标服务器上安装的.NET Framework,因为核心.NET Framework是通过NuGet包引用的,并且可以通过DNX Utility进行打包以进行部署,特别是对您来说,dnu publish命令非常有用。
以下是描述dnu publish命令功能的摘录:

发布(dnu publish

发布命令将会将您的应用程序打包成一个可自行启动的目录。它将会创建以下目录结构:

  • output/
  • output/packages
  • output/appName
  • output/commandName.cmd

packages目录包含应用程序运行所需的所有软件包。

如果您有项目引用,appName目录将包含您的所有应用程序代码,并且它们将作为自己的目录出现在此级别的代码中。


因此,.NET Core 将存在于 output/packages 目录中,无需在目标服务器上安装。

值得比较的是Unity游戏如何打包足够多的Mono DLL以独立于框架,并且可以在机器上无需任何.NET或Mono安装而正常运行。.NET Core允许应用程序相对容易地进行安装。 - Jon Hanna
那么需要在目标机器上安装什么? - Sean
@Sean - 需要一个托管应用程序的东西(比如 IIS)。 - Karl Anderson
如果您正在使用自托管,那么它是否是一个100%独立的应用程序? - Sean
但是运行时呢?运行时(CoreCLR)是否也与应用程序一起打包,还是必须以某种方式存在于目标机器上? - Liero
现在他们放弃了dnu/dnx,这个答案仍然适用吗? - Keith Pinson

3

一个普通的 .net core 应用程序需要在你想要运行该应用程序的机器上安装 .net core。然而,有一种方法可以避免这个问题,那就是发布一个自包含的应用程序。你可以将你的应用程序与所需版本的 .net core 一起发布。这会使你的应用程序变得更大,但如果你只需要在一台机器上运行一个应用程序来运行 .net,你需要一个特定版本的 .net,或者你想制作一个便携式应用程序,这是一个不错的选择。


这在以前的 .net 框架中是正确的,不是吗?那么实际上发生了什么变化呢? - Liero
@Liero 我认为在打包应用程序之前,你无法将 .net framework 与其一起打包。 - Sorrien

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