使用将net461设置为唯一框架的ASP.NET Core Web应用程序(.NET Core)与使用(.NET Framework)模板的区别

63

随着.NET Core RC2的发布,微软推出了3种Web应用程序模板:

  • ASP.NET Web应用程序(.NET Framework)—旧版
  • ASP.NET Core Web应用程序(.NET Framework)—新版,仅在Windows上托管
  • ASP.NET Core Web应用程序(.NET Core)—适用于Linux、OSX和Windows

我尝试使用新的Core Web应用程序模板,但不想针对Linux、OSX和Windows进行开发。因此,似乎ASP.NET Core Web应用程序(.NET Framework)非常适合我的需求。经过一番探索,我发现要添加能够与此项目类型一起工作的类库,需要添加一个Class Library (.NET Core),并将框架部分更改为只有net461,以匹配Web应用程序。

"frameworks": {
    "net461": { }
}

我的问题:

创建一个ASP.NET Core Web应用程序(.NET Core),并在project.json中仅将net461设置为目标框架,与仅创建默认包含net461的ASP.NET Core Web应用程序(.NET Framework)项目有何区别?

除了发布项目的方式等我没有意识到的其他差异之外还有吗?

4个回答

44
“创建一个ASP.NET Core Web应用程序(.NET Core)并在project.json中将.NET461设为唯一的目标框架”与创建一个ASP.NET Core Web应用程序(.NET Framework)项目是相同的。这两个项目类型的区别取决于.csproj文件,您可以在.csproj文件中从.NET Core改为.NET Framework。在以前的ASP.NET Core版本中,project.json文件中可以同时拥有两个框架,但.NET Core 2.0已经简化了.csproj文件,更多的.NET开发人员熟悉它,并且只能发布到其中一个框架。如果您选择.NET Framework而不是.NET Core,则应用程序无法跨平台运行,只能在Windows上运行,而不能在Linux/Mac上运行。”
在ASP.NET Core Web应用程序中,存在.NET Core.NET Framework两种不同的类型,原因是后者允许您使用依赖于Windows操作系统和相同的.NET Framework或更高版本的功能、包或第三方库。前者不需要.NET Framework,但可以实现跨平台,并且当您发布应用程序时,它会将所有依赖的.NET Core dll文件发布到发布目录中,从而规避了.NET Framework的安装要求。此外,如果您针对.NET Core并使用Windows特定的功能或包,则会出现编译错误。您可以通过调整.csproj来轻松切换两者。Microsoft Docs 当您需要满足以下需求时,请使用 .NET Core 作为您的服务器应用程序:
  • 您需要跨平台支持。

  • 您正在针对微服务进行开发。

  • 您正在使用 Docker 容器。

  • 您需要高性能和可扩展的系统。

  • 您需要通过应用程序使用不同版本的 .NET 并行运行。

当您需要满足以下需求时,请使用 .NET Framework 作为您的服务器应用程序:

  • 您的应用程序当前正在使用 .NET Framework (建议扩展而非迁移)。
  • 您需要使用 .NET Core 不提供的第三方 .NET 库或 NuGet 包。
  • 您需要使用 .NET Core 不支持的 .NET 技术。
  • 您需要使用不支持 .NET Core 的平台。

已经宣布ASP.Net Core 3将于2019年第一季度发布,仅支持.NET Core,而不支持.NET Framework

本月早些时候在.NET博客上宣布,由于.NET Framework的就地更新性质和限制可能会破坏现有应用程序的更改,因此.NET Framework将获得较少的新平台和语言功能,而这些功能将移动到.NET Core。为了确保ASP.NET Core可以充分利用.NET Core未来的改进,从3.0开始,ASP.NET Core只能在.NET Core上运行。未来,您可以简单地将ASP.NET Core视为.NET Core的一部分。 今天在.NET Framework上使用ASP.NET Core的客户可以继续使用2.1 LTS版本以完全支持的方式进行。根据.NET支持政策,对2.1的支持和服务将继续到至少2021年8月21日(其被宣布为LTS版本后的3年)。

7

首先,当您创建针对不同框架的ASP.NET Core Web应用程序时,请查看项目中的project.json文件的差异。

asp.net core在不同框架下的区别

根据您的问题,如果您仅将ASP.NET Core Web应用程序(.NET Core)项目中的框架更改为net461并保存,则它将恢复软件包并会出现以下错误。

输入图像描述

如果删除Microsoft.NETCore.App依赖项并保存文件,则再次恢复依赖项并不会出现任何错误。

如果您注意到第一张图片,这最终成为了一个带有.NET Framework的ASP.NET Core Web应用程序。


3
我起初也感到困惑。主要的区别在于,ASP.NET Web应用程序(.NET Framework)是我们一直在使用的普通ASP.NET。它包含App_Start文件夹、web.config、Global.asax等(就像MVC5一样,你懂的..)。
而ASP.NET Core Web应用程序(.NET Framework)是一个核心框架(MVC6),不依赖于System.Web。全新的project.json、startup.cs和program.cs等。它也支持所有旧的.NET Framework库。

1
这一切都是真的,但它并没有回答问题。简而言之,他正在询问2个 ASP.NET Core 选项的比较,而不是“旧”的 ASP.NET 选项。 - Todd Menier

0

使用 .NET Core,您可以在 Linux 或 Mac OS 上运行 Web 页面应用程序,而 .NET 只适用于 Windows,即不太便携。


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