Browse Source

增加一些字典的异步扩展方法

懒得勤快 4 years ago
parent
commit
e84335a72f

+ 5 - 5
Masuit.Tools.Abstractions/Extensions/BaseType/BigIntegerExtensions.cs

@@ -1,5 +1,5 @@
-using System.Numerics;
-using Masuit.Tools.Strings;
+using Masuit.Tools.Strings;
+using System.Numerics;
 
 namespace Masuit.Tools
 {
@@ -9,11 +9,11 @@ namespace Masuit.Tools
         /// 十进制转任意进制
         /// </summary>
         /// <param name="num"></param>
-        /// <param name="bin">进制</param>
+        /// <param name="base">进制</param>
         /// <returns></returns>
-        public static string ToBinary(this BigInteger num, int bin)
+        public static string ToBinary(this BigInteger num, byte @base)
         {
-            var nf = new NumberFormater(bin);
+            var nf = new NumberFormater(@base);
             return nf.ToString(num);
         }
     }

+ 142 - 6
Masuit.Tools.Abstractions/Extensions/BaseType/IDictionaryExtensions.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
+using System.Threading.Tasks;
 
 namespace Masuit.Tools
 {
@@ -85,6 +86,30 @@ namespace Masuit.Tools
             return @this[key];
         }
 
+        /// <summary>
+        /// 添加或更新键值对
+        /// </summary>
+        /// <typeparam name="TKey"></typeparam>
+        /// <typeparam name="TValue"></typeparam>
+        /// <param name="this"></param>
+        /// <param name="key">键</param>
+        /// <param name="addValue">添加时的值</param>
+        /// <param name="updateValueFactory">更新时的操作</param>
+        /// <returns></returns>
+        public static async Task<TValue> AddOrUpdateAsync<TKey, TValue>(this IDictionary<TKey, TValue> @this, TKey key, TValue addValue, Func<TKey, TValue, Task<TValue>> updateValueFactory)
+        {
+            if ([email protected](key))
+            {
+                @this.Add(key, addValue);
+            }
+            else
+            {
+                @this[key] = await updateValueFactory(key, @this[key]);
+            }
+
+            return @this[key];
+        }
+
         /// <summary>
         /// 添加或更新键值对
         /// </summary>
@@ -126,6 +151,20 @@ namespace Masuit.Tools
             }
         }
 
+        /// <summary>
+        /// 添加或更新键值对
+        /// </summary>
+        /// <typeparam name="TKey"></typeparam>
+        /// <typeparam name="TValue"></typeparam>
+        /// <param name="this"></param>
+        /// <param name="that">另一个字典集</param>
+        /// <param name="updateValueFactory">更新时的操作</param>
+        /// <returns></returns>
+        public static Task AddOrUpdateAsync<TKey, TValue>(this IDictionary<TKey, TValue> @this, IDictionary<TKey, TValue> that, Func<TKey, TValue, Task<TValue>> updateValueFactory)
+        {
+            return that.ForeachAsync(item => AddOrUpdateAsync(@this, item.Key, item.Value, updateValueFactory));
+        }
+
         /// <summary>
         /// 添加或更新键值对
         /// </summary>
@@ -143,6 +182,20 @@ namespace Masuit.Tools
             }
         }
 
+        /// <summary>
+        /// 添加或更新键值对
+        /// </summary>
+        /// <typeparam name="TKey"></typeparam>
+        /// <typeparam name="TValue"></typeparam>
+        /// <param name="this"></param>
+        /// <param name="that">另一个字典集</param>
+        /// <param name="updateValueFactory">更新时的操作</param>
+        /// <returns></returns>
+        public static Task AddOrUpdateAsyncTo<TKey, TValue>(this IDictionary<TKey, TValue> @this, IDictionary<TKey, TValue> that, Func<TKey, TValue, Task<TValue>> updateValueFactory)
+        {
+            return @this.ForeachAsync(item => AddOrUpdateAsync(that, item.Key, item.Value, updateValueFactory));
+        }
+
         /// <summary>
         /// 添加或更新键值对
         /// </summary>
