.NET常用类库和第三方库/包总结

内容纲要

欢迎大家留言其他类库和包等

BCL

Base Class Library (BCL) 是微软所提出的一组标准库可提供.NET Framework所有语言使用。

随着 Windows 以及 .NET Framework 的成长,BCL 已近乎成为在 .NET 上的 Windows API。

System

.NET Framework 类库中最基底的服务,提供应用程序域 (Application Domain),数据型别,I/O 以及其他类库的基础。

System.Collections

提供 .NET 应用程序所需的数据结构以及集合对象的支持,其中 System.Collections.Generic 命名空间更导入了泛型(Generic)的支持。

System.Configuration

提供 .NET 应用程序在组态设置上的支持。

System.ComponentModel

提供 .NET 的组件基础架构。

System.Data

ADO.NET 的组成类库,为数据访问功能的内核功能。

System.Drawing

提供 .NET 的绘图能力,包含基本位图处理以及图像与色彩处理,打印支持也由本命名空间提供,此命名空间包装了大多数的 GDI 以及 GDI+ 的 API。

System.EnterpriseServices

提供 .NET 与 COM+ 的互通能力。

System.IO

提供数据流与文件读写的支持:

TextReader/TextWriter,StringReader/StringWriter:文字档与字符串的读取器与写入器。
BinaryReader/BinaryWriter:二进制数据读写器。
StreamReader/StreamWriter:数据流读写器。
Directory/DirectoryInfo:软盘文件夹对象。
File/FileInfo:软盘文件对象。
DriveInfo:计算机中的软盘信息对象。
FileStream:文件数据流。
BufferedStream:缓冲器数据流。
MemoryStream:存储器空间数据流。
在此命名空间下,还支持几个功能类:

System.IO.Compression:数据压缩工具,目前支持 GZip 和 Deflate 两种压缩法(.NET Framework 2.0 才有)。
System.IO.Pipe:管线数据流支持(.NET Framework 3.5 才有)。
System.IO.Packaging:支持 ZIP 格式的压缩封装(.NET Framework 3.0 才有)。
System.Net

.NET 中的网络功能

HTTP 通信的 WebClient, HttpWebRequest/HttpWebResponse。
FTP 通信的 FtpWebRequest/FtpWebResponse。
TCP/UDP 通信以及伺服类的 TcpClient/TcpListener, UdpClient/UdpListener。
Winsock 的基础 Socket 类。
SMTP 邮件寄发的 SmtpMail 类以及包装电子邮件内容的 Message 类。

System.Reflection

.NET 中提供运行期型别信息(RTTI)的支持,可以用来访问 .NET 组件(Assembly)中的中介数据,并可以调用内部的属性或方法等。

System.Diagnostics

.NET 中提供系统诊断,除错,追踪与运行外部进程的能力。

Debug 类

可在除错程序运行中送出除错消息。

Debugger 类

可以控制 Visual Studio 或兼容的除错器运行,包含中断点设置与激活除错等。

Trace 类

可以在非除错的状态下送出诊断消息。

EventLog 类

可以和 Windows 的事件查看器交互。

Process 类

可以取得目前在计算机中运行的进程信息,以及激活与终止进程。

System.Management

.NET 的 WMI(Windows Management Instrumentation)支持。

System.Messaging

.NET 与 Microsoft Message Queue Service(MSMQ)的交互支持。

System.DirectoryServices

.NET 的 Active Directory Service Interface(ADSI)接口支持。

System.Runtime

.NET 中提供高级开发的支持,其下有几个重要的类库:

System.Runtime.CompilerService:提供编译器所需中介数据的支持。
System.Runtime.InteropService : .NET 对 COM 与纯 Win32 API 以及以函数方式开放的 DLL 的交互支持。
System.Runtime.Remoting : .NET Remoting 组成的类库。
System.Runtime.Serialization:在 .NET 中提供数据串行化(Serialization)的支持,目前可支持 SOAP,Binary,XML 等串行化能力。

System.Security

.NET 中控管安全性的重要类。

