DotNetCommon 4.4.0

dotnet add package DotNetCommon --version 4.4.0                
NuGet\Install-Package DotNetCommon -Version 4.4.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DotNetCommon" Version="4.4.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add DotNetCommon --version 4.4.0                
#r "nuget: DotNetCommon, 4.4.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install DotNetCommon as a Cake Addin
#addin nuget:?package=DotNetCommon&version=4.4.0

// Install DotNetCommon as a Cake Tool
#tool nuget:?package=DotNetCommon&version=4.4.0                

DotNetCommon

介绍

搜集.neter开发常用的功能,运行环境: net6.0;

QQ交流群:864844127

主要包版本:

版本 下载 License
DotNetCommon DotNetCommon stats GitHub license
DotNetCommon.Core DotNetCommon.Core stats GitHub license
DotNetCommon.PinYin DotNetCommon.PinYin stats GitHub license
DotNetCommon.Compress DotNetCommon.Compress stats GitHub license

注意:

  • 从 4.0 后移除了对Newtonsoft.Json的依赖,这样DotNetCommon.Core将不依赖任何三方包;

整体关系如下图:

image-20221101092958287

说明:

  1. DotNetCommon包 具有所有功能,引用了其他的各个功能包;

  2. DotNeCommon.Core 是核心包,在 https://github.com/NimaAra/Easy.Common基础上扩充而成,从DotNetCommon.Core4.0.0开始移除了对Newtonsoft.Json的依赖,之后将不再依赖任何三方包;

  3. DotNetCommon.PinYin 是汉字转拼音包,从https://github.com/toolgood/ToolGood.Words.Pinyin搬运;

  4. DotNetCommon.Window.Registry 是操作window注册表,里面就一个RegistryHelper.cs

  5. DotNetCommon.VerfiyCode 是生成验证码的,从 csdn博文:SkiaSharp 生成验证码 .net6 生成验证码 处搬运;

    .net6平台下,System.Drawing.Common包已被标记为Window平台下专用,所以此功能依赖SkiaSharp,这个包是跨平台的,微软在维护。

  6. DotNetCommon.Compress是压缩/解压缩的,里面就一个 CompressHelper.cs

功能列表

  1. 通用数据模型;
  2. 通用树状结构&平铺数据的访问;
  3. 通用身份认证模型;
  4. 通用数据类型转换之Object.To方法;
  5. 通用Dto间转换之Object.Mapper扩展;
  6. 递归篡改对象的属性值之Modify扩展;
  7. 将Dto属性投影到Entity之ModifyByDto扩展;
  8. 校验框架;
  9. 分布式id&分布式流水号;
  10. 编码和加解密;
  11. 序列化;
  12. 汉字转拼音;
  13. 压缩&解压缩;
  14. 注册表;
  15. 验证码生成;
  16. 随机数;
  17. 对象池;
  18. 基于内存的并发消息队列;
  19. 反射工具;
  20. 主机诊断报告;
  21. 对象深度比对工具;
  22. 网络帮助类;
  23. 单位转换器(B/KB/MS/GB);
  24. 金额大小写转换;
  25. 枚举类型扩展方法;
  26. 常用扩展方法;
  27. 中文乱码检测(GBK or UTF-8);
  28. 读取Properties文件;
  29. 通用日志Logger;
  30. 常用内存缓存;
  31. 异步锁(AsyncLocker);
  32. 表达式帮助类(ExpressionHelper);
  33. 对象(poco)深度克隆;

更多功能介绍

查看:https://gitee.com/jackletter/DotNetCommon/tree/master/docs

快速开始

1.安装包

dotnet add package DotNetCommon

2. 引入命名空间

using DotNetCommon;
using DotNetCommon.Extensions;

3. 功能示例

