.NET

本文围绕.NET展开,介绍了其对最终用户和开发者的不同意义。最终用户需了解运行环境、版本及安装要求;开发者要掌握运行时、标准类库、编程语言和开发工具等知识。还提及了主要的.NET实现,最后给出了在不同平台的安装教程及相关命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.NET

这一章,我们先来正名,说说什么是“.NET”。

如果你是一位最终用户

如果你是一位最终用户,看这里就可以了。本章中的其他小节以及本系列中的其他章都可以忽略。对于你来说,只需要知道以下内容:

.NET是一个程序,它能帮助开发者快速开发程序。但是代价是用.NET开发的程序必须在安装了.NET的设备上才能运行。因此,一般来说,如果你得到了一份基于.NET开发的软件,你需要先在你的设备上安装.NET,然后才能正常运行这个软件。但是.NET也提供了自包含发布方式。简单来说就是.NET把自己打包进了程序的安装包,你在安装以自包含方式分发的,基于.NET开发的程序时不需要自行安装.NET。就像安装普通程序一样安装使用就可以了。

如果你是移动端用户,那么放心,所有移动端的程序都是以自包含的形式打包分发的(实际上并不是这么简单的过程,但是你这样理解就可以了)。你不用操心这个程序是不是基于.NET开发的。

如果你是个人电脑或者服务器用户,那么在运行非自包含的基于.NET开发的程序时,需要先安装.NET。不过,一般来说只需要安装一次.NET,所用基于.NET的程序就都能在你的设备上运行了。

.NET运行环境

.NET这个软件实际上分为两个版本——SDK和Runtime。SDK是供开发者使用的开发工具包,其中包含Runtime。而Runtime仅仅是.NET的运行环境。作为最终用户仅仅需要安装Runtime。

.NET的版本

只有死掉的软件是不维护的。而维护就难免要更新。如果一个软件还在更新,自然就会出现版本问题。

一般来说软件是向下兼容的,也就是说高版本号的版本会兼容低版本号的版本。例如.NET Core 2.2上可以运行基于.NET Core 2.1开发的程序。但是这种兼容不是绝对的,出于各种原因,总有一些无法兼容的版本。一般来说最好安装最新的稳定版本,并且在更新的稳定版本发布后及时更新。

更新其实有两种:新增功能和修复Bug。出于稳定性考虑,生产环境的服务器不能经常进行新增功能的更新,但是修复Bug的更新是一定要进行的。如果你需要相对问定的版本,可以选择长期维护的版本。.NET维护者会在比较长的时间里对长期维护版本提供修复Bug性质的更新。这样,在一段比较长的事件里你就可以选择只安装Bug修复性的更新,而不需要更新大版本号(一般更新大版本号会同时安装新功能和对以前的Bug修复)。

如果你是一位开发者

如果你是一位开发者,那么还需要知道如下内容:

运行时

.NET会隐藏硬件以及操作系统层面的细节。在大多数时候,基于.NET开发,你只需要和.NET本身打交道,不需要考虑实际运行.NET的设备的硬件以及操作系统情况。

此外,不仅是写程序的时候不需要考虑硬件和操作系统。你编写的程序经过编译后,得到的其实是统一的中间代码(IL),而不是能在特定硬件平台上直接执行的机器码。当你的程序需要执行的时候,.NET会把这些中间代码进一步解释(或者说编译)为特定平台的代码然后执行。这样,你的程序就能做到一次编译处处运行。

从中间代码到特定平台的机器代码有多种不同的方式,例如JIT,AOT。这些细节我们不在这里讨论。

.NET也是提供底层调用的支持的。例如.NET可以调用C++写的程序。但是,除非你在开发必要的接口,一般情况下我们不需要用到这些功能。

.NET中把中间代码编译为特定平台代码执行,并且提供垃圾回收等基础服务的部分就是.NET Runtime。

现在的.NET Core有两个运行时CoreCLR 和 CoreRT。即将被.NET 5取代的.NET Framework还有一个运行时CLR。这些内容没必要记住,不久的将来,.NET的运行时会相互取代,合并,从而变得少一些。

标准类库

除了有运行时,.NET还有一组标准类库。这个类库的标准叫做.NET Standard。所有标准.NET实现都要实现这组类库。这组类库就像其他所有编程语言的标准库一样。提供基本的功能。

不同编程语言对于“基本功能”的理解是不一样的。对于C来说,“基本”就是能控制内存。对Lua来说就是能完成基本数学运算和字符串处理。对C++来说就是一堆庞杂的STL类库,一堆乱七八糟的只增不减的头文件。对于.NET来说,“基本功能”就是有基本的数据容器,能直接能操作数据库,解析XML,管理多线程,使用基础的网络服务等。

编程语言和开发工具

.NET可以支持多种编程语言开发。其中,最重要的就是C#。此外还可以使用函数式的F#,以及莫名其妙总有人用的VB。通过一些拓展,你还可以使用别的语言在.NET上编程。但是不管使用什么语言,在编译之后,获得的都是中间代码IL描述的程序。因此.NET上不同语言编写的程序也可以方便地相互调用。

在.NET SDK里包含C#,F#和VB的编译工具,调试工具,以及项目构件工具,.NET包管理工具等。

不得不说一下这个构件工具实在是太好用了。不像C或者C++那样基于make,cmake,bash等一堆乱七八糟的工具。而且.NET SDK中的构件工具和作为包管理工具的Nuget配合得很好。不像C++那样调用OpenCV还得手动装OpenCV,配置环境。

另外说起Nuget也是一个很好用的包管理工具。Nuget之于.NET,就相当于pip之于Python。

.NET的实现

一个.NET的实现至少要包含运行时实现,标准库实现。可选包含开发工具(如果一个实现没有包含开发工具,就需要别的实现通过交叉编译生成在这个实现上运行的程序)。

有的.NET实现中还会直接附带WPF,ASP.NET等应用框架。(对于.NET Core来说如果安装包中不包含这些应用框架,你也可以通过Nuget自行下载安装它们。)

现在主要的.NET实现有4个:.NET Core、.NET Framework、Mono 和 UWP。在不久的将来,.NET Framework和.NET Core会合并成同一个框架,并且改名.NET 5。再抛开常年半死不活的UWP,未来实际上你需要关注的实现只有.NET 5和Mono两个。而且由于.NET Standard的存在,在两者之间切换是相对方便的。

环境安装

关于.NET在Windows,Linux以及macOS三个主要平台上的安装,Windows已经把教程写得很好了。我觉得我就不必复述了,直接按照https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/intro的教程安装就可以了。在这个教程里还介绍了如何创建一个项目,并运行它(也就是喜闻乐见的HelloWorld了)。

默认的项目语言是C#,如果你想创建一个F#项目,使用这条命令:

dotnet new console --language=F#

如果你想把项目打包发布可以使用这条命令:

dotnet publish -o OutputDir

其中-o OutputDir表示把打包好的文件放到一个名为OutputDir的路径下。完成打包之后,OutputDir下会存在一个和你的项目同名,并且以dll为后缀的文件。通过dotnet命令来启动它,例如:

dotnet HelloFSharp.dll

dotnet命令实际上是整个.NET SDK的入口,创建项目,构建,调试,运行,发布基本上都是通过这个命令(以及它的子命令)完成的。更多关于dotnet的用法见官方文档:https://docs.microsoft.com/en-us/dotnet/core/tools/?tabs=netcore2x

我也做了一个视频演示了安装.NET SDK以及创建运行Hello World程序的过程。

视频地址:https://www.bilibili.com/video/av56193762/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值