Преглед изворни кода

修正多线程下载的bug

懒得勤快 пре 3 година
родитељ
комит
bbefb34a1c

+ 2 - 2
Masuit.Tools.Abstractions/Extensions/BaseType/IDictionaryExtensions.cs

@@ -1,8 +1,8 @@
-using System;
+using Masuit.Tools.Systems;
+using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Threading.Tasks;
-using Masuit.Tools.Systems;
 
 namespace Masuit.Tools
 {

+ 72 - 48
Masuit.Tools.Abstractions/Hardware/SystemInfo.cs

@@ -9,6 +9,7 @@ using System.Net;
 using System.Net.NetworkInformation;
 using System.Runtime.InteropServices;
 using System.Text;
+using System.Threading.Tasks;
 
 namespace Masuit.Tools.Hardware
 {
@@ -24,7 +25,7 @@ namespace Masuit.Tools.Hardware
         private const int GwlStyle = -16;
         private const int WsVisible = 268435456;
         private const int WsBorder = 8388608;
-        private static readonly PerformanceCounter PcCpuLoad; //CPU计数器 
+        private static readonly PerformanceCounter PcCpuLoad; //CPU计数器
 
         private static readonly PerformanceCounter MemoryCounter = new PerformanceCounter();
         private static readonly PerformanceCounter CpuCounter = new PerformanceCounter();
@@ -35,26 +36,26 @@ namespace Masuit.Tools.Hardware
         private static readonly PerformanceCounter[] NetRecvCounters;
         private static readonly PerformanceCounter[] NetSentCounters;
 
-        #endregion
+        #endregion 字段
 
-        #region 构造函数 
+        #region 构造函数
 
         /// <summary>
         /// 静态构造函数
         /// </summary>
         static SystemInfo()
         {
-            //初始化CPU计数器 
+            //初始化CPU计数器
             PcCpuLoad = new PerformanceCounter("Processor", "% Processor Time", "_Total")
             {
                 MachineName = "."
             };
             PcCpuLoad.NextValue();
 
-            //CPU个数 
+            //CPU个数
             ProcessorCount = Environment.ProcessorCount;
 
-            //获得物理内存 
+            //获得物理内存
             try
             {
                 using var mc = new ManagementClass("Win32_ComputerSystem");
@@ -88,29 +89,47 @@ namespace Masuit.Tools.Hardware
             }
         }
 
-        #endregion
+        #endregion 构造函数
 
         private static bool CompactFormat { get; set; }
 
-        #region CPU核心 
+        #region CPU核心
 
         /// <summary>
-        /// 获取CPU核心数 
+        /// 获取CPU核心数
         /// </summary>
         public static int ProcessorCount { get; }
 
-        #endregion
+        #endregion CPU核心
 
-        #region CPU占用率 
+        #region CPU占用率
 
         /// <summary>
         /// 获取CPU占用率 %
         /// </summary>
         public static float CpuLoad => PcCpuLoad.NextValue();
 
-        #endregion
+        /// <summary>
+        /// 获取当前进程的CPU使用率(至少需要0.5s)
+        /// </summary>
+        /// <returns></returns>
+        public static async Task<double> GetCpuUsageForProcess()
+        {
+            var startTime = DateTime.UtcNow;
+            using var p1 = Process.GetCurrentProcess();
+            var startCpuUsage = p1.TotalProcessorTime;
+            await Task.Delay(500);
+            var endTime = DateTime.UtcNow;
+            using var p2 = Process.GetCurrentProcess();
+            var endCpuUsage = p2.TotalProcessorTime;
+            var cpuUsedMs = (endCpuUsage - startCpuUsage).TotalMilliseconds;
+            var totalMsPassed = (endTime - startTime).TotalMilliseconds;
+            return cpuUsedMs / (Environment.ProcessorCount * totalMsPassed) * 100;
+        }
 
-        #region 可用内存 
+        #endregion CPU占用率
+
+        #region 可用内存
 
         /// <summary>
         /// 获取可用内存
@@ -143,21 +162,21 @@ namespace Masuit.Tools.Hardware
             }
         }
 
-        #endregion
+        #endregion 可用内存
 
-        #region 物理内存 
+        #region 物理内存
 
         /// <summary>
         /// 获取物理内存
         /// </summary>
         public static long PhysicalMemory { get; }
 
