总结一下 .NET FrameWork 和 .NET Core 创建的项目的不同点

前言

从 Visual Studio 2022 开始,微软开始淡化 .NET Framework 的概念,在项目向导中,只有使用带 ".NET Framework" 的项目模板创建的才是 .NET Framework 项目,使用其他模板创建的都是 .NET Core 项目

比如,如果你想创建 .NET Framework 版本的控制台项目,应该选择 "控制台应用(.NET Framework)" ,如果选择的是 "控制台应用" ,则创建的是 .NET Core 版本的控制台项目。

那么,.NET Framework 和 .NET Core 创建的项目有什么不一样的地方呢?

我整理一下这两种框架下创建的项目的不同之处,主要有这 2 处不同之处,所谓知已知彼,希望可以帮助大家更好地使用 .NET 进行开发。

首先看看项目工程文件 *.csproj

对于 .NET Framework 项目来说,必须到文件资源管理器中找到它的 *.csproj 文件,然后用文本编辑器如 NotePad 打开它,而对于 .NET Core 项目,可以直接在 Visual Studio 中双击项目节点打开 *.csproj 文件。

而且 .NET Core 项目中的 *.csproj 文件比 .NET Framework 中的简单很多,.NET Core 项目并没有像 .NET Framework 那样把项目中的文件加入到 *.csproj 文件中,这是 .NET Core 项目和 .NET Framework 项目的一个不同。这是为什么呢?

在 .NET Framework 项目中,项目中所有的代码文件都要添加到 *.csproj 文件中,如果一个 C# 文件放在项目文件夹下,但是没有被添加到 *.csproj 文件中,那么这个文件是不会被编译的。

这样会造成很多问题,比如 *.csproj 文件修改冲突的问题。两个开发人员共同开发一个项目,各自向项目中添加了文件,就很容易造成 *.csproj 文件修改冲突的问题,这非常影响团队开发的效率。

.NET Core 项目中的文件不用添加到 *.csproj 文件中,项目下所有的文件默认都被自动包含到项目中,除非被手动排除。这种配置方式正好和 .NET Framework 相反,因为毕竟在开发项目的时候,开发人员主动排除某个文件不是经常发生的,而向项目中添加文件是非常频繁的操作,所以这样的优化尽可能地避免了文件修改的冲突,从而提升了团队开发的效率。

配置系统不同

在专业的软件项目中,一些配置项的值应该是可以修改的,我们不应该把这些值硬编码到代码中,.NET Framework 和 .NET Core 项目还有一个不同之处就是 .NET Core 项目没有 App.config 或 Web.config 文件。

App.config 或 Web.config 文件是 .NET Framework 项目默认的配置方式,但这种方式非常简单,当项目变复杂以后,这种简单的配置文件就显得力不从心了,需要程序员自己编写配置系统,比如从自定义的配置文件读取配置项,这样不仅会有代码可用性和可读性比较差的问题,还有重复造轮子的问题,不利用 .NET 生态的发展。

所以 .NET Core 中去掉了这种简单的配置文件,重新打造功能齐全强大的配置系统,新的配置系统支持非常丰富的配置源,包括文件(JSON、XML、INI 等)、注册表、环境变量、命令行、Azure Key Vault 等,还支持自定义配置源,简化了配置相关代码的编写方法,提高了生产效率。

写在末尾

.NET Framework 和 .NET Core 创建的项目有些许的不同,这些不同主要都是为了提高开发效率,但大体还是相同的,一旦创建好项目后,进行的代码编写、调试、运行等,基本上就都相同的。

往期精彩

  1. 闲话 .NET(1):.NET Framework
  2. 闲话 .NET(2):.NET 起名的原因、读法和演变
  3. 闲话 .NET(3):.NET Framework 的缺点
  4. 闲话 .NET(4):为什么要跨平台?
  5. 闲话 .NET(5):.NET Core 有什么优势?
  6. 闲话 .NET(6):.NET Core 各个版本的特性
  7. 闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?
  8. 闲聊 .NET Standard

我是老杨,一个奋斗在一线的资深研发老鸟,让我们一起聊聊技术,聊聊程序人生,共同学习,共同进步

相关推荐
dot.Net安全矩阵34 分钟前
.NET 通过模块和驱动收集本地EDR的工具
windows·安全·web安全·.net·交互
zls36536535 分钟前
.NET开源实时应用监控系统:WatchDog
.net
djk888841 分钟前
.net将List<实体1>的数据转到List<实体2>
数据结构·list·.net
ZwaterZ43 分钟前
el-table-column自动生成序号&&在序号前插入图标
前端·javascript·c#·vue
SRC_BLUE_173 小时前
SQLI LABS | Less-55 GET-Challenge-Union-14 Queries Allowed-Variation 2
oracle·c#·less
yngsqq4 小时前
037集——JoinEntities连接多段线polyline和圆弧arc(CAD—C#二次开发入门)
开发语言·c#·swift
Zԅ(¯ㅂ¯ԅ)4 小时前
C#桌面应用制作计算器进阶版01
开发语言·c#
hccee6 小时前
C#之异步编程
c#
麻花20136 小时前
C#之WPF的C1FlexGrid空间的行加载事件和列事件变更处理动态加载的枚举值
开发语言·c#·wpf
Crazy Struggle6 小时前
功能齐全的 WPF 自定义控件资源库(收藏版)
.net·wpf·ui控件库