Wp.Utils.Modbus
0.0.2-alpha
This is a prerelease version of Wp.Utils.Modbus.
dotnet add package Wp.Utils.Modbus --version 0.0.2-alpha
NuGet\Install-Package Wp.Utils.Modbus -Version 0.0.2-alpha
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="Wp.Utils.Modbus" Version="0.0.2-alpha" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Wp.Utils.Modbus" Version="0.0.2-alpha" />
<PackageReference Include="Wp.Utils.Modbus" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Wp.Utils.Modbus --version 0.0.2-alpha
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Wp.Utils.Modbus, 0.0.2-alpha"
#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.
#:package Wp.Utils.Modbus@0.0.2-alpha
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Wp.Utils.Modbus&version=0.0.2-alpha&prerelease
#tool nuget:?package=Wp.Utils.Modbus&version=0.0.2-alpha&prerelease
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Wp.Utils.Modbus使用样例
状态类
线圈状态类
public class CeilStatus
{
#region Events
#endregion Events
#region Properties&Fileds
[DataFormat(BitAddress = 20)]
public bool MyProperty { get; set; }
[DataFormat(BitAddress = 21)]
public bool MyProperty1 { get; set; }
[DataFormat(BitAddress = 22)]
public bool MyProperty2 { get; set; }
[DataFormat(BitAddress = 23)]
public bool MyProperty3 { get; set; }
[DataFormat(BitAddress = 24)]
public bool MyProperty4 { get; set; }
#endregion Properties&Fileds
#region Methods
public override string ToString()
{
var res = new StringBuilder();
foreach (var item in this.GetPropertyValueKeyIsName())
{
res.Append(item.ToString());
}
return res.ToString();
}
#endregion Methods
}
寄存器状态类
public class RegisterStatus
{
[DataFormat(20)]
public float MyProperty { get; set; }
[DataFormat(22)]
public int MyProperty1 { get; set; }
[DataFormat(24)]
public ushort MyProperty2 { get; set; }
[DataFormat(25)]
public byte MyProperty3 { get; set; }
[DataFormat(25, 4)]
public byte MyProperty4 { get; set; }
[DataFormat(25, 1)]
public bool MyProperty5 { get; set; }
[DataFormat(26)]
public double MyProperty6 { get; set; }
public override string ToString()
{
var res = new StringBuilder();
foreach (var item in this.GetPropertyValueKeyIsName())
{
res.Append(item.ToString());
}
return res.ToString();
}
}
ModbusTcp
读线圈
测试代码
var buffer = new byte[1024]; var readCoilByteArray = ModbusTcpUtil.ReadCoil<CeilStatus>(); AnsiConsole.MarkupLine($"[green]Send:{readCoilByteArray.ToFormatString()}[/]"); socket.Send(readCoilByteArray); Thread.Sleep(100); var count = socket.Receive(buffer); var readCoilRec = new byte[6 + buffer[5]]; Buffer.BlockCopy(buffer, 0, readCoilRec, 0, readCoilRec.Length); var readCoilRes = new byte[readCoilRec[8]]; Buffer.BlockCopy(readCoilRec, 9, readCoilRes, 0, readCoilRes.Length); AnsiConsole.MarkupLine($"[yellow]Rec:{readCoilRec.ToFormatString()}[/]"); var arg = new AnalysisReadArgument(readCoilRec, EFunctionCode.ReadCoil, 0, 1); var metaMsg = ModbusTcpUtil.AnalysisResponse<CeilStatus>(arg, null); Console.WriteLine(metaMsg.Meta);
寄存器状态
测试结果
读保持寄存器
测试代码
var buffer = new byte[1024]; var readHoldingRegisterByteArray = ModbusTcpUtil.ReadHoldingRegister<RegisterStatus>(0, 1); AnsiConsole.MarkupLine($"[green]Send:{readHoldingRegisterByteArray.ToFormatString(EScale.HexToUp)}[/]"); socket.Send(readHoldingRegisterByteArray); Thread.Sleep(100); var readHoldingRegisterCountTemp = socket.Receive(buffer); var readHoldingRegisterRec = new byte[6 + buffer[5]]; Buffer.BlockCopy(buffer, 0, readHoldingRegisterRec, 0, 6 + buffer[5]); AnsiConsole.MarkupLine($"[yellow]Rec:{readHoldingRegisterRec.ToFormatString()}[/]"); var arg = new AnalysisReadArgument(readHoldingRegisterRec, EFunctionCode.ReadHoldingRegister, 0, 1); var func = new Dictionary<Type, Func<IEnumerable<byte>, IEnumerable<byte>>> { { typeof(float),DefaultValueFunc.Default[typeof(float)] }, { typeof(int),DefaultValueFunc.Default[typeof(int)] }, { typeof(ushort),DefaultValueFunc.Default[typeof(ushort)] }, { typeof (double),DefaultValueFunc.Default[typeof(double)] } }; var metaMsg = ModbusTcpUtil.AnalysisResponse<RegisterStatus>(arg, func); Console.WriteLine(metaMsg.Meta);
寄存器状态
测试结果
读输入寄存器
测试代码
var buffer = new byte[1024]; var readInputRegisterByteArray = ModbusTcpUtil.ReadInputRegister<RegisterStatus>(0, 1); AnsiConsole.MarkupLine($"[green]Send:{readInputRegisterByteArray.ToFormatString()}[/]"); socket.Send(readInputRegisterByteArray); Thread.Sleep(100); var readInputRegisterCountTemp = socket.Receive(buffer); var readInputRegisterRec = new byte[6 + buffer[5]]; Buffer.BlockCopy(buffer, 0, readInputRegisterRec, 0, 6 + buffer[5]); AnsiConsole.MarkupLine($"[yellow]Rec:{readInputRegisterRec.ToFormatString()}[/]"); var arg = new AnalysisReadArgument(readInputRegisterRec, EFunctionCode.ReadInputRegister, 0, 1); var func = new Dictionary<Type, Func<IEnumerable<byte>, IEnumerable<byte>>> { { typeof(float),DefaultValueFunc.Default[typeof(float)] }, { typeof(int),DefaultValueFunc.Default[typeof(int)] }, { typeof(ushort),DefaultValueFunc.Default[typeof(ushort)] }, { typeof (double),DefaultValueFunc.Default[typeof(double)] } }; var metaMsg = ModbusTcpUtil.AnalysisResponse<RegisterStatus>(arg, func); Console.WriteLine(metaMsg.Meta);
寄存器状态
测试结果
写单个线圈
测试代码
var buffer = new byte[1024]; var msg = new Msg(); var res = new ushort[1]; var writeSingleCoilAddress = AnsiConsole.Ask<ushort>("请输入线圈地址:"); var writeSingleCoilValue = AnsiConsole.Ask<string>("请输入要写入的值。值为1表示将该线圈置为true;值为0表示将该线圈置为false:") == "1"; var writeSingleCoilByteArray = ModbusTcpUtil.WriteSingleCoil(writeSingleCoilAddress, writeSingleCoilValue); AnsiConsole.MarkupLine($"[green]Send:{writeSingleCoilByteArray.ToFormatString()}[/]"); socket.Send(writeSingleCoilByteArray); Thread.Sleep(100); var writeSingleCoilCountTemp = socket.Receive(buffer); var writeSingleCoilRec = new byte[6 + buffer[5]]; Buffer.BlockCopy(buffer, 0, writeSingleCoilRec, 0, 6 + buffer[5]); AnsiConsole.MarkupLine($"[yellow]Rec:{writeSingleCoilRec.ToFormatString()}[/]"); msg = ModbusTcpUtil.AnalysisWriteSingleCoil(writeSingleCoilByteArray, writeSingleCoilRec); AnsiConsole.WriteLine(msg.ToString());
写单个寄存器
测试代码
var buffer = new byte[1024]; var msg = new Msg(); var res = new ushort[1]; var writeSingleRegisterAddress = AnsiConsole.Ask<ushort>("请输入寄存器地址:"); var writeSingleRegisterValue = AnsiConsole.Ask<ushort>("请输入要写入的值:"); var writeSingleRegisterByteArray = ModbusTcpUtil.WriteUshort(writeSingleRegisterAddress, writeSingleRegisterValue); AnsiConsole.MarkupLine($"[green]Send:{writeSingleRegisterByteArray.ToFormatString()}[/]"); socket.Send(writeSingleRegisterByteArray); Thread.Sleep(100); var singleRegisterCount = socket.Receive(buffer); var singleRegisterRec = new byte[6 + buffer[5]]; Buffer.BlockCopy(buffer, 0, singleRegisterRec, 0, 6 + buffer[5]); AnsiConsole.MarkupLine($"[yellow]Rec:{singleRegisterRec.ToFormatString()}[/]"); msg = ModbusTcpUtil.AnalysisWriteSingleRegister(writeSingleRegisterByteArray, singleRegisterRec); AnsiConsole.WriteLine(msg.ToString());
写多个线圈
测试代码
var buffer = new byte[1024]; var value = new CeilStatus() { MyProperty = false, MyProperty1 = true, MyProperty2 = true, MyProperty3 = false, MyProperty4 = false, }; var writeMultiplyColisByteArray = ModbusTcpUtil.WriteMultipleCoils(value); AnsiConsole.MarkupLine($"[green]Send:{writeMultiplyColisByteArray.Meta.ToArray().ToFormatString()}[/]"); socket.Send(writeMultiplyColisByteArray.Meta.ToArray()); Thread.Sleep(100); var writeMultiplyColisCount = socket.Receive(buffer); var writeMultiplyColisRec = new byte[6 + buffer[5]]; Buffer.BlockCopy(buffer, 0, writeMultiplyColisRec, 0, 6 + buffer[5]); AnsiConsole.MarkupLine($"[gray]Rec:{writeMultiplyColisRec.ToFormatString()}[/]"); var msg = ModbusTcpUtil.AnalysisWriteMultipleCoils(writeMultiplyColisByteArray.Meta.ToArray(), writeMultiplyColisRec); Console.WriteLine(msg);
测试结果
寄存器状态
写多个寄存器
测试代码
var buffer = new byte[1024]; var func = new Dictionary<Type, Func<IEnumerable<byte>, IEnumerable<byte>>> { { typeof(float),DefaultValueFunc.Default[typeof(float)] }, { typeof(int),DefaultValueFunc.Default[typeof(int)] }, { typeof(ushort),DefaultValueFunc.Default[typeof(ushort)] }, { typeof (double),DefaultValueFunc.Default[typeof(double)] } }; var status = new RegisterStatus { MyProperty = 12.44f, MyProperty1 = 23, MyProperty2 = 2, MyProperty3 = 3, MyProperty4 = 4, MyProperty6 = 2.66 }; var writeMultiplyRegisterByteArray = status.WriteMultipleRegisters(func); AnsiConsole.MarkupLine($"[green]Send:{writeMultiplyRegisterByteArray.ToFormatString()}[/]"); socket.Send(writeMultiplyRegisterByteArray); Thread.Sleep(100); var writeMultiplyRegisterCountTemp = socket.Receive(buffer); var writeMultiplyRegisterRec = new byte[6 + buffer[5]]; Buffer.BlockCopy(buffer, 0, writeMultiplyRegisterRec, 0, 6 + buffer[5]); AnsiConsole.MarkupLine($"[yellow]Rec:{writeMultiplyRegisterRec.ToFormatString()}[/]"); var msg = ModbusTcpUtil.AnalysisWriteMultipleRegisters(writeMultiplyRegisterRec, writeMultiplyRegisterByteArray); AnsiConsole.WriteLine(msg.ToString());
测试结果
寄存器状态
读写多个寄存器
测试代码
var buffer = new byte[1024];
var func = new Dictionary<Type, Func<IEnumerable<byte>, IEnumerable<byte>>>
{
{
typeof(float),DefaultValueFunc.Default[typeof(float)]
},
{
typeof(int),DefaultValueFunc.Default[typeof(int)]
},
{
typeof(ushort),DefaultValueFunc.Default[typeof(ushort)]
},
{
typeof (double),DefaultValueFunc.Default[typeof(double)]
}
};
var status = new RegisterStatus
{
MyProperty = 10.44f,
MyProperty1 = 23,
MyProperty2 = 2,
MyProperty3 = 3,
MyProperty4 = 4,
MyProperty6 = 2.77
};
var readAndWriteMultiplyRegisterByteArray = status.ReadAndWriteMultipleRegisters<RegisterStatus, RegisterStatus>(func);
AnsiConsole.MarkupLine($"[green]Send:{readAndWriteMultiplyRegisterByteArray.ToFormatString()}[/]");
var count = socket.Send(readAndWriteMultiplyRegisterByteArray);
Thread.Sleep(100);
var readAndWriteMultiplyRegisterCountTemp = socket.Receive(buffer);
var readAndWriteMultiplyRegisterRec = new byte[6 + buffer[5]];
Buffer.BlockCopy(buffer, 0, readAndWriteMultiplyRegisterRec, 0, 6 + buffer[5]);
AnsiConsole.MarkupLine($"[yellow]Rec:{readAndWriteMultiplyRegisterRec.ToFormatString()}[/]");
var arg = new AnalysisReadArgument(readAndWriteMultiplyRegisterRec, EFunctionCode.ReadAndWriteMultipleRegisters, 0, 1);
var metaMsg = ModbusTcpUtil.AnalysisResponse<RegisterStatus>(arg, func);
Console.WriteLine(metaMsg.Meta);
测试结果
寄存器状态
ModbusRtu
读线圈
测试代码
public static void Execute(SerialPort sp) { var readCoilByteArray = ModbusRtuUtil.ReadCoil<CeilStatus>(1); AnsiConsole.MarkupLine($"[green]Send:{readCoilByteArray.ToFormatString()}[/]"); sp.Write(readCoilByteArray, 0, readCoilByteArray.Length); Thread.Sleep(100); byte[] readCoilRec = new byte[sp.BytesToRead]; sp.Read(readCoilRec, 0, sp.BytesToRead); var readCoilRes = new byte[readCoilRec[2]]; Buffer.BlockCopy(readCoilRec, 3, readCoilRes, 0, readCoilRes.Length); AnsiConsole.MarkupLine($"[yellow]Rec:{readCoilRec.ToFormatString()}[/]"); var arg = new AnalysisReadArgument(readCoilRec, EFunctionCode.ReadCoil, 0, 1); var metaMsg = ModbusRtuUtil.AnalysisResponse<CeilStatus>(arg, null); Console.WriteLine(metaMsg.Success ? metaMsg.Meta : metaMsg.Message); }
读保持寄存器
测试代码
public static void Execute(SerialPort sp) { var readHoldingRegisterByteArray = ModbusRtuUtil.ReadHoldingRegister<RegisterStatus>(1); AnsiConsole.MarkupLine($"[green]Send:{readHoldingRegisterByteArray.ToFormatString(EScale.HexToUp)}[/]"); sp.Write(readHoldingRegisterByteArray, 0, readHoldingRegisterByteArray.Length); Thread.Sleep(100); var readHoldingRegisterRec = new byte[sp.BytesToRead]; sp.Read(readHoldingRegisterRec, 0, sp.BytesToRead); AnsiConsole.MarkupLine($"[yellow]Rec:{readHoldingRegisterRec.ToFormatString()}[/]"); var arg = new AnalysisReadArgument(readHoldingRegisterRec, EFunctionCode.ReadHoldingRegister, 0, 1); var func = new Dictionary<Type, Func<IEnumerable<byte>, IEnumerable<byte>>> { { typeof(float),DefaultValueFunc.Default[typeof(float)] }, { typeof(int),DefaultValueFunc.Default[typeof(int)] }, { typeof(ushort),DefaultValueFunc.Default[typeof(ushort)] }, { typeof (double),DefaultValueFunc.Default[typeof(double)] } }; var metaMsg = ModbusRtuUtil.AnalysisResponse<RegisterStatus>(arg, func); Console.WriteLine(metaMsg.Success ? metaMsg.Meta : metaMsg.Message); }
读输入寄存器
测试代码
public static void Execute(SerialPort sp) { var readInputRegisterByteArray = ModbusRtuUtil.ReadInputRegister<RegisterStatus>(1); AnsiConsole.MarkupLine($"[green]Send:{readInputRegisterByteArray.ToFormatString()}[/]"); sp.Write(readInputRegisterByteArray, 0, readInputRegisterByteArray.Length); Thread.Sleep(100); var readInputRegisterRec = new byte[sp.BytesToRead]; sp.Read(readInputRegisterRec, 0, sp.BytesToRead); AnsiConsole.MarkupLine($"[yellow]Rec:{readInputRegisterRec.ToFormatString()}[/]"); var arg = new AnalysisReadArgument(readInputRegisterRec, EFunctionCode.ReadInputRegister, 0, 1); var func = new Dictionary<Type, Func<IEnumerable<byte>, IEnumerable<byte>>> { { typeof(float),DefaultValueFunc.Default[typeof(float)] }, { typeof(int),DefaultValueFunc.Default[typeof(int)] }, { typeof(ushort),DefaultValueFunc.Default[typeof(ushort)] }, { typeof (double),DefaultValueFunc.Default[typeof(double)] } }; var msg = ModbusRtuUtil.AnalysisResponse<RegisterStatus>(arg, func); AnsiConsole.WriteLine(msg.Success ? msg.Meta.ToString() : msg.Message); }
写单个线圈
测试代码
public static void Execute(SerialPort sp) { var writeSingleCoilAddress = AnsiConsole.Ask<ushort>("请输入线圈地址:"); var writeSingleCoilValue = AnsiConsole.Ask<string>("请输入要写入的值。值为1表示将该线圈置为true;值为0表示将该线圈置为false:") == "1"; var writeSingleCoilByteArray = ModbusRtuUtil.WriteSingleCoil(new ArgumentBase(writeSingleCoilAddress), writeSingleCoilValue); AnsiConsole.MarkupLine($"[green]Send:{writeSingleCoilByteArray.ToFormatString()}[/]"); sp.Write(writeSingleCoilByteArray, 0, writeSingleCoilByteArray.Length); var writeSingleCoilRec = new byte[sp.BytesToRead]; sp.Read(writeSingleCoilRec, 0, sp.BytesToRead); AnsiConsole.MarkupLine($"[yellow]Rec:{writeSingleCoilRec.ToFormatString()}[/]"); var msg = ModbusRtuUtil.AnalysisWriteSingleCoil(writeSingleCoilByteArray, writeSingleCoilRec, 1); AnsiConsole.WriteLine(msg.ToString()); }
写单个寄存器
测试代码
public static void Execute(SerialPort sp) { var msg = new Msg(); var writeSingleRegisterAddress = AnsiConsole.Ask<ushort>("请输入寄存器地址:"); var writeSingleRegisterValue = AnsiConsole.Ask<ushort>("请输入要写入的值:"); var writeSingleRegisterByteArray = ModbusRtuUtil.WriteUshort(new ArgumentBase(writeSingleRegisterAddress), writeSingleRegisterValue); AnsiConsole.MarkupLine($"[green]Send:{writeSingleRegisterByteArray.ToFormatString()}[/]"); sp.Write(writeSingleRegisterByteArray, 0, writeSingleRegisterByteArray.Length); Thread.Sleep(100); var singleRegisterRec = new byte[sp.BytesToRead]; sp.Read(singleRegisterRec, 0, sp.BytesToRead); AnsiConsole.MarkupLine($"[yellow]Rec:{singleRegisterRec.ToFormatString()}[/]"); msg = ModbusRtuUtil.AnalysisWriteSingleRegister(writeSingleRegisterByteArray, singleRegisterRec, 1); AnsiConsole.WriteLine(msg.ToString()); }
写多个线圈
测试代码
public static void Execute(SerialPort sp) { var status = new CeilStatus() { MyProperty = false, MyProperty1 = true, MyProperty2 = true, MyProperty3 = false, MyProperty4 = true, }; var writeMultiplyColisByteArray = status.WriteMultipleCoils(1); AnsiConsole.MarkupLine($"[green]Send:{writeMultiplyColisByteArray.ToFormatString()}[/]"); sp.Write(writeMultiplyColisByteArray, 0, writeMultiplyColisByteArray.Length); Thread.Sleep(100); var writeMultiplyColisRec = new byte[sp.BytesToRead]; sp.Read(writeMultiplyColisRec, 0, sp.BytesToRead); AnsiConsole.MarkupLine($"[yellow]Rec:{writeMultiplyColisRec.ToFormatString()}[/]"); var msg = ModbusRtuUtil.AnalysisWriteMultipleCoils(writeMultiplyColisByteArray, writeMultiplyColisRec, 1); AnsiConsole.WriteLine(msg.ToString()); }
写多个寄存器
测试代码
public static void Execute(SerialPort sp) { var func = new Dictionary<Type, Func<IEnumerable<byte>, IEnumerable<byte>>> { { typeof(float),DefaultValueFunc.Default[typeof(float)] }, { typeof(int),DefaultValueFunc.Default[typeof(int)] }, { typeof(ushort),DefaultValueFunc.Default[typeof(ushort)] }, { typeof (double),DefaultValueFunc.Default[typeof(double)] } }; var status = new RegisterStatus { MyProperty = 12.44f, MyProperty1 = 23, MyProperty2 = 2, MyProperty3 = 3, MyProperty4 = 4, MyProperty6 = 2.66 }; var writeMultiplyRegisterByteArray = status.WriteMultipleRegisters(func, 1); AnsiConsole.MarkupLine($"[green]Send:{writeMultiplyRegisterByteArray.ToFormatString()}[/]"); sp.Write(writeMultiplyRegisterByteArray, 0, writeMultiplyRegisterByteArray.Length); Thread.Sleep(100); var writeMultiplyRegisterRec = new byte[sp.BytesToRead]; sp.Read(writeMultiplyRegisterRec, 0, sp.BytesToRead); AnsiConsole.MarkupLine($"[yellow]Rec:{writeMultiplyRegisterRec.ToFormatString()}[/]"); var msg = ModbusRtuUtil.AnalysisWriteMultipleRegisters(writeMultiplyRegisterRec, writeMultiplyRegisterByteArray, 1); AnsiConsole.WriteLine(msg.ToString()); }
读写多个寄存器
测试代码
public static void Execute(SerialPort sp)
{
var func = new Dictionary<Type, Func<IEnumerable<byte>, IEnumerable<byte>>>
{
{
typeof(float),DefaultValueFunc.Default[typeof(float)]
},
{
typeof(int),DefaultValueFunc.Default[typeof(int)]
},
{
typeof(ushort),DefaultValueFunc.Default[typeof(ushort)]
},
{
typeof (double),DefaultValueFunc.Default[typeof(double)]
}
};
var status = new RegisterStatus
{
MyProperty = 10.44f,
MyProperty1 = 23,
MyProperty2 = 2,
MyProperty3 = 3,
MyProperty4 = 4,
MyProperty6 = 2.77
};
var readAndWriteMultiplyRegisterByteArray = ModbusRtuUtil.ReadAndWriteMultipleRegisters<RegisterStatus, RegisterStatus>(status, 1, func);
AnsiConsole.MarkupLine($"[green]Send:{readAndWriteMultiplyRegisterByteArray.ToFormatString()}[/]");
sp.Write(readAndWriteMultiplyRegisterByteArray, 0, readAndWriteMultiplyRegisterByteArray.Length);
Thread.Sleep(100);
var readAndWriteMultiplyRegisterRec = new byte[sp.BytesToRead];
sp.Read(readAndWriteMultiplyRegisterRec, 0, sp.BytesToRead);
AnsiConsole.MarkupLine($"[yellow]Rec:{readAndWriteMultiplyRegisterRec.ToFormatString()}[/]");
var arg = new AnalysisReadArgument(readAndWriteMultiplyRegisterRec, EFunctionCode.ReadAndWriteMultipleRegisters, 0, 1);
var msg = ModbusRtuUtil.AnalysisResponse<RegisterStatus>(arg, func);
AnsiConsole.WriteLine(msg.Success ? msg.Meta.ToString() : msg.Message);
}
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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net6.0
- Wp.Utils.Min (>= 0.0.1-beta)
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 |
---|---|---|
0.0.2-alpha | 179 | 4/10/2025 |
0.0.1 | 161 | 3/28/2024 |
0.0.1-alpha | 130 | 12/11/2023 |