.NET Core 開源專案常用必備彙總

語言: CN / TW / HK

​本文已參與「新人創作禮」活動,一起開啟掘金創作之路。

1、MagicOnion

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

開源地址:https://github.com/Cysharp/MagicOnion****

2、QRCoder

QRCoder是一個簡單的類庫,用C#.NET編寫,它使您能夠建立QR碼。它與其他庫沒有任何依賴關係,可以作為.NET Framework和.NET Core PCL版本在NuGet上使用。

簡單示例:

QRCodeGenerator qrGenerator = = qrGenerator.CreateQrCode(= = qrCode.GetGraphic();

除了用於建立點陣圖格式的QRCode的普通QRCode類(在上面的示例中顯示)之外,還有更多的QRCode呈現類,每個類都有另一個特殊用途。

  • QRCode*
  • AsciiQRCode
  • Base64QRCode*
  • BitmapByteQRCode
  • PdfByteQRCode*
  • PngByteQRCode
  • PostscriptQRCode*
  • SvgQRCode*
  • UnityQRCode*
  • XamlQRCode*

開源地址:https://github.com/codebude/QRCoder

3、barcodelib

該元件庫為開發人員從一組資料生成條形碼影象時提供了便捷的方式。

支援以下型別

簡單示例:

BarcodeLib.Barcode b = = b.Encode(BarcodeLib.TYPE.UPCA, , Color.Black, Color.White, , );

其他詳細示例請參考開源專案中的示例程式碼。

開源地址:https://github.com/barnhill/barcodelib

4、FluentFTP

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

5、Enums.NET

Enums.NET是一個高效能型別安全的.NET列舉實用程式庫。它提供了許多操作作為方便的擴充套件方法。它與.NET Framework 4.5+和.NET Standard 1.0+相容。

開源地址:https://github.com/TylerBrinkley/Enums.NET

6、MoreLinq

該專案使用以下方法增強 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中引入的靜態匯入功能,通過單獨匯入所需的擴充套件方法來減少當前(甚至將來)衝突的可能性:

MoreLinq.Extensions.LeadExtension;

在上面的例子中,範圍內只有Lag和Lead擴充套件方法可用。

除了擴充套件方法之外,MoreLINQ還提供了常規的靜態方法,可以生成(而不是操作)序列,如Unfold、Random、Sequence等。如果要在靜態匯入其他單個擴充套件方法時使用這些方法,可以通過別名來實現:

MoreEnumerable = MoreLinq.MoreEnumerable;

在上面的示例中,Lag和Lead可以作為擴充套件方法使用,也可以作為MoreEnumerable上的所有常規靜態方法使用,但是沒有MoreEnumerable提供的任何擴充套件方法。

開源地址與使用教程:https://github.com/morelinq/MoreLINQ

7、Email 元件

  • 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

8、ORM元件

  • Dapper

Dapper是一個簡單的.NET物件對映器,在速度方面具有"King of Micro ORM"的頭銜,幾乎與使用原始的ADO.NET資料讀取器一樣快。ORM是一個物件關係對映器,它負責資料庫和程式語言之間的對映。Dapper通過擴充套件IDbConnection提供一些有用的擴充套件方法去查詢您的資料庫。

開源地址:https://github.com/DapperLib/Dapper

https://dapper-tutorial.net/

  • 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。

官 網:http://freesql.net

開源地址: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、達夢、人大金倉。

官網: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

9、日誌元件

  • 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

10、Office 操作元件

  • NPOI

開源高效能Office操作元件,不依賴Office。可以操作Excel、Word。

開源地址:https://github.com/topics/npoi

https://github.com/dotnetcore/NPOI

  • ExcelReport【國產】

ExcelReport是一個Excel模板渲染引擎。它基於關注點分離的理念,將資料與表格樣式、字型格式分離。\ 其中模板承載的表格樣式、字型格式在視覺化的情況下編輯。開發人員只需要繫結資料與目標標籤的對應關係。ExcelReport就可以以資料驅動的方式渲染出目標報表。

開源地址: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社群許可協議提供的(用於非商業用途)

11、快取元件

  • 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

該專案已經很久沒有更新了,是功能已經穩定還是其他原因,未知。

12、IOC元件

  • Autofac

Autofac是構建於.NET之上的一個易於使用的IoC容器。用於.NET Core、ASP.NET Core、.NET Framework 4.5.1+以及Windows應用程式。它管理類之間的依賴關係,以便應用程式在規模和複雜性增長時易於更改。這是通過將常規的.NET類作為元件來實現的。

  • Unity
  • Castle Windsor