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

Posted

技术标签:

【中文标题】使用将 net461 设置为唯一框架的 ASP.NET Core Web 应用程序 (.NET Core) 与使用 (.NET Framework) 模板之间的区别【英文标题】:Difference between using the ASP.NET Core Web Application (.NET Core) with net461 set as the only framework and using the (.NET Framework) template 【发布时间】:2016-09-23 22:30:17 【问题描述】:

随着 .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

我正在尝试使用新的核心 Web 应用程序模板,但没有尝试以 Linux、OSX、Windows 为目标,因此 ASP.NET Core Web 应用程序 (.NET Framework) 似乎非常适合我。我花了一段时间,但我了解到,为了添加一个适用于此项目类型的类库,您需要添加一个类库 (.NET Core) 并将框架部分更改为仅 net461 以匹配 Web 应用程序。

"frameworks": 
    "net461":  

我的问题:

创建 ASP.NET Core Web 应用程序 (.NET Core) 和在 project.json 中使 net461 成为唯一的目标框架有什么区别

只是创建一个默认仅包含 net461 的 ASP.NET Core Web 应用程序 (.NET Framework) 项目。

是否还有其他我不知道的差异,例如项目的发布方式等?

【问题讨论】:

【参考方案1】:

使用 .net 核心,您可以在 Linux 或 mac os 中运行您的网页应用程序,而 .net 仅适用于 Windows,即不太便携。

【讨论】:

【参考方案2】:

创建 ASP.NET Core Web 应用程序有什么区别 (.NET Core) 并在 project.json 中使.NET461 成为唯一的目标 框架

这与制作ASP.NET Core Web Application (.NET Framework) 项目相同。两者之间的项目类型由.csproj 文件确定,您在.csproj 中将其从定位.NET Core 更改为定位.NET Framework。在ASP.NET Core 的先前版本/测试版中,可以将两个框架都放在project.json 文件中(已被更多.NET 开发人员熟悉的.NET Core 2.0 中的简化.csproj 文件替换)但是你只能发布到一个。

只是创建一个默认只包含 .NET461 的 ASP.NET Core Web 应用程序 (.NET Framework) 项目。

还有其他我不知道的区别,比如项目的发布方式等 如果您的目标是 .NET Framework 而不是 .NET Core,则您的应用不能跨平台,并且您的应用只能在 Windows 上运行,而不能在 Linux/Mac 上运行。

之所以有单独的ASP.NET Core Web 应用程序 (.NET Core) 和 ASP.NET Core Web 应用程序 (.NET Framework) 是因为后者允许您使用依赖的函数、包或 3rd 方库在 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 的平台。

更新(2018 年 10 月 30 日)

announced 发布日期为2019 Q1 的ASP.Net Core 3 将仅支持.NET Core不支持 .NET Framework

正如本月早些时候在 .NET 博客上宣布的那样,由于 .NET Framework 的就地更新特性和希望限制可能破坏现有应用程序的更改。为确保 ASP.NET Core 能够充分利用 .NET Core 的改进,ASP.NET Core 将仅在 3.0 开始的 .NET Core 上运行。展望未来,您可以简单地将 ASP.NET Core 视为 .NET Core 的一部分。

现在在 .NET Framework 上使用 ASP.NET Core 的客户可以继续使用 2.1 LTS 版本以完全受支持的方式这样做。根据 .NET 支持政策,对 2.1 的支持和服务将至少持续到 2021 年 8 月 21 日(声明为 LTS 版本后 3 年)。

【讨论】:

【参考方案3】:

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

根据您的问题,如果您将 ASP.NET Core Web Application(.NET Core) project.json 中的框架更改为仅具有 net461 并保存,它将恢复包并给出以下错误。

如果您删除 Microsoft.NETCore.App 依赖并保存文件,它将再次恢复依赖并且不会给出任何错误。

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

【讨论】:

【参考方案4】:

一开始我也很困惑。主要区别在于 ASP.NET Web Application (.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框架库。

【讨论】:

这都是真的,但它并没有解决问题。简而言之,他要求比较 2 个 ASP.NET Core 选项,而不是“旧” ASP.NET 选项。

以上是关于使用将 net461 设置为唯一框架的 ASP.NET Core Web 应用程序 (.NET Core) 与使用 (.NET Framework) 模板之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 5 项目未正确定位 .NET 4.6.1 且无法调试

会话 ID 不够随机 - ASP.NET

在 MacOS 上构建需要 net461 的 dotnet SDK 项目的最简单方法

006.东芝TMPR461XBG——CAN唤醒中断设置

ASP.NET_基础

ASP.NET Core与ASP.NET区别