-        #endregion
+        #endregion 物理内存
 
-        #region 查找所有应用程序标题 
+        #region 查找所有应用程序标题
 
         /// <summary>
-        /// 查找所有应用程序标题 
+        /// 查找所有应用程序标题
         /// </summary>
         /// <param name="handle">应用程序标题范型</param>
         /// <returns>所有应用程序集合</returns>
@@ -189,7 +208,7 @@ namespace Masuit.Tools.Hardware
             return apps;
         }
 
-        #endregion
+        #endregion 查找所有应用程序标题
 
         #region 获取CPU的数量
 
@@ -211,16 +230,16 @@ namespace Masuit.Tools.Hardware
             }
         }
 
-        #endregion
+        #endregion 获取CPU的数量
 
         #region 获取CPU信息
 
         private static readonly Lazy<List<ManagementBaseObject>> CpuObjects = new Lazy<List<ManagementBaseObject>>(() =>
-        {
-            using var mos = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
-            using var moc = mos.Get();
-            return moc.AsParallel().Cast<ManagementBaseObject>().ToList();
-        });
+                             {
+                                 using var mos = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
+                                 using var moc = mos.Get();
+                                 return moc.AsParallel().Cast<ManagementBaseObject>().ToList();
+                             });
 
         /// <summary>
         /// 获取CPU信息
@@ -251,7 +270,7 @@ namespace Masuit.Tools.Hardware
             }
         }
 
-        #endregion
+        #endregion 获取CPU信息
 
         #region 获取内存信息
 
@@ -272,7 +291,7 @@ namespace Masuit.Tools.Hardware
             };
         }
 
-        #endregion
+        #endregion 获取内存信息
 
         #region 获取CPU温度
 
@@ -304,7 +323,7 @@ namespace Masuit.Tools.Hardware
             return 0;
         }
 
-        #endregion
+        #endregion 获取CPU温度
 
         #region WMI接口获取CPU使用率
 
@@ -318,7 +337,7 @@ namespace Masuit.Tools.Hardware
             return CompactFormat ? (int)d + "%" : d.ToString("F") + "%";
         }
 
-        #endregion
+        #endregion WMI接口获取CPU使用率
 
         #region 获取虚拟内存使用率详情
 
@@ -363,7 +382,7 @@ namespace Masuit.Tools.Hardware
             return GetCounterValue(MemoryCounter, "Memory", "Commit Limit", null);
         }
 
-        #endregion
+        #endregion 获取虚拟内存使用率详情
 
         #region 获取物理内存使用率详情
 
@@ -411,7 +430,7 @@ namespace Masuit.Tools.Hardware
             return GetTotalPhysicalMemory() - GetFreePhysicalMemory();
         }
 
-        #endregion
+        #endregion 获取物理内存使用率详情
 
         #region 获取硬盘的读写速率
 
@@ -422,7 +441,7 @@ namespace Masuit.Tools.Hardware
         /// <returns></returns>
         public static float GetDiskData(DiskData dd) => dd == DiskData.Read ? GetCounterValue(DiskReadCounter, "PhysicalDisk", "Disk Read Bytes/sec", "_Total") : dd == DiskData.Write ? GetCounterValue(DiskWriteCounter, "PhysicalDisk", "Disk Write Bytes/sec", "_Total") : dd == DiskData.ReadAndWrite ? GetCounterValue(DiskReadCounter, "PhysicalDisk", "Disk Read Bytes/sec", "_Total") + GetCounterValue(DiskWriteCounter, "PhysicalDisk", "Disk Write Bytes/sec", "_Total") : 0;
 
-        #endregion
+        #endregion 获取硬盘的读写速率
 
         #region 获取网络的传输速率
 
@@ -448,12 +467,15 @@ namespace Masuit.Tools.Hardware
                     case NetData.Received:
                         d += receied;
                         break;
+
                     case NetData.Sent:
                         d += send;
                         break;
+
                     case NetData.ReceivedAndSent:
                         d += receied + send;
                         break;
+
                     default:
                         d += 0;
                         break;
@@ -463,7 +485,7 @@ namespace Masuit.Tools.Hardware
             return d;
         }
 
-        #endregion
+        #endregion 获取网络的传输速率
 
         /// <summary>
         /// 获取网卡硬件地址
