您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > .NET

.NET开源工具类库:Masuit.Tools

时间:2020-05-05 10:21:08  来源:  作者:
.NET开源工具类库:Masuit.Tools

 

 


本文介绍一个.NET开源工具类库项目,包含一些常用的操作类,大都是静态类,加密解密,反射操作,硬件信息,字符串扩展方法,日期时间扩展操作,大文件拷贝,图像裁剪,验证码等常用封装。

1项目起因

这是我的同事【懒得勤快】从入坑编程多年来的代码积累,他把一些编程中常用的一些代码进行了封装,在后续的任何开发当中使用上它,避免重复地去造一些轮子,把重心转移到项目的推进,几乎可以做任何的事情。

他说现在项目中没了它,写逻辑代码还真有点困难。由于C#语言有个其他语言不可替代的特性:扩展方法,所以项目的实现90%以上都是通过扩展方法实现的,方便直接调用。

因此,我们可以看出,虽然他的网名叫【懒得勤快】,实际上,他比大多数人都勤快的多。另外,我司.NET Core项目中的核心工具类库也主要是引用了众多这个类库中的通用方法,很多骚操作都是从这个项目中直接复用的。

2项目简介

项目包含了日常编程多数的常用封装,可以说是一个万能框架,能够用于任何基于.NET平台(包括.NET Core)的项目当中。

功能主要覆盖:

数据库操作:内存表操作、关系实体映射等;

日期时间常用操作:农历操作、时间戳操作,时分秒转换等;

文件操作:大文件操作、文件压缩与解压、ini配置文件操作;

硬件操作:获取电脑各个硬件的性能指标;

html操作:利用C#对html字符串进行“dom”操作,html的XSS净化、html标签操作;

日志组件:高并发可用的高性能日志记录;

多媒体文件操作:图片的各种处理;

网络操作:获取线程内唯一对象、Session和Cookie的扩展、获取IP地址详细信息、缓存操作;

NoSQL:仅封装了redis的常用操作,mongodb的操作类客户端独立分开了;

反射操作:各种对对象的字段属性和方法的快捷方式;

加密安全:对字符串进行的扩展,包含AES、DES、MD5、hash、SHA1、加盐等;

字符串扩展:包含验证码生成、各种与字符串相关的扩展;

Win32API:包含于windows系统接口相关的操作封装;

全局扩展:包含字符串扩展,类型转换,委托、循环操作、异步操作、正则等。

项目源代码托管于github,程序包发布于nuget,目前已有745个star以及30000余次下载,由此也可以说明大伙也挺喜欢这个工具组件的。

github地址(这里仅展示我司的开源社区仓库地址,他的个人仓库中的这个项目star数目有745个):https://github.com/XiLife-OSPC/Masuit.Tools

值得一提的是,这个项目加入了反996的许可,即任何性质的外包公司或996公司需要使用本类库,请联系作者进行商业授权!其他企业或个人可随意使用不受限。

3安装程序包

.NET Framework ≥4.6.1

PM> Install-Package Masuit.Tools.Net

.NET Core 3.x

PM> Install-Package Masuit.Tools.Core

4特色功能示例

1、检验字符串是否是Email、手机号、URL、IP地址、身份证号

bool isEmail="3444764617@qq.com".MatchEmail();bool isInetAddress = "114.114.114.114".MatchInetAddress();bool isUrl = "http://masuit.com".MatchUrl();bool isPhoneNumber = "15205201520".MatchPhoneNumber();bool isIdentifyCard = "312000199502230660".MatchIdentifyCard();// 校验中国大陆身份证号

2、硬件检测(仅支持Windows平台)

float load = SystemInfo.CpuLoad;// 获取CPU占用率long physicalMemory = SystemInfo.PhysicalMemory;// 获取物理内存总数long memoryAvailable = SystemInfo.MemoryAvailable;// 获取物理内存可用率double freePhysicalMemory = SystemInfo.GetFreePhysicalMemory();// 获取可用物理内存Dictionary<string, string> diskFree = SystemInfo.DiskFree();// 获取磁盘每个分区可用空间Dictionary<string, string> diskTotalSpace = SystemInfo.DiskTotalSpace();// 获取磁盘每个分区总大小Dictionary<string, double> diskUsage = SystemInfo.DiskUsage();// 获取磁盘每个分区使用率double temperature = SystemInfo.GetCPUTemperature();// 获取CPU温度int cpuCount = SystemInfo.GetCpuCount();// 获取CPU核心数IList<string> ipAddress = SystemInfo.GetIPAddress();// 获取本机所有IP地址string localUsedIp = SystemInfo.GetLocalUsedIP();// 获取本机当前正在使用的IP地址IList<string> macAddress = SystemInfo.GetMacAddress();// 获取本机所有网卡mac地址string osVersion = SystemInfo.GetOsVersion();// 获取操作系统版本RamInfo ramInfo = SystemInfo.GetRamInfo();// 获取内存信息

