<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          .NET開(kāi)源工具類(lèi)庫(kù):Masuit.Tools

          共 9146字,需瀏覽 19分鐘

           ·

          2020-07-28 17:16




          【開(kāi)源框架| 通用工具類(lèi)庫(kù)
          這是恰童鞋騷年的第223篇原創(chuàng)文章

          本文介紹一個(gè)我的同事【懶得勤快】(人稱(chēng)勤快哥,我們叫他騷哥)寫(xiě)的一個(gè).NET開(kāi)源工具類(lèi)庫(kù)項(xiàng)目,包含一些常用的操作類(lèi),大都是靜態(tài)類(lèi),加密解密,反射操作,硬件信息,字符串?dāng)U展方法,日期時(shí)間擴(kuò)展操作,大文件拷貝,圖像裁剪,驗(yàn)證碼等常用封裝。

          1項(xiàng)目起因

          這是我的同事【懶得勤快】從入坑編程多年來(lái)的代碼積累,他把一些編程中常用的一些代碼進(jìn)行了封裝,在后續(xù)的任何開(kāi)發(fā)當(dāng)中使用上它,避免重復(fù)地去造一些輪子,把重心轉(zhuǎn)移到項(xiàng)目的推進(jìn),幾乎可以做任何的事情。

          他說(shuō)現(xiàn)在項(xiàng)目中沒(méi)了它,寫(xiě)邏輯代碼還真有點(diǎn)困難。由于C#語(yǔ)言有個(gè)其他語(yǔ)言不可替代的特性:擴(kuò)展方法,所以項(xiàng)目的實(shí)現(xiàn)90%以上都是通過(guò)擴(kuò)展方法實(shí)現(xiàn)的,方便直接調(diào)用。

          因此,我們可以看出,雖然他的網(wǎng)名叫懶得勤快,實(shí)際上,他比大多數(shù)人都勤快的多。另外,我司.NET Core項(xiàng)目中的核心工具類(lèi)庫(kù)也主要是引用了眾多這個(gè)類(lèi)庫(kù)中的通用方法,很多騷操作都是從這個(gè)項(xiàng)目中直接復(fù)用的。

          2項(xiàng)目簡(jiǎn)介

          項(xiàng)目包含了日常編程多數(shù)的常用封裝,可以說(shuō)是一個(gè)萬(wàn)能框架,能夠用于任何基于.NET平臺(tái)(包括.NET Core)的項(xiàng)目當(dāng)中。

          功能主要覆蓋:

          數(shù)據(jù)庫(kù)操作:內(nèi)存表操作、關(guān)系實(shí)體映射等;

          日期時(shí)間常用操作:農(nóng)歷操作、時(shí)間戳操作,時(shí)分秒轉(zhuǎn)換等;

          文件操作:大文件操作、文件壓縮與解壓、ini配置文件操作;

          硬件操作:獲取電腦各個(gè)硬件的性能指標(biāo);

          Html操作:利用C#對(duì)html字符串進(jìn)行“dom”操作,html的XSS凈化、html標(biāo)簽操作;

          日志組件:高并發(fā)可用的高性能日志記錄;

          多媒體文件操作:圖片的各種處理;

          網(wǎng)絡(luò)操作:獲取線程內(nèi)唯一對(duì)象、Session和Cookie的擴(kuò)展、獲取IP地址詳細(xì)信息、緩存操作;

          NoSQL:僅封裝了Redis的常用操作,mongodb的操作類(lèi)客戶(hù)端獨(dú)立分開(kāi)了;

          反射操作:各種對(duì)對(duì)象的字段屬性和方法的快捷方式;

          加密安全:對(duì)字符串進(jìn)行的擴(kuò)展,包含AES、DES、MD5、hash、SHA1、加鹽等;

          字符串?dāng)U展:包含驗(yàn)證碼生成、各種與字符串相關(guān)的擴(kuò)展;

          Win32API:包含于Windows系統(tǒng)接口相關(guān)的操作封裝;

          全局?jǐn)U展:包含字符串?dāng)U展,類(lèi)型轉(zhuǎn)換,委托、循環(huán)操作、異步操作、正則等。


          項(xiàng)目源代碼托管于github,程序包發(fā)布于nuget,目前已有745個(gè)star以及30000余次下載,由此也可以說(shuō)明大伙也挺喜歡這個(gè)工具組件的。

          github地址(這里僅展示我司的開(kāi)源社區(qū)倉(cāng)庫(kù)地址,他的個(gè)人倉(cāng)庫(kù)中的這個(gè)項(xiàng)目star數(shù)目有745個(gè)):https://github.com/XiLife-OSPC/Masuit.Tools

          值得一提的是,這個(gè)項(xiàng)目加入了反996的許可,即任何性質(zhì)的外包公司996公司需要使用本類(lèi)庫(kù),請(qǐng)聯(lián)系作者進(jìn)行商業(yè)授權(quán)!其他企業(yè)或個(gè)人可隨意使用不受限。

          3安裝程序包

          .NET Framework ≥4.6.1

          PM> Install-Package Masuit.Tools.Net

          .NET Core 3.x

          PM> Install-Package Masuit.Tools.Core
          4特色功能示例

          1、檢驗(yàn)字符串是否是Email、手機(jī)號(hào)、URL、IP地址、身份證號(hào)

          bool isEmail="[email protected]".MatchEmail();bool isInetAddress = "114.114.114.114".MatchInetAddress();bool isUrl = "http://masuit.com".MatchUrl();bool isPhoneNumber = "15205201520".MatchPhoneNumber();bool isIdentifyCard = "312000199502230660".MatchIdentifyCard();// 校驗(yàn)中國(guó)大陸身份證號(hào)

          2、硬件檢測(cè)(僅支持Windows平臺(tái))

          float load = SystemInfo.CpuLoad;// 獲取CPU占用率long physicalMemory = SystemInfo.PhysicalMemory;// 獲取物理內(nèi)存總數(shù)long memoryAvailable = SystemInfo.MemoryAvailable;// 獲取物理內(nèi)存可用率double freePhysicalMemory = SystemInfo.GetFreePhysicalMemory();// 獲取可用物理內(nèi)存Dictionary<string, string> diskFree = SystemInfo.DiskFree();// 獲取磁盤(pán)每個(gè)分區(qū)可用空間Dictionary<string, string> diskTotalSpace = SystemInfo.DiskTotalSpace();// 獲取磁盤(pán)每個(gè)分區(qū)總大小Dictionary<string, double> diskUsage = SystemInfo.DiskUsage();// 獲取磁盤(pán)每個(gè)分區(qū)使用率double temperature = SystemInfo.GetCPUTemperature();// 獲取CPU溫度int cpuCount = SystemInfo.GetCpuCount();// 獲取CPU核心數(shù)IList<string> ipAddress = SystemInfo.GetIPAddress();// 獲取本機(jī)所有IP地址string localUsedIp = SystemInfo.GetLocalUsedIP();// 獲取本機(jī)當(dāng)前正在使用的IP地址IList<string> macAddress = SystemInfo.GetMacAddress();// 獲取本機(jī)所有網(wǎng)卡mac地址string osVersion = SystemInfo.GetOsVersion();// 獲取操作系統(tǒng)版本RamInfo ramInfo = SystemInfo.GetRamInfo();// 獲取內(nèi)存信息

          3、大文件操作

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

          4、HTML的防XSS處理

          string html = @"<link href='/Content/font-awesome/css' rel='stylesheet'/>                <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、整理操作系統(tǒng)內(nèi)存(僅支持Windows)

          Windows.ClearMemorySilent();

          6、任意禁止轉(zhuǎn)換

          NumberFormater nf = new NumberFormater(36);//內(nèi)置2-62進(jìn)制的轉(zhuǎn)換//NumberFormater nf = new NumberFormater("0123456789abcdefghijklmnopqrstuvwxyz");// 自定義進(jìn)制字符,可用于生成驗(yàn)證碼string s36 = nf.ToString(12345678);long num = nf.FromString("7clzi");Console.WriteLine("12345678的36進(jìn)制是:" + s36); // 7clziConsole.WriteLine("36進(jìn)制的7clzi是:" + num); // 12345678var bin=12345678.ToBinary(36);//7clzi

          7、納秒級(jí)性能計(jì)數(shù)器

          HiPerfTimer timer = HiPerfTimer.StartNew();for (int i = 0; i < 100000; i++){    //todo}timer.Stop();Console.WriteLine("執(zhí)行for循環(huán)100000次耗時(shí)"+timer.Duration+"s");

          double time = HiPerfTimer.Execute(() =>{    for (int i = 0; i < 100000; i++)    {        //todo    }});Console.WriteLine("執(zhí)行for循環(huán)100000次耗時(shí)"+time+"s");

          8、單機(jī)產(chǎn)生唯一有序的短ID

          var token=Stopwatch.GetTimestamp().ToBinary(36);
          var set = new HashSet();double time = HiPerfTimer.Execute(() =>{ for (int i = 0; i < 1000000; i++) { set.Add(Stopwatch.GetTimestamp().ToBinary(36)); }});Console.WriteLine(set.Count==1000000);//TrueConsole.WriteLine("產(chǎn)生100w個(gè)id耗時(shí)"+time+"s");//1.6639039s

          9、產(chǎn)生分布式唯一有序的短ID

          var sf = SnowFlake.GetInstance();string token = sf.GetUniqueId();// rcofqodori0wstring shortId = sf.GetUniqueShortId(8);// qodw9728
          var 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("產(chǎn)生100w個(gè)id耗時(shí)" + time + "s"); //2.6891495s

          10、農(nóng)歷轉(zhuǎn)換

          ChineseCalendar.CustomHolidays.Add(DateTime.Parse("2018-12-31"),"元旦節(jié)");//自定義節(jié)假日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);// 獲取按公歷計(jì)算的節(jié)假日...

          11、LINQ表達(dá)式樹(shù)擴(kuò)展

          Expressionstring, bool>> where1 = s => s.StartsWith("a");Expressionstring, bool>> where2 = s => s.Length > 10;Func<string, bool> func = where1.And(where2).Compile();bool b=func("abcd12345678");//true
          Expressionstring, bool>> where1 = s => s.StartsWith("a");Expressionstring, 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", "萬(wàn)金油");string s = tmp.Render();//萬(wàn)金油,你好!
          var tmp = new Template("{{one}},{{two}},{{three}}");string s = tmp.Set("one", "1").Set("two", "2").Set("three", "3").Render();// 1,2,3
          var tmp = new Template("{{name}},{{greet}}!");tmp.Set("name", "萬(wàn)金油");string s = tmp.Render();// throw 模版變量{{greet}}未被使用

          13、List轉(zhuǎn)DataTable

          var list = new List(){    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();// 將自動(dòng)填充列姓名和年齡

          14、文件壓縮與解壓

          基于.NET Framework

          MemoryStream ms = SevenZipCompressor.ZipStream(new List<string>(){    @"D:\1.txt",    "http://ww3.sinaimg.cn/large/87c01ec7gy1fsq6rywto2j20je0d3td0.jpg",});//壓縮成內(nèi)存流
          SevenZipCompressor.Zip(new List<string>(){ @"D:\1.txt", "http://ww3.sinaimg.cn/large/87c01ec7gy1fsq6rywto2j20je0d3td0.jpg",}, zip);//壓縮成zipSevenZipCompressor.UnRar(@"D:\Download\test.rar", @"D:\Download\");//解壓rarSevenZipCompressor.Decompress(@"D:\Download\test.tar", @"D:\Download\");//自動(dòng)識(shí)別解壓壓縮包SevenZipCompressor.Decompress(@"D:\Download\test.7z", @"D:\Download\");


          基于.NET Core

          首先是注入

          services.AddSevenZipCompressor();?//?Startup.cs中注入Compressor
          //?構(gòu)造函數(shù)注入private readonly ISevenZipCompressor _sevenZipCompressor;public Test(ISevenZipCompressor sevenZipCompressor){ _sevenZipCompressor = sevenZipCompressor;}

          其次使用方式同.NET Framework版

          15、FTP客戶(hù)端

          FtpClient ftpClient = FtpClient.GetAnonymousClient("192.168.2.2");//創(chuàng)建一個(gè)匿名訪問(wèn)的客戶(hù)端//FtpClient ftpClient = FtpClient.GetClient("192.168.2.3","admin","123456");// 創(chuàng)建一個(gè)帶用戶(hù)名密碼的客戶(hù)端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);});//上傳文件并檢測(cè)進(jìn)度List<string> files = ftpClient.GetFiles("/");//列出ftp服務(wù)端文件列表...

          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密鑰對(duì)string encrypt = "123456".RSAEncrypt(rsaKey.PublicKey);// 公鑰加密string s = encrypt.RSADecrypt(rsaKey.PrivateKey);// 私鑰解密

          17、實(shí)體校驗(yàn)

          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]//密碼復(fù)雜度校驗(yàn) public string Password { get; set; }}

          18、郵件發(fā)送

          new Email(){    SmtpServer = "smtp.masuit.com",// SMTP服務(wù)器    SmtpPort = 25, // SMTP服務(wù)器端口    EnableSsl = true,//使用SSL    Username = "[email protected]",// 郵箱用戶(hù)名    Password = "123456",// 郵箱密碼    Tos = "[email protected],[email protected]", //收件人    Subject = "測(cè)試郵件",//郵件標(biāo)題    Body = "你好啊",//郵件內(nèi)容}.SendAsync(s =>{    Console.WriteLine(s);// 發(fā)送成功后的回調(diào)});// 異步發(fā)送郵件

          19、敏感信息掩碼

          "13123456789".Mask(); // 131****5678"[email protected]".MaskEmail(); // a****[email protected]

          20、更多請(qǐng)點(diǎn)擊本文底部“閱讀原文”了解更多通用工具方法接口,解鎖Masuit.Tools的各類(lèi)騷操作!

          5小結(jié)

          喜歡這個(gè)項(xiàng)目的話就點(diǎn)擊本文底部“閱讀原文”,Star、Fork、Follow素質(zhì)三連關(guān)注一下吧。


          往期推薦

          臥槽,又來(lái)一個(gè)神器,微信消息防撤回!
          揭密ASP.NET Core Web API 最佳實(shí)踐
          WebApiClient正式發(fā)布Core版本,這5個(gè)性能優(yōu)化你知道嗎?

          知乎熱議:28歲程序員期權(quán)過(guò)億!這兩天1600人加我好友,問(wèn)我賺了多少錢(qián)?

          回復(fù)?【關(guān)閉】學(xué)關(guān)
          回復(fù)?【實(shí)戰(zhàn)】獲取20套實(shí)戰(zhàn)源碼
          回復(fù)?【福利】獲取最新微信支付有獎(jiǎng)勵(lì)
          回復(fù)?【被刪】學(xué)個(gè)
          回復(fù)?【訪客】學(xué)
          回復(fù)?【卡通】學(xué)制作微信卡通頭像
          回復(fù)?【python】學(xué)微獲取全套0基礎(chǔ)Python知識(shí)手冊(cè)
          回復(fù)?【2019】獲取2019 .NET 開(kāi)發(fā)者峰會(huì)資料PPT
          瀏覽 87
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色草视频 | 欧美区在线 | 欧洲亚洲日本在线观看 | 日韩欧美成人网站 | 亚洲视频在线观看中文字幕 |