System.Security.AccessControl:包装了对 Windows 资源的访问控制 (Access Control) 所需的 API。
System.Security.Principal:包装了用户原理 (Principal) 对象,以支持不同的验证方法。
System.Security.Cryptographics:包装 .NET Framework 所支持的密码编译算法,例如 DES,AES,SHA,MD5 等。
System.Security.Permission:包装 .NET Framework 的 Code Access Security 所需的权限旗标。
System.Security.Policy:控制 .NET Framework 程序运行的原则 (Policy) 功能。

System.ServiceModel

WCF 的组成类库,于 .NET Framework 3.0 时出现。

System.Text

.NET 中对文字,编码以及正规表达式(Regular Expression)的支持。

System.Threading

.NET 中对线程控制的支持。

System.Timers

.NET 中的本地计时器支持(与 Windows Forms 中的 Timer 控件不同,它拥有更精准的计时器)。

System.Transactions

.NET 中的 DTC Transaction(又称 OLE Transaction)支持,于 .NET Framework 2.0 时出现。

System.Windows.Forms

Windows Forms 的组成类库,包装了 Win32 用户界面,视窗,共用控件,以及 Shell 的基础 API,以提供设计 Windows 应用程序用户界面所需的支持。

System.Windows

WPF 的组成类库,于 .NET Framework 3.0 时出现。

System.Web

ASP.NET 的组成类库,其中亦包含了 IIS 服务器的交互功能以及 HTTP 的服务处理类,XML Web Service 开发的基本支持也由本类提供。

System.Workflow

WF(Windows Workflow Foundation)的组成类库,于 .NET Framework 3.0 时出现。

System.Xml

微软 XML 解析器 (Parser) 的主要包装类。

System.Linq System.Xml.Linq

微软 .NET Framework 3.5 中新提供的语言功能:LINQ 的内核类库,System.Linq 是 LINQ to Object,而 System.Xml.Linq 则是 LINQ to XML。

Swashbuckle

此.NET库可帮助您管理和测试.NET web API。它还使用Swagger为应用程序构建API文档。对于新手来说,Swagger是一组描述RESTAPI状态的规则。它们都是机器可读的,并且可以被人理解。

主要功能包括:

  1. 提供与Swagger UI的无缝集成
  2. 对身份验证OAuth2方案、API密钥和基本身份验证的广泛支持
  3. 对XML注释的支持

Swashback有三个主要组件:

  1. Swashback.AspNetCore.Swagger-这是一个Swagger对象模型,提供了将Swagger文档API公开为JSON端点(即公开可用的URL)的功能。
  2. Swashback.AspNetCore.swagggergen-提供生成API的对象、返回类型和工作流的功能。
  3. Swashback.AspNetCore.SwaggerUI-这是Swashback提供的SwaggerUI的嵌入式版本。

FluentEmail

FluentEmail是一个开源的.Net库,可帮助您在不到10分钟的时间内在.Net应用程序中实现电子邮件功能。它支持Razor用于预构建电子邮件模板,并通过SMTP协议通过常用的电子邮件传递服务(如SendGrid和MailGun)方便地发送邮件。它使您能够更好地控制通过电子邮件传递服务发送邮件的方式。

FluentEmail包包括:

  1. FluentEmail.core-这是一个基本包,有助于通过SMTP发送电子邮件。因为它是基本包,所以它只包括基本默认值和域模型。
  2. FluentEmail.mailgun-用于使用mailgun REST API发送电子邮件。
  3. FluentEmail.SendGrid-用于通过SendGrid REST API发送电子邮件。
  4. FluentEmail.SMTP-通过SMTP协议发送电子邮件。

xUnit

Xunit是一个免费的、开源的、以社区为中心的测试工具,它允许测试小型的独立组件,而不是在程序的大块后面进行测试。这使得设计目标和简单性与框架的特性保持一致。安装此软件包将安装以下依赖项:

  1. Xunit.Core-包括所有用于编写单元测试用例的库,用于测试应用程序的所有可能场景
  2. Xunit.assert-包括用于验证条件是否有效的断言库。
  3. Xunit.analyzers-安装此软件包可以为测试团队提供代码分析器,帮助他们在编写健壮的测试用例时发现并修复频繁出现的问题和其他错误。

App Metrics

App Metrics是一个跨平台、开源的库,它记录了应用程序中的大量指标。这包括在特定时间登录的用户数、请求数、DB查询的运行时间、API的响应时间、可用的可用内存等等。它支持一系列实用程序,如计数器、计时器和直方图,以测量.NET应用程序、MVC或web API的每个端点的性能和错误。