3、大文件操作

FileStream fs = new FileStream(@"D:boot.vmdk", FileMode.OpenOrCreate, FileAccess.ReadWrite);{        //fs.CopyToFile(@"D:1.bak");//同步复制大文件        fs.CopyToFileAsync(@"D:1.bak");//异步复制大文件        string md5 = fs.GetFileMD5Async().Result;//异步获取文件的MD5}

4、HTML的防XSS处理

string html = @"<link href='/Content/font-awesome/css' rel='stylesheet'/>        <!--[if IE 7]>        <link href='/Content/font-awesome-ie7.min.css' rel='stylesheet'/>        <![endif]-->        <script src='/Scripts/modernizr'></script>        <div id='searchBox' role='search'>        <form action='/packages' method='get'>        <span class='user-actions'><a href='/users/account/LogOff'>退出</a></span>        <input name='q' id='searchBoxInput'/>        <input id='searchBoxSubmit' type='submit' value='Submit' />        </form>        </div>";string s = html.HtmlSantinizerStandard();//清理后:<div><span><a href="/users/account/LogOff">退出</a></span></div>

5、整理操作系统内存(仅支持Windows)

Windows.ClearMemorySilent();

6、任意禁止转换

NumberFormater nf = new NumberFormater(36);//内置2-62进制的转换//NumberFormater nf = new NumberFormater("0123456789abcdefghijklmnopqrstuvwxyz");// 自定义进制字符,可用于生成验证码string s36 = nf.ToString(12345678);long num = nf.FromString("7clzi");Console.WriteLine("12345678的36进制是:" + s36); // 7clziConsole.WriteLine("36进制的7clzi是:" + num); // 12345678var bin=12345678.ToBinary(36);//7clzi

7、纳秒级性能计数器

HiPerfTimer timer = HiPerfTimer.StartNew();for (int i = 0; i < 100000; i++){    //todo}timer.Stop();Console.WriteLine("执行for循环100000次耗时"+timer.Duration+"s");
double time = HiPerfTimer.Execute(() =>{    for (int i = 0; i < 100000; i++)    {        //todo    }});Console.WriteLine("执行for循环100000次耗时"+time+"s");

8、单机产生唯一有序的短ID

var token=Stopwatch.GetTimestamp().ToBinary(36);var set = new HashSet<string>();double time = HiPerfTimer.Execute(() =>{    for (int i = 0; i < 1000000; i++)    {        set.Add(Stopwatch.GetTimestamp().ToBinary(36));    }});Console.WriteLine(set.Count==1000000);//TrueConsole.WriteLine("产生100w个id耗时"+time+"s");//1.6639039s

9、产生分布式唯一有序的短ID

var sf = SnowFlake.GetInstance();string token = sf.GetUniqueId();// rcofqodori0wstring shortId = sf.GetUniqueShortId(8);// qodw9728var set = new HashSet<string>();double time = HiPerfTimer.Execute(() =>{    for (int i = 0; i < 1000000; i++)    {        set.Add(SnowFlake.GetInstance().GetUniqueId());    }});Console.WriteLine(set.Count == 1000000); //TrueConsole.WriteLine("产生100w个id耗时" + time + "s"); //2.6891495s

10、农历转换

ChineseCalendar.CustomHolidays.Add(DateTime.Parse("2018-12-31"),"元旦节");//自定义节假日ChineseCalendar today = new ChineseCalendar(DateTime.Parse("2018-12-31"));Console.WriteLine(today.ChineseDateString);// 二零一八年十一月廿五Console.WriteLine(today.AnimalString);// 生肖:狗Console.WriteLine(today.GanZhiDateString);// 干支:戊戌年甲子月丁酉日Console.WriteLine(today.DateHoliday);// 获取按公历计算的节假日...

11、LINQ表达式树扩展

Expression<Func<string, bool>> where1 = s => s.StartsWith("a");Expression<Func<string, bool>> where2 = s => s.Length > 10;Func<string, bool> func = where1.And(where2).Compile();bool b=func("abcd12345678");//trueExpression<Func<string, bool>> where1 = s => s.StartsWith("a");Expression<Func<string, bool>> where2 = s => s.Length > 10;Func<string, bool> func = where1.Or(where2).Compile();bool b=func("abc");// true

12、模板引擎

var tmp = new Template("{{name}},你好!");tmp.Set("name", "万金油");string s = tmp.Render();//万金油,你好!var tmp = new Template("{{one}},{{two}},{{three}}");string s = tmp.Set("one", "1").Set("two", "2").Set("three", "3").Render();// 1,2,3var tmp = new Template("{{name}},{{greet}}!");tmp.Set("name", "万金油");string s = tmp.Render();// throw 模版变量{{greet}}未被使用

13、List转DataTable

var list = new List<MyClass>(){    new MyClass()    {        Name = "张三",        Age = 22    },    new MyClass()    {        Name = "李四",        Age = 21    },    new MyClass()    {        Name = "王五",        Age = 28    }};var table = list.Select(c => new{姓名=c.Name,年龄=c.Age}).ToList().ToDataTable();// 将自动填充列姓名和年龄

14、文件压缩与解压

基于.NET Framework

MemoryStream ms = SevenZipCompressor.ZipStream(new List<string>(){    @"D:1.txt",    "http://ww3.sinaimg.cn/large/87c01ec7gy1fsq6rywto2j20je0d3td0.jpg",});//压缩成内存流SevenZipCompressor.Zip(new List<string>(){    @"D:1.txt",    "http://ww3.sinaimg.cn/large/87c01ec7gy1fsq6rywto2j20je0d3td0.jpg",}, zip);//压缩成zipSevenZipCompressor.UnRar(@"D:Downloadtest.rar", @"D:Download");//解压rarSevenZipCompressor.Decompress(@"D:Downloadtest.tar", @"D:Download");//自动识别解压压缩包SevenZipCompressor.Decompress(@"D:Downloadtest.7z", @"D:Download");

基于.NET Core

首先是注入

services.AddSevenZipCompressor(); // Startup.cs中注入Compressor// 构造函数注入private readonly ISevenZipCompressor _sevenZipCompressor;public Test(ISevenZipCompressor sevenZipCompressor){    _sevenZipCompressor = sevenZipCompressor;}

其次使用方式同.NET Framework版

15、FTP客户端

FtpClient ftpClient = FtpClient.GetAnonymousClient("192.168.2.2");//创建一个匿名访问的客户端//FtpClient ftpClient = FtpClient.GetClient("192.168.2.3","admin","123456");// 创建一个带用户名密码的客户端ftpClient.Delete("/1.txt");// 删除文件ftpClient.Download("/test/2.txt","D:\test\2.txt");// 下载文件ftpClient.UploadFile("/test/22.txt","D:\test\22.txt",(sum, progress) =>{    Console.WriteLine("已上传:"+progress*1.0/sum);});//上传文件并检测进度List<string> files = ftpClient.GetFiles("/");//列出ftp服务端文件列表...

16、加密解密

var enc="123456".MDString();// MD5加密var enc="123456".MDString("abc");// MD5加盐加密var enc="123456".MDString2();// MD5两次加密var enc="123456".MDString2("abc");// MD5两次加盐加密var enc="123456".MDString3();// MD5三次加密var enc="123456".MDString3("abc");// MD5三次加盐加密string aes = "123456".AESEncrypt();// AES加密为密文string s = aes.AESDecrypt(); //AES解密为明文string aes = "123456".AESEncrypt("abc");// AES密钥加密为密文string s = aes.AESDecrypt("abc"); //AES密钥解密为明文string enc = "123456".DesEncrypt();// DES加密为密文string s = enc.DesDecrypt(); //DES解密为明文string enc = "123456".DesEncrypt("abcdefgh");// DES密钥加密为密文string s = enc.DesDecrypt("abcdefgh"); //DES密钥解密为明文RsaKey rsaKey = RsaCrypt.GenerateRsaKeys();// 生成RSA密钥对string encrypt = "123456".RSAEncrypt(rsaKey.PublicKey);// 公钥加密string s = encrypt.RSADecrypt(rsaKey.PrivateKey);// 私钥解密

17、实体校验

public class MyClass{    [IsEmail]    public string Email { get; set; }    [IsPhone]    public string PhoneNumber { get; set; }    [IsIPAddress]    public string IP { get; set; }    [MinValue(0, ErrorMessage = "年龄最小为0岁"), MaxValue(100, ErrorMessage = "年龄最大100岁")]    public int Age { get; set; }    [ComplexPassword]//密码复杂度校验    public string Password { get; set; }}

18、邮件发送

new Email(){    SmtpServer = "smtp.masuit.com",// SMTP服务器    SmtpPort = 25, // SMTP服务器端口    EnableSsl = true,//使用SSL    Username = "admin@masuit.com",// 邮箱用户名    Password = "123456",// 邮箱密码    Tos = "10000@qq.com,10001@qq.com", //收件人    Subject = "测试邮件",//邮件标题    Body = "你好啊",//邮件内容}.SendAsync(s =>{    Console.WriteLine(s);// 发送成功后的回调});// 异步发送邮件

19、敏感信息掩码

"13123456789".Mask(); // 131****5678"admin@masuit.com".MaskEmail(); // a****n@masuit.com

20、更多请点击本文底部“阅读原文”了解更多通用工具方法接口,解锁Masuit.Tools的各类骚操作!



Tags:.NET   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
编译和反编译.NET 中的编译是把开发人员写的 C# 代码转化为计算机可理解的代码的过程,也就是中间语言代码(IL代码)。在这个过程中,C# 源代码被转换为可执行文件(exe或者dll 文件)...【详细内容】
2022-07-15  Tags: .NET  点击:(1)  评论:(0)  加入收藏
我们在开发 webapi 项目时如果遇到 api 接口需要同时支持多个版本的时候,比如接口修改了入参之后但是又希望支持老版本的前端(这里的前端可能是网页,可能是app,小程序 等等)进行...【详细内容】
2022-07-14  Tags: .NET  点击:(3)  评论:(0)  加入收藏
什么是.NET.NET 是由 Microsoft 创建的开源开发平台,用于生成多种不同类型的应用程序,主要支持C#、F#及VB。.NET程序运行原理.NET程序的运行是由其虚拟机CLR(公共语言运行时)把...【详细内容】
2022-06-21  Tags: .NET  点击:(26)  评论:(0)  加入收藏
项目介绍一套基于.NetCore+Vue2/Vue3+Element plus+uniapp,采用前后端分离方式,全自动生成PC与移动端代码的快速开发脚手架;支持移动端(uniapp)ios/android/h5/微信小程序。 Vu...【详细内容】
2022-06-13  Tags: .NET  点击:(56)  评论:(0)  加入收藏
多年前借鉴b/s优势实现基于.net的c/s框架 本框架未采用.NET固有的WCF通讯解决方案,而使用传统http数据加密方式.框架初始和传统客户端升级方式一样检查新版本,如有则下载升级...【详细内容】
2022-06-05  Tags: .NET  点击:(30)  评论:(0)  加入收藏
Asp.Net Core Identity 是.Net自带的身份认证系统,支持用户界面 (UI) 登录功能,并且管理用户、密码、配置文件数据、角色、声明、令牌、电子邮件确认等等。使用Visual Studio...【详细内容】
2022-06-05  Tags: .NET  点击:(35)  评论:(0)  加入收藏
安装Hangfire新建ASP.NET Core空 项目,.Net Core版本3.1 往*.csproj添加包引用,添加新的PackageReference标记。如下所示。请注意,下面代码段中的版本可能已经过时,如有需要,请使...【详细内容】
2022-05-07  Tags: .NET  点击:(76)  评论:(0)  加入收藏
 B/S架构的Web程序几乎占据了应用软件的绝大多数市场,但是C/S架构的WinForm、WPF客户端程序依然具有很实用的价值,如设计类软件 AutoCAD与Autodesk Revit、WPS、IT类的集成开...【详细内容】
2022-04-27  Tags: .NET  点击:(153)  评论:(0)  加入收藏
前几天有个老项目找到我,有多老呢?比我工作年限都长,见到这个项目我还得叫一声前辈。这个项目目前使用非常稳定,十多年了没怎么更新过,现在客户想加一个小功能:在线预览Word文档。...【详细内容】
2022-04-27  Tags: .NET  点击:(65)  评论:(0)  加入收藏
之前,我们已经了解了ASP.NET Core中的身份认证,现在,我们来聊一下授权。老规矩,示例程序源码XXTk.Auth.Samples已经提交了,需要的请自取。概述ASP.NET Core中的授权方式有很多,我...【详细内容】
2022-04-20  Tags: .NET  点击:(143)  评论:(0)  加入收藏
▌简易百科推荐
编译和反编译.NET 中的编译是把开发人员写的 C# 代码转化为计算机可理解的代码的过程,也就是中间语言代码(IL代码)。在这个过程中,C# 源代码被转换为可执行文件(exe或者dll 文件)...【详细内容】
2022-07-15  IT狂人日记    Tags:.NET   点击:(1)  评论:(0)  加入收藏
我们在开发 webapi 项目时如果遇到 api 接口需要同时支持多个版本的时候,比如接口修改了入参之后但是又希望支持老版本的前端(这里的前端可能是网页,可能是app,小程序 等等)进行...【详细内容】
2022-07-14  IT技术资源爱好者    Tags:.Net   点击:(3)  评论:(0)  加入收藏
什么是.NET.NET 是由 Microsoft 创建的开源开发平台,用于生成多种不同类型的应用程序,主要支持C#、F#及VB。.NET程序运行原理.NET程序的运行是由其虚拟机CLR(公共语言运行时)把...【详细内容】
2022-06-21  威步上海    Tags:.NET   点击:(26)  评论:(0)  加入收藏
Asp.Net Core Identity 是.Net自带的身份认证系统,支持用户界面 (UI) 登录功能,并且管理用户、密码、配置文件数据、角色、声明、令牌、电子邮件确认等等。使用Visual Studio...【详细内容】
2022-06-05  海椰人  博客园  Tags:.Net   点击:(35)  评论:(0)  加入收藏
安装Hangfire新建ASP.NET Core空 项目,.Net Core版本3.1 往*.csproj添加包引用,添加新的PackageReference标记。如下所示。请注意,下面代码段中的版本可能已经过时,如有需要,请使...【详细内容】
2022-05-07  壮志林云    Tags:.NET   点击:(76)  评论:(0)  加入收藏
 B/S架构的Web程序几乎占据了应用软件的绝大多数市场,但是C/S架构的WinForm、WPF客户端程序依然具有很实用的价值,如设计类软件 AutoCAD与Autodesk Revit、WPS、IT类的集成开...【详细内容】
2022-04-27  IT技术资源爱好者  博客园  Tags:.NET   点击:(153)  评论:(0)  加入收藏
前几天有个老项目找到我,有多老呢?比我工作年限都长,见到这个项目我还得叫一声前辈。这个项目目前使用非常稳定,十多年了没怎么更新过,现在客户想加一个小功能:在线预览Word文档。...【详细内容】
2022-04-27  海椰人  博客园  Tags:.Net   点击:(65)  评论:(0)  加入收藏
之前,我们已经了解了ASP.NET Core中的身份认证,现在,我们来聊一下授权。老规矩,示例程序源码XXTk.Auth.Samples已经提交了,需要的请自取。概述ASP.NET Core中的授权方式有很多,我...【详细内容】
2022-04-20  日行四善  博客园  Tags:授权   点击:(143)  评论:(0)  加入收藏
序言本文将分别介绍 Authentication(认证) 和 Authorization(授权)。并以简单的例子在 ASP.NET Core 6.0 的 WebAPI 中分别实现这两个功能。 相关名词Authentication 和 Author...【详细内容】
2022-04-18  芦荟柚子茶  博客园  Tags:ASP.NET   点击:(197)  评论:(0)  加入收藏
前言由于客户网络安全限制,连接到互联网的设备不能访问内网。需要先从客户端应用中导出数据到文件,再将文件复制到U盘,最后通过内网机器上传数据。如何保证,在复制、传输过程中,...【详细内容】
2022-03-22  My IO    Tags:.NET Core   点击:(125)  评论:(0)  加入收藏
站内最新
站内热门
站内头条