@@ -471,7 +493,7 @@ namespace Masuit.Tools.Hardware
         /// <returns></returns>
         public static IList<string> GetMacAddress()
         {
-            //获取网卡硬件地址       
+            //获取网卡硬件地址
             try
             {
                 IList<string> list = new List<string>();
@@ -496,19 +518,19 @@ namespace Masuit.Tools.Hardware
             }
         }
 
-        /// <summary>  
-        /// 获取当前使用的IP  
-        /// </summary>  
-        /// <returns></returns>  
+        /// <summary>
+        /// 获取当前使用的IP
+        /// </summary>
+        /// <returns></returns>
         public static IPAddress GetLocalUsedIP()
         {
             return NetworkInterface.GetAllNetworkInterfaces().OrderByDescending(c => c.Speed).Where(c => c.NetworkInterfaceType != NetworkInterfaceType.Loopback && c.OperationalStatus == OperationalStatus.Up).SelectMany(n => n.GetIPProperties().UnicastAddresses.Select(u => u.Address)).FirstOrDefault();
         }
 
-        /// <summary>  
+        /// <summary>
         /// 获取本机所有的ip地址
-        /// </summary>  
-        /// <returns></returns>  
+        /// </summary>
+        /// <returns></returns>
         public static List<UnicastIPAddressInformation> GetLocalIPs()
         {
             var interfaces = NetworkInterface.GetAllNetworkInterfaces().OrderByDescending(c => c.Speed).Where(c => c.NetworkInterfaceType != NetworkInterfaceType.Loopback && c.OperationalStatus == OperationalStatus.Up); //所有网卡信息
@@ -535,7 +557,7 @@ namespace Masuit.Tools.Hardware
             return s + (Unit)unit;
         }
 
-        #endregion
+        #endregion 将速度值格式化成字节单位
 
         #region 查询计算机系统信息
 
@@ -585,7 +607,7 @@ namespace Masuit.Tools.Hardware
             return string.Empty;
         }
 
-        #endregion
+        #endregion 查询计算机系统信息
 
         #region 获取环境变量
 
@@ -596,7 +618,7 @@ namespace Masuit.Tools.Hardware
         /// <returns></returns>
         public static string QueryEnvironment(string type) => Environment.ExpandEnvironmentVariables(type);
 
-        #endregion
+        #endregion 获取环境变量
 
         #region 获取磁盘空间
 
@@ -638,7 +660,7 @@ namespace Masuit.Tools.Hardware
             }
         }
 
-        #endregion
+        #endregion 获取磁盘空间
 
         private static float GetCounterValue(PerformanceCounter pc, string categoryName, string counterName, string instanceName)
         {
@@ -648,9 +670,10 @@ namespace Masuit.Tools.Hardware
             return pc.NextValue();
         }
 
-        #region Win32API声明 
+        #region Win32API声明
 
 #pragma warning disable 1591
+
         [DllImport("User32")]
         public static extern int GetWindow(int hWnd, int wCmd);
 
@@ -662,8 +685,9 @@ namespace Masuit.Tools.Hardware
 
         [DllImport("user32", CharSet = CharSet.Auto)]
         public static extern int GetWindowTextLength(IntPtr hWnd);
+
 #pragma warning restore 1591
 
-        #endregion
+        #endregion Win32API声明
     }
-}
+}

+ 1 - 1
Masuit.Tools.Abstractions/Masuit.Tools.Abstractions.csproj

@@ -4,7 +4,7 @@
     <LangVersion>latest</LangVersion>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <CodeAnalysisRuleSet />
-    <Version>2.4.7.8</Version>
+    <Version>2.4.7.9</Version>
     <Authors>懒得勤快</Authors>
     <Description>Masuit.Tools基础公共库,包含一些常用的操作类,大都是静态类,加密解密,反射操作,Excel简单导出,权重随机筛选算法,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,集合扩展等常用封装。</Description>
     <Copyright>懒得勤快,长空X</Copyright>

+ 2 - 2
Masuit.Tools.Abstractions/Models/Circle.cs

