日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

發布時間:2023/12/4 asp.net 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET开源工具类库:Masuit.Tools 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【開源框架| 通用工具類庫

這是恰童鞋騷年的第223篇原創文章


本文介紹一個我的同事【懶得勤快】(人稱勤快哥,我們叫他騷哥)寫的一個.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); // 7clzi Console.WriteLine("36進制的7clzi是:" + num); // 12345678 var 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);//True Console.WriteLine("產生100w個id耗時"+time+"s");//1.6639039s

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

var sf = SnowFlake.GetInstance(); string token = sf.GetUniqueId();// rcofqodori0w string 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); //True Console.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);//壓縮成zip SevenZipCompressor.UnRar(@"D:\Download\test.rar", @"D:\Download\");//解壓rar SevenZipCompressor.Decompress(@"D:\Download\test.tar", @"D:\Download\");//自動識別解壓壓縮包 SevenZipCompressor.Decompress(@"D:\Download\test.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,//使用SSLUsername = "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的各類騷操作!

5小結

喜歡這個項目的話就點擊本文底部“閱讀原文”,Star、Fork、Follow素質三連關注一下吧。

往期精彩回顧

.NET開源分表框架:EFCore.Sharding

.NET開源AI生態:SciSharp Stack

基于CanalSharp的ASP.NET Core組件

如果本文對你有用,

不妨點個“在看”或者轉發朋友圈

????點擊閱讀原文,素質三連

總結

以上是生活随笔為你收集整理的.NET开源工具类库:Masuit.Tools的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。