@@ -167,6 +220,30 @@ namespace Masuit.Tools
             return @this[key];
         }
 
+        /// <summary>
+        /// 添加或更新键值对
+        /// </summary>
+        /// <typeparam name="TKey"></typeparam>
+        /// <typeparam name="TValue"></typeparam>
+        /// <param name="this"></param>
+        /// <param name="key">键</param>
+        /// <param name="addValueFactory">添加时的操作</param>
+        /// <param name="updateValueFactory">更新时的操作</param>
+        /// <returns></returns>
+        public static async Task<TValue> AddOrUpdateAsync<TKey, TValue>(this IDictionary<TKey, TValue> @this, TKey key, Func<TKey, Task<TValue>> addValueFactory, Func<TKey, TValue, Task<TValue>> updateValueFactory)
+        {
+            if ([email protected](key))
+            {
+                @this.Add(key, await addValueFactory(key));
+            }
+            else
+            {
+                @this[key] = await updateValueFactory(key, @this[key]);
+            }
+
+            return @this[key];
+        }
+
         /// <summary>
         /// 获取或添加
         /// </summary>
@@ -186,6 +263,25 @@ namespace Masuit.Tools
             return @this[key];
         }
 
+        /// <summary>
+        /// 获取或添加
+        /// </summary>
+        /// <typeparam name="TKey"></typeparam>
+        /// <typeparam name="TValue"></typeparam>
+        /// <param name="this"></param>
+        /// <param name="key"></param>
+        /// <param name="addValueFactory"></param>
+        /// <returns></returns>
+        public static async Task<TValue> GetOrAddAsync<TKey, TValue>(this IDictionary<TKey, TValue> @this, TKey key, Func<Task<TValue>> addValueFactory)
+        {
+            if ([email protected](key))
+            {
+                @this.Add(key, await addValueFactory());
+            }
+
+            return @this[key];
+        }
+
         /// <summary>
         /// 获取或添加
         /// </summary>
@@ -218,6 +314,16 @@ namespace Masuit.Tools
             }
         }
 
+        /// <summary>
+        /// 遍历IDictionary
+        /// </summary>
+        /// <param name="dic"></param>
+        /// <param name="action">回调方法</param>
+        public static Task ForEachAsync<TKey, TValue>(this IDictionary<TKey, TValue> dic, Func<TKey, TValue, Task> action)
+        {
+            return dic.ForeachAsync(x => action(x.Key, x.Value));
+        }
+
         /// <summary>
         /// 安全的转换成字典集
         /// </summary>
@@ -258,6 +364,23 @@ namespace Masuit.Tools
             return dic;
         }
 
+        /// <summary>
+        /// 安全的转换成字典集
+        /// </summary>
+        /// <typeparam name="TSource"></typeparam>
+        /// <typeparam name="TKey"></typeparam>
+        /// <typeparam name="TElement"></typeparam>
+        /// <param name="source"></param>
+        /// <param name="keySelector">键选择器</param>
+        /// <param name="elementSelector">值选择器</param>
+        /// <returns></returns>
+        public static async Task<IDictionary<TKey, TElement>> ToDictionarySafetyAsync<TSource, TKey, TElement>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, Task<TElement>> elementSelector)
+        {
+            var dic = new ConcurrentDictionary<TKey, TElement>();
+            await source.ForeachAsync(async item => dic.AddOrUpdate(keySelector(item), await elementSelector(item)));
+            return dic;
+        }
+
         /// <summary>
         /// 安全的转换成字典集
         /// </summary>
@@ -299,6 +422,23 @@ namespace Masuit.Tools
             return dic;
         }
 
+        /// <summary>
+        /// 安全的转换成字典集
+        /// </summary>
+        /// <typeparam name="TSource"></typeparam>
+        /// <typeparam name="TKey"></typeparam>
+        /// <typeparam name="TElement"></typeparam>
+        /// <param name="source"></param>
+        /// <param name="keySelector">键选择器</param>
+        /// <param name="elementSelector">值选择器</param>
+        /// <returns></returns>
+        public static async Task<ConcurrentDictionary<TKey, TElement>> ToConcurrentDictionaryAsync<TSource, TKey, TElement>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, Task<TElement>> elementSelector)
+        {
+            var dic = new ConcurrentDictionary<TKey, TElement>();
+            await source.ForeachAsync(async item => dic.AddOrUpdate(keySelector(item), await elementSelector(item)));
+            return dic;
+        }
+
         /// <summary>
         /// 转换成并发字典集合
         /// </summary>
