开源项目是众多组织与个人分享的组件或项目成果,作者付出的庞大的心血,所以首先大家要心存感激、尊重。请严格遵守每个项目的开源协议后再使用。尊重知识产权,共建和谐开源社区。
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 = 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
3、barcodelib
该组件库为开发人员从一组数据生成条形码图像时提供了便捷的方式。
支持以下类型
简单示例:
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
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 中引入的静态导入功能,通过单独导入所需的扩展方法来减少当前(甚至将来)冲突的可能性:
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
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
参考文献:
- 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