常见的基于App.Metrics+InfluxDB+Grafana实现统一性能监控。

HashLib

Hashlib包含几个哈希算法的实现,您可以使用这些算法对.NET应用程序中的文件、流和所有类型的数据进行哈希。哈希通常用于使用哈希键以更快的速度从数据库中检索特定数据。

散列键用于获取数据的直接位置,而不是使用索引结构。总之,利用HashLib库可以简化应用程序中元素的搜索。

AutoMapper

Automapper是对象映射器的对象。通过这种方式,我们可以将一种类型的一个对象的属性映射到另一个对象的属性。automapper广泛用于使用DTO(数据传输对象)的情况。通过这种方式,可以很容易地将对象属性从视图(View)对象分配给DTO对象,并将DTO对象分配给域(Model)模型。

EntityFramework/Dapper

Entity Framework (EF)和Dapper都是ORM,使.NET开发人员能够使用特定于域的对象处理关系数据。就性能而言,Dapper拥有Micro ORM之王(King of Micro ORM)的称号。实体框架允许通过编写代码或使用EF设计器中的boxes and lines来创建模型,并生成新的数据库。

Polly

这个基本上是分布式系统中必不可少的组件,和Spring cloud类似。Polly是一个库,允许开发人员以流利和线索安全的方式表达弹性和瞬态故障处理策略,例如重试,断路器,超时,隔离隔离和后备。

String

    1、特性:不可变性——由于字符串是不可变的的,每次修改字符串,都是创建了一个单独字符串副本(拷贝了一个字符串副本),之所以发生改变只是因为指向了一块新的地址; 字符串池(只针对字符串常量)——当一个程序中有多个相同的字符串常量时,多个变量指向的是内存中同一块字符串!这个特性叫字符串池。之所以字符串,不会造成程序混乱,是因为字符串的不可变性。

     2、常用成员方法和属性:

 2.1 str.Contains(String str) 判断字符串中是否包含,指定字符串,返回bool;

         2.2 str.StartsWith/EndWith(String str) 判断字符串对象是否以指定字符串开始/结尾;

         2.3 str.Length 获取字符串长度; 

         2.4 str.IndexOf(String str) 获取指定字符/字符串在对象字符串中第一次出现的位置。

         2.5 str.LastIndexOf(String str) 获取指定字符/字符串在对象字符串中最后一次出现的位置。 

         2.6 str.SubString(int start) SubString(int strat, int length) 从指定位置,截取字符串。

         2.7 str.ToLower() 将串转换成小写,返回一个新的全小写的字符串。 

         2.8 str.ToUpper() 将串转换成大写,返回一个新的全大写的字符串。 

         2.9 str. Replace(string oldStr,string newStr) 用新的字符串,替换对象字符串中老的字符串部分。 

        2.10 str.Trim() 去掉对象字符串两端的空格, str.TrimStart() 去掉对象字符串开头的空格 str.TrimEnd() 去掉对象字符串结尾的空格  

        2.11 str.Split() 把对象字符串,按照指定字符分割成一个字符串数组。 Split() 的重载同样很多, 例如 Split(new char[]{'|'}, StringSplitOption.RemoveEmptyEntries)// 删除空数据

       3、静态方法:

  3.1 string.IsNullOrEmpty(string str)  判断某字符串是否为null,或者为空字符串。                3.2.string.Equals(string,string,StringComparison.OrdianlIgnore) 忽略大小写比较两个字符串是否相同。 3.Join(string,string[]) 把一个数组按照指定字符串,拼接成一个字符串。

计时器控件Timer

   1、常用属性和事件

1.1 Interval 属性表示 Timer控件的时间间隔, 类型是int,默认是毫秒。 

       1.2 Enabled 属性 表示Timer控件是否激活。 如果激活的话,一进入Timer的Tick事件就开始执行。所以默认是false。 

       1.3. Start() 方法 开始执行 

       1.4. Stop() 方法 停止执行 

       1.5. Tick 事件 表示Timer控件将要执行的代码。

  2、操作:Lambda表达式调用Timer        

//添加一个Timer控件
Timer timer = new Timer();
//设置好必要的属性后
timer.Interval = 100;//使用Lambda表达式
timer.Tick += (sender,e) =>{
     if (巴拉巴拉巴拉)
        {
            timer.Stop();
        }};
