DotNetCommon 4.4.0
dotnet add package DotNetCommon --version 4.4.0
NuGet\Install-Package DotNetCommon -Version 4.4.0
<PackageReference Include="DotNetCommon" Version="4.4.0" />
paket add DotNetCommon --version 4.4.0
#r "nuget: DotNetCommon, 4.4.0"
// 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.Core | |||
DotNetCommon.PinYin | |||
DotNetCommon.Compress |
注意:
- 从 4.0 后移除了对
Newtonsoft.Json
的依赖,这样DotNetCommon.Core
将不依赖任何三方包;
整体关系如下图:
说明:
DotNetCommon包 具有所有功能,引用了其他的各个功能包;
DotNeCommon.Core 是核心包,在
https://github.com/NimaAra/Easy.Common
基础上扩充而成,从DotNetCommon.Core4.0.0开始移除了对Newtonsoft.Json的依赖,之后将不再依赖任何三方包;DotNetCommon.PinYin 是汉字转拼音包,从
https://github.com/toolgood/ToolGood.Words.Pinyin
搬运;DotNetCommon.Window.Registry 是操作window注册表,里面就一个
RegistryHelper.cs
;DotNetCommon.VerfiyCode 是生成验证码的,从 csdn博文:SkiaSharp 生成验证码 .net6 生成验证码 处搬运;
.net6平台下,System.Drawing.Common包已被标记为Window平台下专用,所以此功能依赖
SkiaSharp
,这个包是跨平台的,微软在维护。DotNetCommon.Compress是压缩/解压缩的,里面就一个
CompressHelper.cs
;
功能列表
- 通用数据模型;
- 通用树状结构&平铺数据的访问;
- 通用身份认证模型;
- 通用数据类型转换之Object.To方法;
- 通用Dto间转换之Object.Mapper扩展;
- 递归篡改对象的属性值之Modify扩展;
- 将Dto属性投影到Entity之ModifyByDto扩展;
- 校验框架;
- 分布式id&分布式流水号;
- 编码和加解密;
- 序列化;
- 汉字转拼音;
- 压缩&解压缩;
- 注册表;
- 验证码生成;
- 随机数;
- 对象池;
- 基于内存的并发消息队列;
- 反射工具;
- 主机诊断报告;
- 对象深度比对工具;
- 网络帮助类;
- 单位转换器(B/KB/MS/GB);
- 金额大小写转换;
- 枚举类型扩展方法;
- 常用扩展方法;
- 中文乱码检测(GBK or UTF-8);
- 读取Properties文件;
- 通用日志Logger;
- 常用内存缓存;
- 异步锁(AsyncLocker);
- 表达式帮助类(ExpressionHelper);
- 对象(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 | Versions 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. |
-
net6.0
- DotNetCommon.Compress (>= 1.0.1)
- DotNetCommon.Core (>= 4.4.0)
- DotNetCommon.PinYin (>= 3.0.0)
- DotNetCommon.VerifyCode (>= 3.0.0)
- DotNetCommon.Window.Registry (>= 3.0.0)
- Microsoft.CodeAnalysis.CSharp (>= 4.0.1)
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 |