@@ -308,9 +448,7 @@ namespace Masuit.Tools
         /// <returns></returns>
         public static ConcurrentDictionary<TKey, TValue> AsConcurrentDictionary<TKey, TValue>(this Dictionary<TKey, TValue> dic)
         {
-            var cd = new ConcurrentDictionary<TKey, TValue>();
-            cd.AddOrUpdate(dic);
-            return cd;
+            return new(dic);
         }
 
         /// <summary>
@@ -322,9 +460,7 @@ namespace Masuit.Tools
         /// <returns></returns>
         public static Dictionary<TKey, TValue> AsDictionary<TKey, TValue>(this ConcurrentDictionary<TKey, TValue> dic)
         {
-            var cd = new Dictionary<TKey, TValue>();
-            cd.AddOrUpdate(dic);
-            return cd;
+            return new(dic);
         }
     }
 }

+ 11 - 0
Masuit.Tools.Abstractions/Extensions/BaseType/IEnumerableExtensions.cs

@@ -465,5 +465,16 @@ namespace Masuit.Tools
 
             return result;
         }
+
+        /// <summary>
+        /// 随机排序
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="source"></param>
+        /// <returns></returns>
+        public static IOrderedEnumerable<T> OrderByRandom<T>(this IEnumerable<T> source)
+        {
+            return source.OrderBy(_ => Guid.NewGuid());
+        }
     }
 }

+ 6 - 6
Masuit.Tools.Abstractions/Extensions/BaseType/IntExtensions.cs

@@ -1,9 +1,9 @@
-using System;
-using Masuit.Tools.Strings;
+using Masuit.Tools.Strings;
+using System;
 
 namespace Masuit.Tools
 {
-    public static  class IntExtensions
+    public static class IntExtensions
     {
         /// <summary>
         /// 转换成字节数组
@@ -19,11 +19,11 @@ namespace Masuit.Tools
         /// 十进制转任意进制
         /// </summary>
         /// <param name="num"></param>
-        /// <param name="bin">进制</param>
+        /// <param name="newBase">进制</param>
         /// <returns></returns>
-        public static string ToBinary(this int num, int bin)
+        public static string ToBinary(this int num, byte newBase)
         {
-            var nf = new NumberFormater(bin);
+            var nf = new NumberFormater(newBase);
             return nf.ToString(num);
         }
 

+ 5 - 5
Masuit.Tools.Abstractions/Extensions/BaseType/LongExtensions.cs

@@ -1,5 +1,5 @@
-using System;
-using Masuit.Tools.Strings;
+using Masuit.Tools.Strings;
+using System;
 
 namespace Masuit.Tools
 {
@@ -9,11 +9,11 @@ namespace Masuit.Tools
         /// 十进制转任意进制
         /// </summary>
         /// <param name="num"></param>
-        /// <param name="bin">进制</param>
+        /// <param name="newBase">进制</param>
         /// <returns></returns>
-        public static string ToBinary(this long num, int bin)
+        public static string ToBinary(this long num, byte newBase)
         {
-            var nf = new NumberFormater(bin);
+            var nf = new NumberFormater(newBase);
             return nf.ToString(num);
         }
 

+ 17 - 6
Masuit.Tools.Abstractions/Extensions/BaseType/StringExtensions.cs

@@ -68,11 +68,11 @@ namespace Masuit.Tools
         /// 任意进制转十进制
         /// </summary>
         /// <param name="str"></param>
-        /// <param name="bin">进制</param>
+        /// <param name="base">进制</param>
         /// <returns></returns>
-        public static long FromBinary(this string str, int bin)
+        public static long FromBinary(this string str, byte @base)
         {
-            var nf = new NumberFormater(bin);
+            var nf = new NumberFormater(@base);
             return nf.FromString(str);
         }
 
@@ -80,11 +80,11 @@ namespace Masuit.Tools
         /// 任意进制转大数十进制
         /// </summary>
         /// <param name="str"></param>
-        /// <param name="bin">进制</param>
+        /// <param name="base">进制</param>
         /// <returns></returns>
-        public static BigInteger FromBinaryBig(this string str, int bin)
+        public static BigInteger FromBinaryBig(this string str, byte @base)
         {
-            var nf = new NumberFormater(bin);
+            var nf = new NumberFormater(@base);
             return nf.FromStringBig(str);
         }
 
@@ -640,6 +640,17 @@ $", RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase | RegexOption
             }
             return isPatnumTrue;
         }
+
+        /// <summary>
+        /// 取字符串前{length}个字
+        /// </summary>
+        /// <param name="s"></param>
+        /// <param name="length"></param>
+        /// <returns></returns>
+        public static string Take(this string s, int length)
+        {
+            return s.Length > length ? s.Substring(0, length) : s;
+        }
     }
     #endregion
 }

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

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

