优化网络质量计算公式,减小衰减系数,随着延迟增加,放缓积分下降速度。1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%
This commit is contained in:
parent
f48c3b7233
commit
a9e1020c4a
|
@ -20,7 +20,7 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NewLife.XCode" Version="11.19.2025.701" />
|
||||
<PackageReference Include="NewLife.XCode" Version="11.19.2025.717-beta0003" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NewLife.Core" Version="11.5.2025.713-beta1307" />
|
||||
<PackageReference Include="NewLife.Core" Version="11.5.2025.717-beta0001" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NewLife.Core" Version="11.5.2025.713-beta1307" />
|
||||
<PackageReference Include="NewLife.Core" Version="11.5.2025.717-beta0001" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -156,8 +156,8 @@
|
|||
<Column Name="Signal" DataType="Int32" Description="信号。信号强度,WiFi/4G" />
|
||||
<Column Name="UplinkSpeed" DataType="Int64" ItemType="GMK" Description="上行速度。网络发送速度,字节每秒" />
|
||||
<Column Name="DownlinkSpeed" DataType="Int64" ItemType="GMK" Description="下行速度。网络接收速度,字节每秒" />
|
||||
<Column Name="IntranetScore" DataType="Double" ItemType="percent" Description="内网质量。综合评估到网关的心跳延迟和丢包率,满分1分" />
|
||||
<Column Name="InternetScore" DataType="Double" ItemType="percent" Description="外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,满分1分" />
|
||||
<Column Name="IntranetScore" DataType="Double" ItemType="percent" Description="内网质量。评估到网关的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%" />
|
||||
<Column Name="InternetScore" DataType="Double" ItemType="percent" Description="外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%" />
|
||||
<Column Name="ProcessCount" DataType="Int32" Description="进程数" />
|
||||
<Column Name="TcpConnections" DataType="Int32" Description="连接数。传输数据Established的Tcp网络连接数" />
|
||||
<Column Name="TcpTimeWait" DataType="Int32" Description="主动关闭。主动关闭后TimeWait的Tcp网络连接数,下一步Closed" />
|
||||
|
@ -223,8 +223,8 @@
|
|||
<Column Name="TcpConnections" DataType="Int32" Description="连接数。传输数据Established的Tcp网络连接数" />
|
||||
<Column Name="TcpTimeWait" DataType="Int32" Description="主动关闭。主动关闭后TimeWait的Tcp网络连接数,等待2MSL,确保四次挥手的最后一个ACK能够发出,下一步Closed" />
|
||||
<Column Name="TcpCloseWait" DataType="Int32" Description="被动关闭。作为客户端,收到服务器FIN后进入CloseWait的Tcp网络连接数,还没发送自己的FIN,主要原因是我方太忙" />
|
||||
<Column Name="IntranetScore" DataType="Double" ItemType="percent" Description="内网质量。综合评估到网关的心跳延迟和丢包率,满分1分" />
|
||||
<Column Name="InternetScore" DataType="Double" ItemType="percent" Description="外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,满分1分" />
|
||||
<Column Name="IntranetScore" DataType="Double" ItemType="percent" Description="内网质量。评估到网关的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%" />
|
||||
<Column Name="InternetScore" DataType="Double" ItemType="percent" Description="外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%" />
|
||||
<Column Name="Delay" DataType="Int32" Description="延迟。网络延迟,客户端最近一次心跳耗时的一半,单位ms" />
|
||||
<Column Name="Offset" DataType="Int32" Description="偏移。客户端UTC时间加上一半延迟再减服务端UTC时间,单位ms" />
|
||||
<Column Name="LocalTime" DataType="DateTime" Description="本地时间" />
|
||||
|
|
|
@ -1163,7 +1163,7 @@
|
|||
<td></td>
|
||||
<td></td>
|
||||
<td>N</td>
|
||||
<td>综合评估到网关的心跳延迟和丢包率,满分1分</td>
|
||||
<td>评估到网关的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
@ -1174,7 +1174,7 @@
|
|||
<td></td>
|
||||
<td></td>
|
||||
<td>N</td>
|
||||
<td>综合评估到DNS和星尘服务器的心跳延迟和丢包率,满分1分</td>
|
||||
<td>综合评估到DNS和星尘服务器的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
@ -1736,7 +1736,7 @@
|
|||
<td></td>
|
||||
<td></td>
|
||||
<td>N</td>
|
||||
<td>综合评估到网关的心跳延迟和丢包率,满分1分</td>
|
||||
<td>评估到网关的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
@ -1747,7 +1747,7 @@
|
|||
<td></td>
|
||||
<td></td>
|
||||
<td>N</td>
|
||||
<td>综合评估到DNS和星尘服务器的心跳延迟和丢包率,满分1分</td>
|
||||
<td>综合评估到DNS和星尘服务器的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
|
|
@ -276,19 +276,19 @@ public partial class NodeOnline
|
|||
public Int64 DownlinkSpeed { get => _DownlinkSpeed; set { if (OnPropertyChanging("DownlinkSpeed", value)) { _DownlinkSpeed = value; OnPropertyChanged("DownlinkSpeed"); } } }
|
||||
|
||||
private Double _IntranetScore;
|
||||
/// <summary>内网质量。综合评估到网关的心跳延迟和丢包率,满分1分</summary>
|
||||
/// <summary>内网质量。评估到网关的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%</summary>
|
||||
[DisplayName("内网质量")]
|
||||
[Description("内网质量。综合评估到网关的心跳延迟和丢包率,满分1分")]
|
||||
[Description("内网质量。评估到网关的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%")]
|
||||
[DataObjectField(false, false, false, 0)]
|
||||
[BindColumn("IntranetScore", "内网质量。综合评估到网关的心跳延迟和丢包率,满分1分", "", ItemType = "percent")]
|
||||
[BindColumn("IntranetScore", "内网质量。评估到网关的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%", "", ItemType = "percent")]
|
||||
public Double IntranetScore { get => _IntranetScore; set { if (OnPropertyChanging("IntranetScore", value)) { _IntranetScore = value; OnPropertyChanged("IntranetScore"); } } }
|
||||
|
||||
private Double _InternetScore;
|
||||
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,满分1分</summary>
|
||||
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%</summary>
|
||||
[DisplayName("外网质量")]
|
||||
[Description("外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,满分1分")]
|
||||
[Description("外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%")]
|
||||
[DataObjectField(false, false, false, 0)]
|
||||
[BindColumn("InternetScore", "外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,满分1分", "", ItemType = "percent")]
|
||||
[BindColumn("InternetScore", "外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%", "", ItemType = "percent")]
|
||||
public Double InternetScore { get => _InternetScore; set { if (OnPropertyChanging("InternetScore", value)) { _InternetScore = value; OnPropertyChanged("InternetScore"); } } }
|
||||
|
||||
private Int32 _ProcessCount;
|
||||
|
@ -694,10 +694,10 @@ public partial class NodeOnline
|
|||
/// <summary>下行速度。网络接收速度,字节每秒</summary>
|
||||
public static readonly Field DownlinkSpeed = FindByName("DownlinkSpeed");
|
||||
|
||||
/// <summary>内网质量。综合评估到网关的心跳延迟和丢包率,满分1分</summary>
|
||||
/// <summary>内网质量。评估到网关的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%</summary>
|
||||
public static readonly Field IntranetScore = FindByName("IntranetScore");
|
||||
|
||||
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,满分1分</summary>
|
||||
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%</summary>
|
||||
public static readonly Field InternetScore = FindByName("InternetScore");
|
||||
|
||||
/// <summary>进程数</summary>
|
||||
|
@ -853,10 +853,10 @@ public partial class NodeOnline
|
|||
/// <summary>下行速度。网络接收速度,字节每秒</summary>
|
||||
public const String DownlinkSpeed = "DownlinkSpeed";
|
||||
|
||||
/// <summary>内网质量。综合评估到网关的心跳延迟和丢包率,满分1分</summary>
|
||||
/// <summary>内网质量。评估到网关的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%</summary>
|
||||
public const String IntranetScore = "IntranetScore";
|
||||
|
||||
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,满分1分</summary>
|
||||
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%</summary>
|
||||
public const String InternetScore = "InternetScore";
|
||||
|
||||
/// <summary>进程数</summary>
|
||||
|
|
|
@ -143,19 +143,19 @@ public partial class NodeData
|
|||
public Int32 TcpCloseWait { get => _TcpCloseWait; set { if (OnPropertyChanging("TcpCloseWait", value)) { _TcpCloseWait = value; OnPropertyChanged("TcpCloseWait"); } } }
|
||||
|
||||
private Double _IntranetScore;
|
||||
/// <summary>内网质量。综合评估到网关的心跳延迟和丢包率,满分1分</summary>
|
||||
/// <summary>内网质量。评估到网关的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%</summary>
|
||||
[DisplayName("内网质量")]
|
||||
[Description("内网质量。综合评估到网关的心跳延迟和丢包率,满分1分")]
|
||||
[Description("内网质量。评估到网关的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%")]
|
||||
[DataObjectField(false, false, false, 0)]
|
||||
[BindColumn("IntranetScore", "内网质量。综合评估到网关的心跳延迟和丢包率,满分1分", "", ItemType = "percent")]
|
||||
[BindColumn("IntranetScore", "内网质量。评估到网关的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%", "", ItemType = "percent")]
|
||||
public Double IntranetScore { get => _IntranetScore; set { if (OnPropertyChanging("IntranetScore", value)) { _IntranetScore = value; OnPropertyChanged("IntranetScore"); } } }
|
||||
|
||||
private Double _InternetScore;
|
||||
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,满分1分</summary>
|
||||
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%</summary>
|
||||
[DisplayName("外网质量")]
|
||||
[Description("外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,满分1分")]
|
||||
[Description("外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%")]
|
||||
[DataObjectField(false, false, false, 0)]
|
||||
[BindColumn("InternetScore", "外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,满分1分", "", ItemType = "percent")]
|
||||
[BindColumn("InternetScore", "外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%", "", ItemType = "percent")]
|
||||
public Double InternetScore { get => _InternetScore; set { if (OnPropertyChanging("InternetScore", value)) { _InternetScore = value; OnPropertyChanged("InternetScore"); } } }
|
||||
|
||||
private Int32 _Delay;
|
||||
|
@ -361,10 +361,10 @@ public partial class NodeData
|
|||
/// <summary>被动关闭。作为客户端,收到服务器FIN后进入CloseWait的Tcp网络连接数,还没发送自己的FIN,主要原因是我方太忙</summary>
|
||||
public static readonly Field TcpCloseWait = FindByName("TcpCloseWait");
|
||||
|
||||
/// <summary>内网质量。综合评估到网关的心跳延迟和丢包率,满分1分</summary>
|
||||
/// <summary>内网质量。评估到网关的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%</summary>
|
||||
public static readonly Field IntranetScore = FindByName("IntranetScore");
|
||||
|
||||
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,满分1分</summary>
|
||||
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%</summary>
|
||||
public static readonly Field InternetScore = FindByName("InternetScore");
|
||||
|
||||
/// <summary>延迟。网络延迟,客户端最近一次心跳耗时的一半,单位ms</summary>
|
||||
|
@ -439,10 +439,10 @@ public partial class NodeData
|
|||
/// <summary>被动关闭。作为客户端,收到服务器FIN后进入CloseWait的Tcp网络连接数,还没发送自己的FIN,主要原因是我方太忙</summary>
|
||||
public const String TcpCloseWait = "TcpCloseWait";
|
||||
|
||||
/// <summary>内网质量。综合评估到网关的心跳延迟和丢包率,满分1分</summary>
|
||||
/// <summary>内网质量。评估到网关的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%</summary>
|
||||
public const String IntranetScore = "IntranetScore";
|
||||
|
||||
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,满分1分</summary>
|
||||
/// <summary>外网质量。综合评估到DNS和星尘服务器的心跳延迟和丢包率,1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%</summary>
|
||||
public const String InternetScore = "InternetScore";
|
||||
|
||||
/// <summary>延迟。网络延迟,客户端最近一次心跳耗时的一半,单位ms</summary>
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NewLife.XCode" Version="11.19.2025.701" />
|
||||
<PackageReference Include="NewLife.XCode" Version="11.19.2025.717-beta0003" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
<ItemGroup>
|
||||
<PackageReference Include="NewLife.IP" Version="2.3.2025.601" />
|
||||
<PackageReference Include="NewLife.Redis" Version="6.3.2025.701" />
|
||||
<PackageReference Include="NewLife.Remoting.Extensions" Version="3.4.2025.713-beta1545" />
|
||||
<PackageReference Include="NewLife.Remoting.Extensions" Version="3.4.2025.719-beta0004" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -50,10 +50,10 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NewLife.Cube.Core" Version="6.5.2025.711-beta0137" />
|
||||
<PackageReference Include="NewLife.Cube.Core" Version="6.5.2025.715-beta1654" />
|
||||
<PackageReference Include="NewLife.IP" Version="2.3.2025.601" />
|
||||
<PackageReference Include="NewLife.Redis" Version="6.3.2025.701" />
|
||||
<PackageReference Include="NewLife.Remoting.Extensions" Version="3.4.2025.713-beta1545" />
|
||||
<PackageReference Include="NewLife.Remoting.Extensions" Version="3.4.2025.719-beta0004" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
using System.Net.NetworkInformation;
|
||||
using System.Text.RegularExpressions;
|
||||
using NewLife;
|
||||
using NewLife.Log;
|
||||
|
||||
namespace Stardust.Monitors;
|
||||
|
||||
|
@ -32,7 +30,7 @@ public class PingMonitor
|
|||
{
|
||||
try
|
||||
{
|
||||
var reply = await ping.SendPingAsync(host, 3_000).ConfigureAwait(false);
|
||||
var reply = await ping.SendPingAsync(host, 5_000).ConfigureAwait(false);
|
||||
|
||||
if (reply.Status == IPStatus.Success)
|
||||
rtTimes.Add(reply.RoundtripTime);
|
||||
|
@ -53,7 +51,8 @@ public class PingMonitor
|
|||
if (latency <= threshold)
|
||||
latencyScore = 1f;
|
||||
else
|
||||
latencyScore = Math.Exp(-0.01 * (latency - threshold)); // 衰减系数λ=0.2
|
||||
// 衰减系数λ=0.001。1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%
|
||||
latencyScore = Math.Exp(-0.001 * (latency - threshold));
|
||||
|
||||
// 确保得分在0-1之间
|
||||
var score = successRate * latencyScore;
|
||||
|
|
|
@ -119,10 +119,10 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NewLife.Remoting" Version="3.4.2025.713-beta1545" />
|
||||
<PackageReference Include="NewLife.Remoting" Version="3.4.2025.719-beta0004" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NewLife.Core" Version="11.5.2025.713-beta1307" />
|
||||
<PackageReference Include="NewLife.Core" Version="11.5.2025.717-beta0001" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -29,7 +29,7 @@ class Program
|
|||
|
||||
XTrace.Log.Level = LogLevel.All; // 设置日志级别为所有
|
||||
|
||||
Test8();
|
||||
Test3();
|
||||
|
||||
Console.WriteLine("OK!");
|
||||
Console.ReadKey();
|
||||
|
@ -113,40 +113,16 @@ class Program
|
|||
|
||||
static void Test3()
|
||||
{
|
||||
//var buf = "01005F0004496E666F560000007B2250726F636573734964223A323238342C22".ToHex();
|
||||
//var udp = new UdpClient();
|
||||
//udp.Send(buf, "127.0.0.1", 5500);
|
||||
//var rs = udp.ReceiveString();
|
||||
//latencyScore = Math.Exp(-0.01 * (latency - threshold)); // 衰减系数λ=0.2
|
||||
|
||||
//foreach (Environment.SpecialFolder item in Enum.GetValues(typeof(Environment.SpecialFolder)))
|
||||
//{
|
||||
// var v = Environment.GetFolderPath(item);
|
||||
// Console.WriteLine("{0}:\t{1}", item, v);
|
||||
//}
|
||||
|
||||
var client = new LocalStarClient { Log = XTrace.Log };
|
||||
//client.ProbeAndInstall(null, "1.6");
|
||||
var info = client.GetInfo();
|
||||
|
||||
var appInfo = new AppInfo(Process.GetCurrentProcess());
|
||||
|
||||
for (var i = 0; i < 5; i++)
|
||||
var ds = new[] { 0.1f, 0.2f, 0.5f, 1f, 2f, 3f, 5f, 10f, 15f, 20f, 30f, 50f, 100f, 200f, 500f, 1000f, 2000f, 5000f };
|
||||
foreach (var item in ds)
|
||||
{
|
||||
_ = client.PingAsync(appInfo, 5);
|
||||
|
||||
Thread.Sleep(2000);
|
||||
var score = Math.Exp(-0.01 * (item - 1f));
|
||||
var score2 = Math.Exp(-0.005 * (item - 1f));
|
||||
var score3 = Math.Exp(-0.001 * (item - 1f));
|
||||
XTrace.WriteLine("{0,-10}:\t{1:p2}\t{2:p2}\t{3:p2}", item, score, score2, score3);
|
||||
}
|
||||
|
||||
Console.WriteLine("等待");
|
||||
Console.ReadLine();
|
||||
|
||||
//var p = Process.GetCurrentProcess();
|
||||
//var name = p.MainModule.FileName;
|
||||
//var str = name + Environment.NewLine + name.ToJson();
|
||||
//str += Environment.NewLine + name.ToJson().ToJsonEntity<String>();
|
||||
|
||||
//XTrace.WriteLine(str);
|
||||
//File.WriteAllText("aa.txt".GetFullPath(), str);
|
||||
}
|
||||
|
||||
static void Test4()
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NewLife.Core" Version="11.5.2025.713-beta1307" />
|
||||
<PackageReference Include="NewLife.Core" Version="11.5.2025.717-beta0001" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
Loading…
Reference in New Issue