3.1 数据模型
public Result<Person> GetUserById(int id)
{
    if (id < 0) return Result.NotOk("id必须大于0!");
    //...
    return Result.Ok(new Person());
}
3.2 加解密
public void EncryptTest()
{
    var sensitiveData = "敏感信息";
    var key = "12345678"; 
    //加密
    var res = DESEncrypt.Encrypt(sensitiveData, key);
    //解密
	var res2= DESEncrypt.Decrypt(res, key);
}
3.3 分布式Id & 分布式流水号
public void Test()
{
    //首先设置当前机器id: 0-1023
    Machine.SetMachineId(1);
    //生成分布式id
    //输出示例: 185081270290616320
    long id = DistributeGenerator.NewId("key");
    //生成分布式流水号
    //输出示例: sno202105250001000001
    string sno = DistributeGenerator.NewSNO("sno", SerialFormat.CreateDistributeFast("sno", "yyyyMMdd", 6));
}
3.4 序列化
/// <summary>
/// 指定常用的设置,序列化为json字符串(使用System.Text.Json)
/// </summary>
public static string ToJson(this object obj, JsonSerializerOptions options = null)

/// <summary>
/// 指定常用的设置,序列化为json字符串
/// </summary>
/// <param name="obj"></param>
/// <param name="dateFormatString">日期时间格式(DateTime)</param>
/// <param name="dateTimeOffsetFormatString">日期时间格式(DateTimeOffset)</param>
/// <param name="dateOnlyOffsetFormatString">日期时间格式(DateOnly)</param>
/// <param name="timeOnlyOffsetFormatString">日期时间格式(TimeOnly)</param>
/// <param name="number2String">是否将数字转为字符串</param>
/// <param name="ignoreNull">是否忽略null值的属性</param>
/// <param name="enum2String">是否将枚举转换为字符串</param>
/// <param name="lowerCamelCase">属性名称的首字母是否小写</param>
/// <param name="lowerCamelCaseDictionaryKey">字典key首字母是否小写</param>
/// <param name="isIntend">是否格式缩进</param>
/// <param name="otherSettings">其他的设置</param>
/// <remarks>注意: 虽然提供了 <c>lowerCamelCase</c> 和 <c>lowerCamelCaseDictionaryKey</c>, 但没有办法将 <c>JsonObject</c> 中的key首字母小写</remarks>
public static string ToJsonFast(this object obj,
    string dateFormatString = null,
    string dateTimeOffsetFormatString = null,
    string dateOnlyOffsetFormatString = null,
    string timeOnlyOffsetFormatString = null,
    bool ignoreNull = false,
    bool enum2String = false,
    bool lowerCamelCase = false,
    bool lowerCamelCaseDictionaryKey = false,
    bool isIntend = false,
    bool number2String = false,
    Action<JsonSerializerOptions> otherSettings = null);
3.5 压缩&解压缩
//压缩多个文件
CompressHelper.CompressZip("c:/test.zip", new Dictionary<string, string>
{
	{"中文B222.txt","c:/testfolder/中文B.txt" },
	{"testsubfolder/suba222.txt","c:/testfolder/testsubfolder/testsubfolder-suba.txt" },
	{"testfolder-a.txt","c:/testfolder/testfolder-a.txt" }
});
//压缩目录
CompressHelper.CompressZipFolder("c:/test.zip", "c:/testfolder");

//解压缩 支持 zip/7z/rar/gz/bz2/tar.gz/tar.bz2
CompressHelper.UnCompress("c:/testfolder.7z"), "c:/testfolder");
CompressHelper.UnCompress("c:/testfolder.tar.gz"), "c:/testfolder2");
3.6 类似AutoMapper的转换
public class Cat
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public DateTime Birth { get; set; }
}

public class CatDto
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age
    {
        get
        {
            return DateTime.Now.Year - Birth.Year;
        }
    }
    public DateTime Birth { get; set; }
}