@@ -1,5 +1,5 @@
-using System;
-using Masuit.Tools.Maths;
+using Masuit.Tools.Maths;
+using System;
 
 namespace Masuit.Tools.Models
 {

+ 48 - 23
Masuit.Tools.Abstractions/Net/MultiThreadDownloader.cs

@@ -28,7 +28,8 @@ namespace Masuit.Tools.Net
         private bool _rangeAllowed;
         private readonly HttpWebRequest _request;
         private Action<HttpWebRequest> _requestConfigure = req => req.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36";
-        #endregion
+
+        #endregion 属性
 
         #region 公共属性
 
@@ -69,7 +70,10 @@ namespace Masuit.Tools.Net
             {
                 try
                 {
-                    return PartialDownloaderList.Where(t => t != null).Sum(t => t.TotalBytesRead);
+                    lock (this)
+                    {
+                        return PartialDownloaderList.Where(t => t != null).Sum(t => t.TotalBytesRead);
+                    }
                 }
                 catch
                 {
@@ -91,7 +95,16 @@ namespace Masuit.Tools.Net
         /// <summary>
         /// 下载速度
         /// </summary>
-        public float TotalSpeedInBytes => PartialDownloaderList.Sum(t => t.SpeedInBytes);
+        public float TotalSpeedInBytes
+        {
+            get
+            {
+                lock (this)
+                {
+                    return PartialDownloaderList.Sum(t => t.SpeedInBytes);
+                }
+            }
+        }
 
         /// <summary>
         /// 下载块
@@ -103,7 +116,7 @@ namespace Masuit.Tools.Net
         /// </summary>
         public string FilePath { get; set; }
 
-        #endregion
+        #endregion 公共属性
 
         #region 变量
 
@@ -124,7 +137,7 @@ namespace Masuit.Tools.Net
 
         private readonly AsyncOperation _aop;
 
-        #endregion
+        #endregion 变量
 
         #region 下载管理器
 
@@ -166,7 +179,7 @@ namespace Masuit.Tools.Net
         {
         }
 
-        #endregion
+        #endregion 下载管理器
 
         #region 事件
 
@@ -202,16 +215,19 @@ namespace Masuit.Tools.Net
             var temp = new PartialDownloader(_url, TempFileDirectory, Guid.NewGuid().ToString(), from, to, true);
             temp.DownloadPartCompleted += temp_DownloadPartCompleted;
             temp.DownloadPartProgressChanged += temp_DownloadPartProgressChanged;
-            PartialDownloaderList.Add(temp);
+            lock (this)
+            {
+                PartialDownloaderList.Add(temp);
+            }
             temp.Start(_requestConfigure);
         }
 
-        void temp_DownloadPartProgressChanged(object sender, EventArgs e)
+        private void temp_DownloadPartProgressChanged(object sender, EventArgs e)
         {
             UpdateProgress();
         }
 
-        void UpdateProgress()
+        private void UpdateProgress()
         {
             int pr = (int)(TotalBytesReceived * 1d / Size * 100);
             if (TotalProgress != pr)
@@ -224,11 +240,11 @@ namespace Masuit.Tools.Net
             }
         }
 
-        #endregion
+        #endregion 事件
 
         #region 方法
 
-        void CreateFirstPartitions()
+        private void CreateFirstPartitions()
         {
             Size = GetContentLength(ref _rangeAllowed, ref _url);
             int maximumPart = (int)(Size / (25 * 1024));
@@ -247,12 +263,15 @@ namespace Masuit.Tools.Net
                 var temp = CreateNew(i, NumberOfParts, Size);
                 temp.DownloadPartProgressChanged += temp_DownloadPartProgressChanged;
                 temp.DownloadPartCompleted += temp_DownloadPartCompleted;
-                PartialDownloaderList.Add(temp);
+                lock (this)
+                {
+                    PartialDownloaderList.Add(temp);
+                }
                 temp.Start(_requestConfigure);
             }
         }
 
-        void MergeParts()
+        private void MergeParts()
         {
             var mergeOrderedList = PartialDownloaderList.OrderBy(x => x.From);
             var dir = new FileInfo(FilePath).DirectoryName;
@@ -293,7 +312,7 @@ namespace Masuit.Tools.Net
             }
         }
 