timer.Start();

StringBuilder

      1、特点:string对象在进行字符串拼接时,因为字符串的不可变性,string对象会每次拼接,都会复制一个副本出来进行运算,而本身的串仍然留在内存中,大量的临时片段会造成不可忽视的性能损耗。所以在进行大量的字符串拼接时建议使用StringBuilder

       2、常用操作:

string s1 = "33";
string s2 = "44";
string s3 = "55";  
//需求是把  s1 s2 s3拼接在一起。这是一种典型的字符串拼接。
//使用StringBuilder ,不会产生无用的临时字符串。
StringBuilder sb =new StringBuilder();//拼接方式一
sb.Append(s1);
sb.Append(s2);
sb.Append(s3);
//拼接方式二      
//因为Append()方法会返回一个this,也就是对象本身。所以可以使用这种方式。
//链式编程  Jquery中常用这种方式
sb.Append(s1).Append(s2).Append(s3); //最后把sb.ToString()一下就好了。

DateTime dt

       1、简述:是.NET中的时间类型,可以通过DateTime完成诸如获取当前的系统时间等操作。 DateTime在.NET中是一个结构体,而并不是一个类。

       2、常用方法和成员:

         2.1 dt.Now 获取当前系统时间。

         2.2 dt.Today 获取当前今日日期。

         2.3  获取 年 月 日 时 分 秒: dt.Now.Year 获取年 dt.Now.Hour 获取小时 dt.Now. Month 获取月 dt.Now. Minute 获取分钟 dt.Now. Day 获取日 dt.Now. Second 获取秒 

        2.4 dt.Now.DayOfWeek、dt.Now.DayOfYear 获取当前日期是星期几 以及获取当前日期是一年中的第几天 

        2.5 dt.TryParse() 判断是否是时间类型,参数中有一个out可以输出一个DateTime对象。       

        2.6 dt.Now.AddDays()、dt.Now.AddHours() 在当前时间基础上加几天 返回一个DateTime 在当前日期基础上加几个小时 返回一个DateTime 

        2.7 dt.Now.Subtract(DateTime.Now) 比较两个时间的 时间差 返回一个TimeSpan

异常和异常处理Exception

try{
    //可能发生异常的代码
    //后续代码
     }catch(Exception e){
    //e就是发生异常的异常类对象,可以任意取名。不是必须叫e的。
    //通过 e.Message获取异常信息
}finally{
     //无论如何都会执行
}
//一块try中的代码只能抛出一个异常。
//可以只有 try catch
//也可以只有try  finally

IO操作

   1、常用类

1.1 FileStream类 文件流类,负责大文件的拷贝,读写。 

//---------------------------------------------------------------读操作
//1.创建文件流
FileStream fsRead =new FileStream("1.txt",FileMode.Open);
//2.创建缓冲区,正常情况下,是不会直接等于文件大小的。这里只有读,所以就这么干了。
byte[] bytes =new byte[fsRead.Length];
//3.开始读取,返回值是读取到的长度。
int r =fsRead.Read(bytes,0,bytes.Lenght);
//4.关闭释放流
fsRead.Close();fsRead.Dispose(); 
//---------------------------------------------------------------写操作
//1.创建写入的文件流
FileStream fsWrite fsWrite =new FileStream(@"xxx",FileMode.OpenOrCreate);
//2.创建缓冲区
String msg ="HelloWorld";
byte[] bytes =Enconding.UTF8.GetBytes(msg);
//3.开始写入
fsWrite.Write(bytes,0,bytes.Length);
//4.关闭
fsWrite.Close();
fsWrite.Dispose();

  1.2 Path类 Path类中方法,基本都是对字符串(文件名)的操作,与实际文件没多大关系。 

ChangeExtension(path,".jpg")  //改变文件后缀名!
Combine(s1,s2)  //将两个路径连起来
//获取文件名的几个方法 1)
Path.GetFileName(s1);   //获取路径中的文件名2)
Path.GetFileNameWithoutExtension(s1);   //获取文件名,不包括后缀名!3)Path.GetDirectoryName(s1)//获取路径中的目录不包括文件名。4)
Path.GetExtension(s1);  //只获取扩展名
GetFullPath("")   //获取完整路径,根据相对路径获得绝对路径。
//临时目录 1)
GetTempPath()     //获取当前用户的临时目录2)
GetTempFileName()    //获取一个随机的文件名,并在临时目录下创建这个文件。3)
GetRandomFileName()   //仅获取一个随机文件名。

  1.3 File类 File类可以进行一些对小文件拷贝、剪切操作,还能读一些文档文件。      