//转换示例
var cat = new Cat()
{
    Id = 1,
    Name = "小明",
    Birth = DateTime.Parse("1989-01-02"),
    Age = 20
};
var dto = cat.Mapper<CatDto>();
dto.ShouldNotBeNull();
dto.Id.ShouldBe(1);
dto.Name.ShouldBe("小明");
dto.Age.ShouldNotBe(20);
3.7 类FluentValidation校验组件
//Service层方法,添加实体
public Result<bool> AddStudent(Student student)
{
    var res = ValidateModelHelper.ValidResult(student, Student.ValidAdd);
    if (!res.Success) return res;
    //...新增操作
    return Result.Ok(true);
}

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int? Age { get; set; }
    public DateTime? Birth { get; set; }
    public string IdCard { get; set; }
    public string Addr { get; set; }
    public string Phone { get; set; }
    public string Email { get; set; }

    /// <summary>
    /// 校验新增Student
    /// </summary>
    /// <param name="ctx"></param>
    public static void ValidAdd(ValidateContext<Student> ctx)
    {
        //请求实体不能为null,否则直接中断校验
        ctx.MustNotNull().IfFailThenExit();
        //Id必须为0
        ctx.RuleFor(i => i.Id).MustEqualTo(0);
        //姓名不能为空且长度在1-4之间
        ctx.RuleFor(i => i.Name).MustNotNullOrEmptyOrWhiteSpace().MustLengthInRange(1, 4);
        //年龄要么为null,要么>=0
        ctx.RuleFor(i => i.Age).When(i => i != null, ctx => ctx.MustGreaterThanOrEuqalTo(0));
        //出生日期要么为null,要么>=1800-01-01
        ctx.RuleFor(i => i.Birth).When(i => i != null, ctx => ctx.MustGreaterThanOrEuqalTo(DateTime.Parse("1800-01-01")));
        //校验身份证号
        ctx.RuleFor(i => i.IdCard).MustIdCard();
        //如果手机号码不为null就校验格式
        ctx.RuleFor(i => i.Phone).When(i => i != null, ctx => ctx.MustCellPhone());
        //如果邮箱不为null就校验格式
        ctx.RuleFor(i => i.Email).When(i => i != null, ctx => ctx.MustEmailAddress());
    }
}
3.8 注册表
public void Test2()
{
    var path = @"HKEY_CURRENT_USER\TestApplication\Res";
    //判断是否存在
    RegistryHelper.Exists(path);
    //删除项
    RegistryHelper.DeletePath(path);
    //设置值
    RegistryHelper.SetString(path, "name", "小明");
    //读取值
    var name = RegistryHelper.GetString(path, "name");
}

更多介绍,参考:https://gitee.com/jackletter/DotNetCommon/tree/master/docs

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
4.4.0 264 9/18/2023
4.1.0 137 8/15/2023
4.0.1 161 6/5/2023
4.0.0 407 2/2/2023
3.0.0 410 11/1/2022
2.10.0 370 10/30/2022
2.9.3 399 10/20/2022
2.9.2 454 9/22/2022
2.9.1 396 9/22/2022
2.9.0 392 9/21/2022
2.8.5 410 9/13/2022
2.8.4 396 8/24/2022
2.8.3 416 7/29/2022
2.8.2 426 6/20/2022
2.7.2 447 4/28/2022
2.7.1 396 4/26/2022
2.7.0 403 4/18/2022
2.6.0 431 3/30/2022
2.5.0 458 1/24/2022
2.4.1 259 1/9/2022
2.3.0 302 12/6/2021
2.2.0 320 11/14/2021
2.1.4 328 10/21/2021
2.1.3 335 9/26/2021
2.1.2 397 9/26/2021
2.1.1 328 9/21/2021
2.1.0 436 9/11/2021
2.0.1 398 9/5/2021
2.0.0 372 8/27/2021
1.1.2 373 8/20/2021
1.1.1 341 8/13/2021
1.1.0 1,046 6/19/2021
1.0.0 393 2/3/2021