-        PartialDownloader CreateNew(int order, int parts, long contentLength)
+        private PartialDownloader CreateNew(int order, int parts, long contentLength)
         {
             int division = (int)contentLength / parts;
             int remaining = (int)contentLength % parts;
@@ -310,15 +329,15 @@ namespace Masuit.Tools.Net
         /// <param name="wait"></param>
         public static void WaitOrResumeAll(List<PartialDownloader> list, bool wait)
         {
-            foreach (var item in list)
+            for (var index = 0; index < list.Count; index++)
             {
                 if (wait)
                 {
-                    item.Wait();
+                    list[index].Wait();
                 }
                 else
                 {
-                    item.ResumeAfterWait();
+                    list[index].ResumeAfterWait();
                 }
             }
         }
@@ -355,7 +374,7 @@ namespace Masuit.Tools.Net
             return ctl;
         }
 
-        #endregion
+        #endregion 方法
 
         #region 公共方法
 
@@ -364,9 +383,12 @@ namespace Masuit.Tools.Net
         /// </summary>
         public void Pause()
         {
-            foreach (var t in PartialDownloaderList.Where(t => !t.Completed))
+            lock (this)
             {
-                t.Stop();
+                foreach (var t in PartialDownloaderList.Where(t => !t.Completed))
+                {
+                    t.Stop();
+                }
             }
 
             Thread.Sleep(200);
@@ -401,13 +423,16 @@ namespace Masuit.Tools.Net
                     var temp = new PartialDownloader(_url, TempFileDirectory, Guid.NewGuid().ToString(), from, to, _rangeAllowed);
                     temp.DownloadPartProgressChanged += temp_DownloadPartProgressChanged;
                     temp.DownloadPartCompleted += temp_DownloadPartCompleted;
-                    PartialDownloaderList.Add(temp);
+                    lock (this)
+                    {
+                        PartialDownloaderList.Add(temp);
+                    }
                     PartialDownloaderList[i].To = PartialDownloaderList[i].CurrentPosition;
                     temp.Start(_requestConfigure);
                 }
             }
         }
 
-        #endregion
+        #endregion 公共方法
     }
-}
+}

+ 0 - 1
Masuit.Tools.Abstractions/Reflection/ReflectionUtil.cs

@@ -1,5 +1,4 @@
 using System;
-using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Drawing;

+ 3 - 3
Masuit.Tools.Abstractions/Systems/CompositeContractResolver.cs

@@ -1,7 +1,7 @@
-using System.Linq;
-using System.Reflection;
-using Newtonsoft.Json;
+using Newtonsoft.Json;
 using Newtonsoft.Json.Serialization;
+using System.Linq;
+using System.Reflection;
 
 namespace Masuit.Tools.Systems;
 

+ 3 - 3
Masuit.Tools.Abstractions/Systems/DeserializeOnlyContractResolver.cs

@@ -1,7 +1,7 @@
-using Newtonsoft.Json.Serialization;
-using Newtonsoft.Json;
-using System.Reflection;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Serialization;
 using System.Linq;
+using System.Reflection;
 
 namespace Masuit.Tools.Systems;
 

+ 3 - 3
Masuit.Tools.Abstractions/Systems/FallbackJsonPropertyResolver.cs

@@ -1,8 +1,8 @@
-using System;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Serialization;
+using System;
 using System.Collections.Generic;
 using System.Reflection;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Serialization;
 
 namespace Masuit.Tools.Systems;
 

+ 2 - 2
Masuit.Tools.Abstractions/Systems/SnowFlake.cs

@@ -116,7 +116,7 @@ namespace Masuit.Tools.Systems
         {
             lock (SyncRoot)
             {
-                var timestamp = (long)DateTime.UtcNow.GetTotalMilliseconds();
+                var timestamp = DateTime.UtcNow.GetTotalMilliseconds();
                 if (_lastTimestamp == timestamp)
                 {
                     //同一毫秒中生成ID
@@ -124,7 +124,7 @@ namespace Masuit.Tools.Systems
                     if (_sequence == 0)
                     {
                         //一毫秒内产生的ID计数已达上限,等待下一毫秒
-                        timestamp = (long)DateTime.UtcNow.GetTotalMilliseconds();
+                        timestamp = DateTime.UtcNow.GetTotalMilliseconds();
                     }
                 }
                 else

+ 27 - 1
Masuit.Tools.Abstractions/Win32/Windows.cs

@@ -95,6 +95,7 @@ namespace Masuit.Tools.Win32
                 proc.Start();
 
                 using var sr = new System.IO.StreamReader(proc.StandardOutput.BaseStream, Encoding.Default);
+
                 //上面标记的是原文,下面是我自己调试错误后自行修改的
                 Thread.Sleep(100); //貌似调用系统的nslookup还未返回数据或者数据未编码完成,程序就已经跳过直接执行
                 if (!proc.HasExited) //在无参数调用nslookup后,可以继续输入命令继续操作,如果进程未停止就直接执行
@@ -132,6 +133,31 @@ namespace Masuit.Tools.Win32
                 return Environment.OSVersion.VersionString;
             }
         }