+ 16 - 10
Masuit.Tools.Abstractions/Strings/NumberFormater.cs

@@ -25,7 +25,7 @@ namespace Masuit.Tools.Strings
         /// <summary>
         /// 起始值偏移
         /// </summary>
-        private readonly int _offset;
+        private readonly byte _offset;
 
         /// <summary>
         /// 数制格式化器
@@ -40,7 +40,7 @@ namespace Masuit.Tools.Strings
         /// </summary>
         /// <param name="characters">符号集</param>
         /// <param name="offset">起始值偏移</param>
-        public NumberFormater(string characters, int offset = 0)
+        public NumberFormater(string characters, byte offset = 0)
         {
             if (string.IsNullOrEmpty(characters))
             {
@@ -54,21 +54,26 @@ namespace Masuit.Tools.Strings
         /// <summary>
         /// 数制格式化器
         /// </summary>
-        /// <param name="bin">进制</param>
+        /// <param name="base">进制</param>
         /// <param name="offset">起始值偏移</param>
-        public NumberFormater(int bin, int offset = 0)
+        public NumberFormater(byte @base, byte offset = 0)
         {
-            if (bin < 2)
+            if (@base < 2)
             {
-                bin = 2;
+                @base = 2;
             }
 
-            if (bin > 64)
+            if (@base > 64)
             {
                 throw new ArgumentException("默认进制最大支持64进制");
             }
 
-            Characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/".Substring(0, bin);
+            Characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/".Substring(0, @base);
+            if (offset >= @base)
+            {
+                throw new ArgumentException("偏移量不能超过进制基数" + @base);
+            }
+
             _offset = offset;
         }
 
@@ -149,13 +154,14 @@ namespace Masuit.Tools.Strings
         /// <returns></returns>
         public long FromString(string str)
         {
-            int start = 0;
+            byte start = 0;
             int resultOffset = 0;
             if (_offset > 0)
             {
                 start = 1;
                 resultOffset = _offset - 1;
             }
+
             int j = 0;
             return new string(str.ToCharArray().Reverse().ToArray()).Where(ch => Characters.Contains(ch)).Sum(ch => (Characters.IndexOf(ch) + start) * (long)Math.Pow(Length, j++)) + resultOffset;
         }
@@ -167,7 +173,7 @@ namespace Masuit.Tools.Strings
         /// <returns></returns>
         public BigInteger FromStringBig(string str)
         {
-            int start = 0;
+            byte start = 0;
             int resultOffset = 0;
             if (_offset > 0)
             {

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

@@ -18,10 +18,10 @@ github:https://github.com/ldqk/Masuit.Tools
         <UserSecretsId>830c282f-f7c1-42be-8651-4cd06ac8e73f</UserSecretsId>
         <RepositoryType>Github</RepositoryType>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-        <Version>2.4.3.7</Version>
-        <FileVersion>2.4.3.7</FileVersion>
+        <Version>2.4.3.8</Version>
+        <FileVersion>2.4.3.8</FileVersion>
         <Company>ldqk.org</Company>
-        <AssemblyVersion>2.4.3.7</AssemblyVersion>
+        <AssemblyVersion>2.4.3.8</AssemblyVersion>
         <Authors>懒得勤快X</Authors>
         <RepositoryUrl>https://github.com/ldqk/Masuit.Tools</RepositoryUrl>
         <EmbedUntrackedSources>true</EmbedUntrackedSources>

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

@@ -29,7 +29,7 @@
         <DocumentationFile>.\Masuit.Tools.Excel.xml</DocumentationFile>
     </PropertyGroup>
     <ItemGroup>
-        <PackageReference Include="EPPlus" Version="5.7.0" />
+        <PackageReference Include="EPPlus" Version="5.7.2" />
         <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
         <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
     </ItemGroup>

BIN
Masuit.Tools.Net45/Properties/AssemblyInfo.cs


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

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

+ 1 - 1
Masuit.Tools.NoSQL.MongoDBClient/Masuit.Tools.NoSQL.MongoDBClient.csproj

@@ -38,7 +38,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="MongoDB.Driver" Version="2.12.4" />
+    <PackageReference Include="MongoDB.Driver" Version="2.13.0" />
   </ItemGroup>
 
 </Project>

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

@@ -172,7 +172,7 @@
       <Version>0.28.3</Version>
     </PackageReference>
     <PackageReference Include="StackExchange.Redis">
-      <Version>2.2.50</Version>
+      <Version>2.2.62</Version>
     </PackageReference>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

BIN
Masuit.Tools/Properties/AssemblyInfo.cs


+ 1 - 1
Masuit.Tools/package.nuspec

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

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

@@ -19,7 +19,7 @@
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>
-    <PackageReference Include="coverlet.collector" Version="3.0.3">
+    <PackageReference Include="coverlet.collector" Version="3.1.0">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>

+ 1 - 1
Test/Masuit.Tools.AspNetCore.ResumeFileResults.WebTest/Masuit.Tools.AspNetCore.ResumeFileResults.WebTest.csproj

@@ -23,7 +23,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.1.4" />
+    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.1.5" />
   </ItemGroup>
 
   <ItemGroup>

+ 1 - 1
Test/Masuit.Tools.Core.Test/Masuit.Tools.Core.Test.csproj

@@ -9,7 +9,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.TestHost" Version="5.0.7" />
+    <PackageReference Include="Microsoft.AspNetCore.TestHost" Version="5.0.8" />
     <PackageReference Include="Microsoft.Extensions.Hosting" Version="5.0.0" />
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.10.0" />
     <PackageReference Include="xunit" Version="2.4.1" />

+ 6 - 6
Test/Masuit.Tools.Test/Masuit.Tools.Test.csproj

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="..\..\packages\MSTest.TestAdapter.2.2.5\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\..\packages\MSTest.TestAdapter.2.2.5\build\net45\MSTest.TestAdapter.props')" />
   <Import Project="..\..\packages\NUnit.3.13.2\build\NUnit.props" Condition="Exists('..\..\packages\NUnit.3.13.2\build\NUnit.props')" />
-  <Import Project="..\..\packages\MSTest.TestAdapter.2.2.4\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\..\packages\MSTest.TestAdapter.2.2.4\build\net45\MSTest.TestAdapter.props')" />
   <Import Project="..\..\packages\xunit.core.2.4.1\build\xunit.core.props" Condition="Exists('..\..\packages\xunit.core.2.4.1\build\xunit.core.props')" />
   <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
   <PropertyGroup>
@@ -46,10 +46,10 @@
     </Reference>
     <Reference Include="Microsoft.CSharp" />
     <Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\MSTest.TestFramework.2.2.4\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>
+      <HintPath>..\..\packages\MSTest.TestFramework.2.2.5\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>
     </Reference>
     <Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\MSTest.TestFramework.2.2.4\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath>
+      <HintPath>..\..\packages\MSTest.TestFramework.2.2.5\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath>
     </Reference>
     <Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
       <HintPath>..\..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
@@ -147,10 +147,10 @@
     </PropertyGroup>
     <Error Condition="!Exists('..\..\packages\xunit.core.2.4.1\build\xunit.core.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\xunit.core.2.4.1\build\xunit.core.props'))" />
     <Error Condition="!Exists('..\..\packages\xunit.core.2.4.1\build\xunit.core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\xunit.core.2.4.1\build\xunit.core.targets'))" />
-    <Error Condition="!Exists('..\..\packages\MSTest.TestAdapter.2.2.4\build\net45\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\MSTest.TestAdapter.2.2.4\build\net45\MSTest.TestAdapter.props'))" />
-    <Error Condition="!Exists('..\..\packages\MSTest.TestAdapter.2.2.4\build\net45\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\MSTest.TestAdapter.2.2.4\build\net45\MSTest.TestAdapter.targets'))" />
     <Error Condition="!Exists('..\..\packages\NUnit.3.13.2\build\NUnit.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\NUnit.3.13.2\build\NUnit.props'))" />
+    <Error Condition="!Exists('..\..\packages\MSTest.TestAdapter.2.2.5\build\net45\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\MSTest.TestAdapter.2.2.5\build\net45\MSTest.TestAdapter.props'))" />
+    <Error Condition="!Exists('..\..\packages\MSTest.TestAdapter.2.2.5\build\net45\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\MSTest.TestAdapter.2.2.5\build\net45\MSTest.TestAdapter.targets'))" />
   </Target>
   <Import Project="..\..\packages\xunit.core.2.4.1\build\xunit.core.targets" Condition="Exists('..\..\packages\xunit.core.2.4.1\build\xunit.core.targets')" />
-  <Import Project="..\..\packages\MSTest.TestAdapter.2.2.4\build\net45\MSTest.TestAdapter.targets" Condition="Exists('..\..\packages\MSTest.TestAdapter.2.2.4\build\net45\MSTest.TestAdapter.targets')" />
+  <Import Project="..\..\packages\MSTest.TestAdapter.2.2.5\build\net45\MSTest.TestAdapter.targets" Condition="Exists('..\..\packages\MSTest.TestAdapter.2.2.5\build\net45\MSTest.TestAdapter.targets')" />
 </Project>

+ 2 - 2
Test/Masuit.Tools.Test/NumberFormaterTest.cs

@@ -11,7 +11,7 @@ namespace Masuit.Tools.Test
         [InlineData(16, 16, "10")]
         [InlineData(36, 36, "10")]
         [InlineData(62, 62, "10")]
-        public void Can_ConvertOct2AnySystem(int bin, long input, string expectOutput)
+        public void Can_ConvertOct2AnySystem(byte bin, long input, string expectOutput)
         {
             var nf = new NumberFormater(bin);
             string output = nf.ToString(input);
@@ -24,7 +24,7 @@ namespace Masuit.Tools.Test
         [InlineData(16, "10", 16)]
         [InlineData(36, "10", 36)]
         [InlineData(62, "10", 62)]
-        public void Can_ConvertAnySystem2Oct(int bin, string input, long expected)
+        public void Can_ConvertAnySystem2Oct(byte bin, string input, long expected)
         {
             var nf = new NumberFormater(bin);
             string output = nf.ToString(expected);

+ 2 - 2
Test/Masuit.Tools.Test/packages.config

@@ -6,8 +6,8 @@
   <package id="Microsoft.AspNet.WebPages" version="3.2.7" targetFramework="net461" />
   <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net461" />
   <package id="Moq" version="4.16.1" targetFramework="net461" />
-  <package id="MSTest.TestAdapter" version="2.2.4" targetFramework="net461" />
-  <package id="MSTest.TestFramework" version="2.2.4" targetFramework="net461" />
+  <package id="MSTest.TestAdapter" version="2.2.5" targetFramework="net461" />
+  <package id="MSTest.TestFramework" version="2.2.5" targetFramework="net461" />
   <package id="NUnit" version="3.13.2" targetFramework="net461" />
   <package id="System.Runtime.CompilerServices.Unsafe" version="5.0.0" targetFramework="net461" />
   <package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net461" />