//拷贝
File.Copy("Source"," Target",true);
//判断是否存在 
File.Exists(@"Source") ;
//剪切 
File.Move("Source","Targe");
//创建 
File.Create("path");
//删除 
File.Delete("path"); 
//删除,若没有,不报错!
//读操作 
1)File.ReadAllLines("path",Encoding.Default);   //返回一个string[]
2)File.ReadAllTest("path",Encoding.Default);    //string
3)File.ReadAllBytes("path");
//写操作 
1)File.WriteAllLines("path",new string[4],Encoding.Default);//按行写入一个文件中。
2)File.WriteAllText("path","string");
3)File.WriteAllBytes("path",new byte[4]);
4)File.AppendAllText();   //将string追加到文件中。
//返回FileStream的快捷方式 
1)File.Open(string,FileMode);   //返回一个FileStream
2)File.OpenRead(string,FileMode);  //返回一个只读的 FileStream
3)File.OpenWrite(string,FileMode);  //返回一个只写的 FileStream

  1.4 Dirctory 目录操作,创建文件、删除目录,获取目录下文件名等等。

//创建目录
Directory.CreateDirectory(@"目录");
//判断某个目录是否存在某文件
string path =@"路径";
if(Directory.Exists(path)){}
//删除目录
1)Directory.Delete(path); //删除空目录  ,目录下没有文件了。
2)Directory.Delete(path,true); //不管空不空,都删!
3)如果没有目录就会报异常,最好用if(Directory.Exists(path))判断一下。
//移动文件/重命名目录 
Directory.Move(@"c:\a",@"c:\abc"); 
//可以把文件夹当作对象来使用
DirectoryInfo dirInfo = new DirectoryInfo(@"path"); 
//获取目录下的直接子目录
String[] dirs =Direcotory.GetDirectories(@"目录");//获取目录下的直接子文件
String[] files =Directory.GetFiles(@"目录");

问题:使用String[] dirs =Direcotory.GetDirectories(@"目录");
是必须要等获取了整个string之后,才能遍历这个集合。
如果希望,读到一条处理一条。
建议使用Directory.EnumerateFile()
1)EnumerateFile返回的是一个实现了IEnumerable接口的集合。实际上使用了迭代器模式。
2)SearchOption.ALLDirctories参数,会让.EnumerateFile()遍历所有子目录下的文件。

序列化与反序列化

  • JSON.NET
    应该是.NET平台上使用最为广泛的序列化/反序列化包了,ASP.NET和ASP.NET Core中默认序列化/反序列化包
  • Jil
    官网上说性能优于JSON.NET

文本日志记录

  • NLog
  • Log4Net

以上二位都是从JAVA阵营移植过来的,对于分布式系统使用文本日志追踪问题也是比较恶心的一件事儿

对象映射

  • AutoMapper
    这儿有一篇比较好的教程文章
  • ValueInject
    这个我接触的第一个对象映射库,还是比较简单的,源码读起来难度也不大

数据库

  • Dapper
    在.NET界也是大名鼎鼎了,主要有StackExchange团队在维护
  • Massive
    和Dapper相比,Massive更轻量级,它只有两个.cs文件
  • SqlSugar
    国产的轻量级ORM框架,支持LINQ操作
  • StackExchange.Redis
    Redis客户端,看名字就知道来自StackExchange了

定时任务

  • Quartz.Net

全文检索

  • Lucene.Net
    不得不说JAVA生态的强大,这又是一款移植自JAVA阵营的优秀框架
  • ElasticSearch.Net
    对Lucene做了一层封装,降低开发难度

消息队列

  • RabbitMQ.Client
    RabbitMQ客户端

给TA打赏
共{{data.count}}人
人已打赏
.NET

.NET对象清理

2022-8-2 9:52:03

.NET

ASP.NET - MVC框架及搭建教程

2022-8-2 18:49:20

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索