+
+        /// <summary>
+        /// 获取当前进程的CPU使用率
+        /// </summary>
+        /// <returns></returns>
+        public static float GetCpuUsageForProcess()
+        {
+            using var process = Process.GetCurrentProcess();
+            var currentProcessName = process.ProcessName;
+            using var cpuCounter = new PerformanceCounter("Process", "% Processor Time", currentProcessName);
+            cpuCounter.NextValue();
+            return cpuCounter.NextValue();
+        }
+
+        /// <summary>
+        /// 获取进程的CPU使用率
+        /// </summary>
+        /// <param name="processName">进程名字</param>
+        /// <returns></returns>
+        public static float GetCpuUsageForProcess(string processName)
+        {
+            using var cpuCounter = new PerformanceCounter("Process", "% Processor Time", processName);
+            cpuCounter.NextValue();
+            return cpuCounter.NextValue();
+        }
     }
 
     /// <summary>
@@ -344,4 +370,4 @@ namespace Masuit.Tools.Win32
             }
         }
     }
-}
+}

+ 1 - 1
Masuit.Tools.AspNetCore/ModelBinder/BodyOrDefaultBindingSource.cs

@@ -14,4 +14,4 @@ public class BodyOrDefaultBindingSource : BindingSource
     {
         return bindingSource == Body || bindingSource == this;
     }
-}
+}

+ 1 - 1
Masuit.Tools.AspNetCore/ModelBinder/FromBodyOrDefaultAttribute.cs

@@ -7,4 +7,4 @@ namespace Masuit.Tools.AspNetCore.ModelBinder;
 public class FromBodyOrDefaultAttribute : Attribute, IBindingSourceMetadata
 {
     public BindingSource BindingSource => BodyOrDefaultBindingSource.BodyOrDefault;
-}
+}

+ 2 - 2
Masuit.Tools.Core/Masuit.Tools.Core.csproj

@@ -18,7 +18,7 @@ github:https://github.com/ldqk/Masuit.Tools
         <UserSecretsId>830c282f-f7c1-42be-8651-4cd06ac8e73f</UserSecretsId>
         <RepositoryType>Github</RepositoryType>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-        <Version>2.4.7.8</Version>
+        <Version>2.4.7.9</Version>
         <FileVersion>2.4.5.6</FileVersion>
         <Company>masuit.com</Company>
         <AssemblyVersion>2.4.5.6</AssemblyVersion>
@@ -64,7 +64,7 @@ github:https://github.com/ldqk/Masuit.Tools
     </ItemGroup>
     <ItemGroup Condition=" '$(TargetFramework)' == 'net6'">
         <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
-        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.2" />
+        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.3" />
         <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0" />
         <PackageReference Include="Microsoft.Extensions.Http" Version="6.0" />
         <PackageReference Include="System.Diagnostics.PerformanceCounter" Version="6.0" />

+ 1 - 1
Masuit.Tools.Net45/package.nuspec

@@ -4,7 +4,7 @@
     <!--*-->
     <id>Masuit.Tools.Net45</id>
     <!--*-->
-    <version>2.4.7.8</version>
+    <version>2.4.7.9</version>
     <title>Masuit.Tools</title>
     <!--*-->
     <authors>懒得勤快</authors>

+ 1 - 1
Masuit.Tools/package.nuspec

@@ -4,7 +4,7 @@
     <!--*-->
     <id>Masuit.Tools.Net</id>
     <!--*-->
-    <version>2.4.7.8</version>
+    <version>2.4.7.9</version>
     <title>Masuit.Tools</title>
     <!--*-->
     <authors>懒得勤快</authors>