開源項目是眾多組織與個人分享的組件或項目,作者付出的心血我們是無法體會的,所以首先大家要心存感激、尊重。請嚴格遵守每個項目的開源協議后再使用。尊重知識產權,共建和諧開源社區。
以下開源項目(含組件),從網絡搜集,后期會不斷補充。
MagicOnion是一個用於.NET平台的現代RPC框架,提供雙向實時通信(如SignalR和Socket.io)以及RPC機制(如WCF和基於web的API)。該框架基於gRPC,這是一種用於HTTP/2的快速、緊湊的二進制網絡傳輸。然而,與普通gRPC不同,它將C#接口視為協議模式,實現了C#項目之間無需.proto(協議緩沖IDL)的無縫代碼共享。
應用場景
- 微服務使用的gRPC,以及WinForms、Wpf下的Wcf
- API服務,如針對Unity、Xamarin和Windows客戶端的Asp.NetCore
- 雙向實時通信,如Socket.io, SignalR, Photon and UNet
平台支持
- MagicOnion服務器需要NET Core 3.1或.NET 5.0+。
- MagicOnion客戶端支持多種平台,包括.NET Framework 4.6.1到.NET 5.0以及Unity。
- 服務器端(MagicOnion.Server)
- .NET 5.0 +
- .NET Core 3.1
- 客戶端(MagicOnion.Client)
- .NET Standard 2.1(.NET核心3.x+,.NET 5.0+,Xamarin)
- .NET Standard 2.0(.NET Framework 4.6.1+,通用Windows平台.NET Core 2.x)
開源地址:https://github.com/Cysharp/MagicOnion
QRCoder是一個簡單的類庫,用C#.NET編寫,它使您能夠創建QR碼。它與其他庫沒有任何依賴關系,可以作為.NET Framework和.NET Core PCL版本在NuGet上使用。
簡單示例:
QRCodeGenerator qrGenerator = new QRCodeGenerator(); QRCodeData qrCodeData = qrGenerator.CreateQrCode("The text which should be encoded.", QRCodeGenerator.ECCLevel.Q); QRCode qrCode = new QRCode(qrCodeData); Bitmap qrCodeImage = qrCode.GetGraphic(20);
除了用於創建位圖格式的QRCode的普通QRCode類(在上面的示例中顯示)之外,還有更多的QRCode呈現類,每個類都有另一個特殊用途。
- QRCode*
- AsciiQRCode
- Base64QRCode*
- BitmapByteQRCode
- PdfByteQRCode*
- PngByteQRCode
- PostscriptQRCode*
- SvgQRCode*
- UnityQRCode*
- XamlQRCode*
開源地址:https://github.com/codebude/QRCoder
該組件庫為開發人員從一組數據生成條形碼圖像時提供了便捷的方式。
支持以下類型
簡單示例:
BarcodeLib.Barcode b = new BarcodeLib.Barcode(); Image img = b.Encode(BarcodeLib.TYPE.UPCA, "038000356216", Color.Black, Color.White, 290, 120);
其他詳細示例請參考開源項目中的示例代碼。
開源地址:https://github.com/barnhill/barcodelib
FluentFTP 是 C#.NET 下最好用的Ftp傳輸開源庫。它是一個完全管理的FTP和FTPS庫,適用於.NET和.NET Standard,針對速度進行了優化。它提供廣泛的FTP命令、文件上載/下載、SSL/TLS連接、自動目錄列表解析、文件哈希/校驗和、文件權限/CHMOD、FTP代理、FXP傳輸、UTF-8支持、異步/等待支持、Powershell支持等等。
開源地址:https://github.com/robinrodricks/FluentFTP
開發文檔:https://github.com/robinrodricks/FluentFTP/wiki
Enums.NET是一個高性能類型安全的.NET枚舉實用程序庫。它提供了許多操作作為方便的擴展方法。它與.NET Framework 4.5+和.NET Standard 1.0+兼容。
開源地址:https://github.com/TylerBrinkley/Enums.NET
該項目使用以下方法增強 LINQ to Object:Acquire、Aggregate、AggregateRight、Append、Assert、AssertCount、AtMost、Await、AwaitCompletion、Backsert、Batch、Cartesian、Choose、CountBetween、CompareCount、CountBy、CountDown、Consume、DistinctBy、EndsWith、EquiZip、Evaluate,、Exactly、ExceptBy,Exclude,FallbackIfEmpty,FillBackward,FillForward,Flatten,Fold,ForEach,From,FullGroupJoin,FullJoin,Generate,GenerateByIndex,groupappearch,Index,IndexBy,Insert,Interleave,Lag,Lead,LeftJoin,MaxBy,Memoize,MinBy,Move,OrderBy,OrderedMerge,Pad,PadStart,Pairwise,PartialSort,PartialSortBy、Partition、Permutations、Pipe、Prepend、PreScan、Random、randouble、randomsublet、Rank、RankBy、Repeat、Return、RightJoin、runlengthcode、Scan、ScanBy、ScanRight、Segment、Sequence、Shuffle、SkipLast、SkipUntil、Slice、SortedMerge、Split、StartsWith、Subsets、TagFirstLast、TakeEvery、TakeLast、TakeUntil、ThenBy、ToArrayByIndex、,ToDataTable、ToDelimitedString、ToDictionary、ToHashSet、ToLookup、Trace、Transpose、TraverseBreadthFirst、TraverseDepthFirst、TrySingle、UNDOWN、WindowLeft、WindowRight、ZipLongest、ZipShortest。
MoreLINQ有兩種用法。最簡單的方法是只導入MoreLinq名稱空間,所有擴展方法都可以立即用於它們擴展的類型(通常是IEnumerable的一些實例化)。但是,在一些非常罕見的情況下,這樣做可能會導致與您可能正在使用的其他庫發生沖突,這些庫還附帶使用同名方法和簽名擴展同一類型。例如,當微軟.NET Framework 4.0引入Zip時,MoreLINQ已 經有了一個Zip。從 MoreLINQ 的3.0版開始,您可以使用C#6中引入的靜態導入功能,通過單獨導入所需的擴展方法來減少當前(甚至將來)沖突的可能性:
using static MoreLinq.Extensions.LagExtension; using static MoreLinq.Extensions.LeadExtension;
在上面的例子中,范圍內只有Lag和Lead擴展方法可用。
除了擴展方法之外,MoreLINQ還提供了常規的靜態方法,可以生成(而不是操作)序列,如Unfold、Random、Sequence等。如果要在靜態導入其他單個擴展方法時使用這些方法,可以通過別名來實現:
using static MoreLinq.Extensions.LagExtension; using static MoreLinq.Extensions.LeadExtension; using MoreEnumerable = MoreLinq.MoreEnumerable;
在上面的示例中,Lag和Lead可以作為擴展方法使用,也可以作為MoreEnumerable上的所有常規靜態方法使用,但是沒有MoreEnumerable提供的任何擴展方法。
開源地址與使用教程:https://github.com/morelinq/MoreLINQ
- FluentEmail
.NET平台下提供了SmtpClient類工開發者用於編寫發送郵件的業務功能,該類能滿足大部分場景下的業務需求,但是使用起來稍微有點麻煩。
FluentEmail是一款在GitHub上開源免費的支持.Net和.Net Core郵件發送組件。
FluentEmail功能強大,而且對不同場景的支持都有獨立的Nuget包,這種低耦合的拆分不僅使得依賴非常清晰,而且避免引入不需要的代碼,具體功能包含在以下的組件包中:
- FluentEmail.Core - 基礎核心包,包含了基礎的模型定義和默認的設置,而且以下的引用包都包含了這個核心包。
- FluentEmail.Smtp - 使用SMTP服務發送郵件的程序包。
- FluentEmail.Razor - 通過Razor模板生成郵件發送內容。
- FluentEmail.Liquid -使用Liquid模板生成電子郵件。
- FluentEmail.Mailgun - 使用Mailgun的Rest接口發送郵件。
- FluentEmail.SendGrid - 使用SendGrid接口發送郵件。
- FluentEmail.Mailtrap - 發送郵件Mailtrap, 使用的是FluentEmail.Smtp包進行發送.
- FluentEmail.MailKit - 使用MailKit郵件庫發送郵件。
開源地址:https://github.com/lukencode/FluentEmail
- Dapper
Dapper是一個簡單的.NET對象映射器,在速度方面具有"King of Micro ORM"的頭銜,幾乎與使用原始的ADO.NET數據讀取器一樣快。ORM是一個對象關系映射器,它負責數據庫和編程語言之間的映射。Dapper通過擴展IDbConnection提供一些有用的擴展方法去查詢您的數據庫。
開源地址:https://github.com/DapperLib/Dapper
- FreeSql【國產】
FreeSql 是功能強大的 .NET ORM,支持 .NetFramework 4.0+、.NetCore 2.1+、Xamarin 等支持 NetStandard 所有運行平台。
開發者優先:以開發者為中心的設計理念,想你所想,亦享你所享。
多場景實現:支持 CodeFirst / DbFirst / DbContext / Repository / UnitOfWork / AOP / 支持 .NETCore 2.1+, .NETFramework 4.0+, Xamarin。
多數據庫支持:Mysql, Postgresql, SqlServer, Oracle, Sqlite, Firebird, 達夢, 人大金倉, 神通, Access。
開源地址:GitHub https://github.com/dotnetcore/FreeSql
Gitee https://gitee.com/FreeSql/FreeSql-ORM
- SqlSugar【國產】
SqlSugar是一款 老牌 .NET開源ORM框架,由果糖大數據科技團隊維護和更新 ,Github star數僅次於EF 和 Dapper。
國內最受歡迎的 ORM 框架,支持.NET CORE 和 MySql、SqlServer、Sqlite、Oracle 、 postgresql 、達夢、人大金倉 數據庫,具有EF NH的功能,比EF更人性化的語法,支持真實的批量操作,另外還有媲美DAPPER的性能
優點: 簡單易用、功能齊全、高性能、輕量級、服務齊全、有專業技術支持一天18小時服務。
支持數據庫:MySql、SqlServer、Sqlite、Oracle 、 postgresql、達夢、人大金倉。
免費服務
- 基本用法咨詢
- SqlSugar版塊提交BUG
- 官網首頁提交建議和需求
- 代碼開源 可用於任何商用項目 不收取費用 下載
- qq交流群討論 995692596(空閑) 654015377(1800/2000 擁擠) 726648662((已滿) 225982985 (已滿)
- 持續更新的文檔
性能原理
比大部分的DbHelper性能要高,底層采用Emit動態創建數據綁定程序集進行緩存,緩存后的性能可以達到原生水平,相反原始的ADO需要用到大量裝箱和拆箱操作性能反而下降。
性能對比
SqlSugar 對比 Dapper:無論在性能還是在功能上都全面壓制 Dapper ,雖然基礎性能和Sugar打平手,便是批量操作 Dapper完全不行。
SqlSugar 對比 EF:SqlSugar小巧並且功能齊全,最重要的是上手容易,學習成本低 ,性能高於EF框架。
官網:https://www.donet5.com/Home/Doc
GitHub:https://github.com/donet5/SqlSugar
Gitee:https://gitee.com/dotnetchina/SqlSugar
- Overt.Core.Data【國產】
基於Dapper封裝的Linq表達式數據庫訪問驅動,內置自定義分庫,分表的實現。目前支持SqlServer、MySql、SQLite。
主要優勢:
- 官方建議使用DDD領域驅動設計思想開發。
- 支持多種數據庫,簡單配置添加鏈接的配置即可。
- 多數據庫的支持。
- 支持分表操作,自定義分表策略的支持。
- 支持表達式方式編寫,減少寫Sql語句機械性工作。
- 可對Dapper 進行擴展。
- 性能依賴於Dapper 本身的性能,Dapper 本身是輕量級ORM ,官方測試性能都強於其他的ORM。
開源地址:https://github.com/overtly/core-data
- EFCore.Sharding【國產】
讀寫分離分庫分表一直是數據庫領域中的重難點,當數據規模達到單庫極限的時候,就不得不考慮分表方案。EF Core作為.NET Core中最為主流的ORM,用起來十分方便快捷,但是官方並沒有相應的Sharding支持,鄙人不才,經過一番摸索之后終於完成這個框架。
本框架旨在為EF Core提供Sharding(即讀寫分離分庫分表)支持,不僅提供了一套強大的普通數據操作接口,並且降低了分表難度,支持按時間自動分表擴容,提供的操作接口簡潔統一。
開源地址:https://github.com/Coldairarrow
- EFCore.BulkExtensions
EFCore.BulkExtensions 是 .NET Core 開發的,針對EFCore進行擴展的高性能批量操作組件。支持批量插入(Insert)、批量更新(Update)、批量刪除(Delete)和讀取操作。目前該框架支持SqlServer和Sqlite。
SqlServer批量插入是通過SqlBulkCopy類操作,大數據操作的時候性能非常不錯。
測試結果:
GitHub地址:https://github.com/borisdj/EFCore.BulkExtensions
- Zack.EFCore.Batch【國產、推薦】
Zack.EFCore.Batch是一個支持在Entity Framework Core中高效刪除和更新數據的開源庫。我們知道,EF Core中不支持高效的刪除和更新數據,所有的更新和操作都是逐條數據處理。
組件特性
- 基於實體關系的數據過濾
- 支持數據的批量插入
- BulkInsert()底層使用各個數據庫的BulkCopy機制實現數據插入,因此插入效率非常高。目前有如下兩個缺點:不支持關聯數據的自動插入,對於關聯的對象,請同樣調用BulkInsert()進行插入;由於PostgreSQL的.NET Core Provider還沒有支持BulkCopy,所以目前Zack.EFCore.Batch暫不支持PostgreSQL,我后面再去想辦法解決。
- 支持Take()、Skip()來限制刪除和更新數據的范圍
- 批量刪除和批量更新都支持通過Take()、Skip()來實現部分刪除和部分更新。
- 支持多數據庫
GitHub地址:https://github.com/yangzhongke/Zack.EFCore.Batch/blob/main/README_CN.md
- NLog
NLog是一個靈活和免費的日志平台,適用於各種.NET平台,包括.NET Standard。NLog使寫入多個目標變得容易(數據庫、文件、控制台)並動態更改日志記錄配置。
官 網:https://nlog-project.org/?r=redirect
源碼下載:https://nlog-project.org/download
- Log4.NET
log4net庫是Apache log4j框架在Microsoft.NET平台的實現,是一個幫助程序員將日志信息輸出到各種目標(控制台、文件、數據庫等)的工具。
官 網:http://logging.apache.org/log4net/index.html
開源地址:https://github.com/apache/logging-log4net/
- Serilog
Serilog是.NET應用程序的診斷日志庫。它易於設置,具有整潔的API,並在所有最近的.NET平台上運行。盡管它在最簡單的應用程序中也很有用,但Serilog對結構化日志的支持在檢測復雜、分布式和異步應用程序和系統時也很有用。
開源地址:https://github.com/serilog/serilog
- Exceptionless
【Exceptionless】一詞的定義是:無異常。Exceptionless為您的JavaScript、Node、.NET Core、ASP.NET、Web API、WebForms、WPF、控制台和MVC應用程序提供實時錯誤報告。它將收集到的信息組織成簡單的可操作數據,這將幫助你的應用程序變得無異常!
開源地址:https://github.com/exceptionless/Exceptionless
- NPOI
開源高性能Office操作組件,不依賴Office。可以操作Excel、Word。
開源地址:https://github.com/topics/npoi
https://github.com/dotnetcore/NPOI
- ExcelReport【國產】
ExcelReport是一個Excel模板渲染引擎。 它基於關注點分離的理念,將數據與表格樣式、字體格式分離。
其中模板承載的表格樣式、字體格式在可視化的情況下編輯。開發人員只需要綁定數據與目標標簽的對應關系。ExcelReport就可以以數據驅動的方式渲染出目標報表。
模塊組成
- ExcelReport負責報表的渲染邏輯。
- ExcelReport.Driver為ExcelReport提供了操作Excel文檔的抽象接口。
- ExcelReport.Driver.NPOI是使用NPOI對ExcelReport.Driver的實現。支持xls、xlsx兩種格式的Excel文檔。
- ExcelReport.Driver.CSV是針對csv格式的Excel文檔對ExcelReport.Driver的實現。
渲染模型
Template:模板承載的表格樣式、字體格式、占位標簽等。
Render:指定模板標簽與數據的關系。
Data:注入模板的數據。整個渲染過程也是數據驅動渲染的。
Output:輸出文件
開源地址:https://github.com/hanzhaoxin/ExcelReport
- iTextSharp.LGPLv2.Core.Fix
典型應用:.Net Core 使用 itextsharp.lgplv2.core 把Html轉PDF https://www.cnblogs.com/ping9719/p/12759848.html
.Net Core 使用 itextsharp.lgplv2.core 生成PDF https://blog.csdn.net/weixin_30737363/article/details/96669770
開源地址:https://github.com/VahidN/iTextSharp.LGPLv2.Core
https://github.com/itext/itextsharp
-
DocX
DocX是一個.NET庫,允許開發人員以簡單直觀的方式操作word2007/2010/2013文件。DocX速度快,重量輕,最重要的是它不需要安裝microsoftword或Office。
DocX是Xceed Words for.NET的免費開源版本。最初由Cathal Coffey編寫,由Przemyslaw Klys維護,現在由Xceed維護。從v1.5.0開始,這個免費的開源產品是根據Xceed社區許可協議提供的(用於非商業用途)。包含以下功能
- 可以將Word文檔轉換為PDF。
- 添加屬性以將文本環繞圖片/表格/形狀。
- 添加圖片裁剪。
- 添加形狀(目前為矩形)。
- 添加包含文本的文本框或形狀。
- 從段落中獲取形狀。
- 從段落中獲取圖表,並可以修改其類別/值。
- 圖表配置中的更多屬性,如軸標簽位置和系列寬度。
- 至少比DocX版本提前了兩個版本。
- 訂閱中包含專業技術支持。
- 在.NET Standard 2.0上可用於.NET Core 2.0應用程序。
- 可以自動更新文檔中的字段。
- 在Word文檔中插入html/rtf文本(帶標記)或html/rtf文檔。
- 克隆列表或表。
- 添加或修改復選框。
- 設置圖片透明度。
- 基於引用的超鏈接創建格式化的超鏈接。
- 合並2個文檔可以在生成的文檔中選擇doc1、doc2或兩者的頁眉/頁腳。
- 自動斷字和可配置斷字。
開源地址:https://github.com/xceedsoftware/docx
- EasyCaching
EasyCaching是一個開源的緩存庫,它包含緩存的基本用法和一些高級用法,可以幫助我們更輕松地處理緩存!
核心功能:
- 統一的抽象緩存接口
- 多種常用的緩存Provider(InMemory,Redis,Memcached,SQLite)
- 為分布式緩存的數據序列化提供了多種選擇
- 二級緩存
- 緩存的AOP操作(able, put,evict)
- 多實例支持
- 支持Diagnostics
- Redis的特殊Provider
官 網:https://easycaching.readthedocs.io/en/latest/
GitHub:https://github.com/dotnetcore/EasyCaching
- CacheManager
CacheManager是用C#編寫的.NET的開源緩存抽象層。它支持各種緩存提供程序並實現許多高級功能。支持.NET4.5、NET Standard2.0及以上版本。
CacheManager包的主要目標是使開發人員更容易處理甚至非常復雜的緩存場景。使用CacheManager,可以實現多層緩存,例如在分布式緩存前面的進程內緩存,只需幾行代碼。
CacheManager不僅僅是一個接口,它統一了各種緩存提供程序的編程模型,這將使以后在項目中更改緩存策略變得非常容易。它還提供其他功能,如緩存同步、並發更新、序列化、事件、性能計數器。開發人員只有在需要時才可以選擇使用這些功能。
GitHub 地址:https://github.com/MichaCo/CacheManager
該項目已經很久沒有更新了,是功能已經穩定還是其他原因,未知。
- Autofac
Autofac是構建於.NET之上的一個易於使用的IoC容器。用於.NET Core、ASP.NET Core、.NET Framework 4.5.1+以及Windows應用程序。它管理類之間的依賴關系,以便應用程序在規模和復雜性增長時易於更改。這是通過將常規的.NET類作為組件來實現的。
- Unity
- Castle Windsor
- Util應用框架
Util是一個.net core平台下的應用框架,旨在提升小型團隊的開發輸出能力,由常用公共操作類(工具類)、分層架構基類、Ui組件,第三方組件封裝,第三方業務接口封裝,配套代碼生成模板,權限等組成。
開源地址:https://github.com/dotnetcore/Util
參考文獻:
- https://jishuin.proginn.com/p/763bfbd2b794
- https://www.cnblogs.com/shanyou/p/9700422.html
- https://www.cnblogs.com/sheng-jie/p/9789180.html
- https://www.cnblogs.com/jlion/archive/2020/05/04/12771167.html