总结一下 .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

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

相关推荐
波力海苔夹心脆6752 小时前
C# 正则表达式零基础入门:从“看得懂“到“会用“
经验分享·后端·mysql·正则表达式·c#
昂好的day3 小时前
VisionMaster(VM) 标定工具详解(上):为什么必须标定 + 九点标定手眼标定
开发语言·数码相机·c#
Elastic 中国社区官方博客7 小时前
Observability:当 YAML 遇上 IConfiguration:OpenTelemetry .NET SDK 的声明式配置
大数据·开发语言·elasticsearch·搜索引擎·全文检索·.net
小羊没烦恼!8 小时前
深入浅出SQL Server中的死锁
java·开发语言·前端·数据库·后端·spring·c#
czhc114007566317 小时前
同值短路与单一真值源:属性不是命令,状态只有一个家
c#
下页、再停留1 天前
【C#桌面客户端系列学习-15】生成可视化图表之折线图、柱状图、饼状图
开发语言·c#
波力海苔夹心脆6751 天前
VisionMaster 两级位置修正实战:塑料外壳与金属件装配角度检测
经验分享·计算机视觉·c#·visionmaster·海康机器人·位置修正
小羊没烦恼!1 天前
C#综合揭秘——Entity Framework 并发处理详解
java·开发语言·前端·javascript·数据库·mysql·c#
淡海水1 天前
05-02-源码-Boehm GC标记阶段
算法·unity·c#·游戏引擎·gc