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

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

相关推荐
小码编匠2 小时前
一款 C# 编写的神经网络计算图框架
后端·神经网络·c#
Envyᥫᩣ5 小时前
C#语言:从入门到精通
开发语言·c#
IT技术分享社区11 小时前
C#实战:使用腾讯云识别服务轻松提取火车票信息
开发语言·c#·云计算·腾讯云·共识算法
WineMonk12 小时前
.NET WPF CommunityToolkit.Mvvm框架
.net·wpf·mvvm
界面开发小八哥12 小时前
界面控件DevExpress WPF中文教程:Data Grid——卡片视图设置
.net·wpf·界面控件·devexpress·ui开发
△曉風殘月〆18 小时前
WPF MVVM入门系列教程(二、依赖属性)
c#·wpf·mvvm
逐·風20 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
m0_656974741 天前
C#中的集合类及其使用
开发语言·c#