瀏覽代碼

还原为文件链接的形式引用

懒得勤快 5 年之前
父節點
當前提交
012994fd87

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

@@ -7,7 +7,7 @@
     <LangVersion>8.0</LangVersion>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <CodeAnalysisRuleSet />
-    <Version>2.3.1.9</Version>
+    <Version>2.3.1.10</Version>
     <Authors>懒得勤快</Authors>
     <Description>Masuit.Tools基础公共库</Description>
     <Copyright>懒得勤快,长空X</Copyright>
@@ -20,14 +20,13 @@
     <RepositoryType>Github</RepositoryType>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
     <PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
-    <FileVersion>2.3.1.9</FileVersion>
+    <FileVersion>2.3.1.10</FileVersion>
     <Company>masuit.com</Company>
-    <AssemblyVersion>2.3.1.9</AssemblyVersion>
+    <AssemblyVersion>2.3.1.10</AssemblyVersion>
     <PackageLicenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</PackageLicenseUrl>
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="AngleSharp" Version="0.14.0" />
     <PackageReference Include="DnsClient" Version="1.3.2" />
     <PackageReference Include="HtmlAgilityPack" Version="1.11.24" />
     <PackageReference Include="HtmlSanitizer" Version="5.0.343" />

+ 0 - 176
Masuit.Tools.Abstractions/Models/AsposeLicense.cs

@@ -1,176 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Text;
-using System.Xml;
-
-namespace Masuit.Tools.Models
-{
-    /// <summary>
-    /// Aspose内存补丁
-    /// </summary>
-    public static class AsposeLicense
-    {
-        private static readonly string AsposeList = "Aspose.3D.dll, Aspose.BarCode.dll, Aspose.BarCode.Compact.dll, Aspose.BarCode.WPF.dll, Aspose.Cells.GridDesktop.dll, Aspose.Cells.GridWeb.dll, Aspose.CAD.dll, Aspose.Cells.dll, Aspose.Diagram.dll, Aspose.Email.dll, Aspose.Imaging.dll, Aspose.Note.dll, Aspose.OCR.dll, Aspose.Pdf.dll, Aspose.Slides.dll, Aspose.Tasks.dll, Aspose.Words.dll";
-
-        /// <summary>
-        /// 启动Aspose的内存破解
-        /// </summary>
-        public static void ActivateMemoryPatching()
-        {
-            Assembly[] arr = AppDomain.CurrentDomain.GetAssemblies();
-            foreach (Assembly assembly in arr)
-            {
-                if (AsposeList.IndexOf(assembly.FullName.Split(',')[0] + ".dll") != -1)
-                    ActivateForAssembly(assembly);
-            }
-            AppDomain.CurrentDomain.AssemblyLoad += ActivateOnLoad;
-        }
-
-        private static void ActivateOnLoad(object sender, AssemblyLoadEventArgs e)
-        {
-            if (AsposeList.IndexOf(e.LoadedAssembly.FullName.Split(',')[0] + ".dll") != -1)
-                ActivateForAssembly(e.LoadedAssembly);
-        }
-
-        private static void ActivateForAssembly(Assembly assembly)
-        {
-            MethodInfo miLicensed1 = typeof(AsposeLicense).GetMethod("InvokeMe1", BindingFlags.NonPublic | BindingFlags.Static);
-            MethodInfo miLicensed2 = typeof(AsposeLicense).GetMethod("InvokeMe2", BindingFlags.NonPublic | BindingFlags.Static);
-            MethodInfo miEvaluation = null;
-
-            Dictionary<string, MethodInfo> miDict = new Dictionary<string, MethodInfo>
-            {
-                ["System.DateTime"] = miLicensed1,
-                ["System.Xml.XmlElement"] = miLicensed2
-            };
-
-            Type[] arrType = null;
-            bool isFound = false;
-            int nCount = 0;
-
-            try
-            {
-                arrType = assembly.GetTypes();
-            }
-            catch (ReflectionTypeLoadException err)
-            {
-                arrType = err.Types;
-            }
-            foreach (Type type in arrType)
-            {
-                if (isFound) break;
-                if (type == null) continue;
-                MethodInfo[] arrMInfo = type.GetMethods(BindingFlags.NonPublic | BindingFlags.Static);
-                foreach (MethodInfo info in arrMInfo)
-                {
-                    if (isFound) break;
-                    try
-                    {
-                        string strMethod = info.ToString();
-                        if ((strMethod.IndexOf("(System.Xml.XmlElement, System.String)") > 0) && miDict.ContainsKey(info.ReturnType.ToString()))
-                        {
-                            miEvaluation = info;
-                            MemoryPatching(miEvaluation, miDict[miEvaluation.ReturnType.ToString()]);
-                            nCount++;
-                            if (((assembly.FullName.IndexOf("Aspose.Pdf") == -1) && (nCount == 2)) || ((assembly.FullName.IndexOf("Aspose.Pdf") != -1) && (nCount == 6)))
-                            {
-                                isFound = true;
-                                break;
-                            }
-                        }
-                    }
-                    catch
-                    {
-                        throw new InvalidOperationException("MemoryPatching for \"" + assembly.FullName + "\" failed !");
-                    }
-                }
-            }
-
-            string[] aParts = assembly.FullName.Split(',');
-            string fName = aParts[0];
-            if (fName.IndexOf("Aspose.BarCode.") != -1)
-                fName = "Aspose.BarCode";
-            else if (fName.IndexOf("Aspose.3D") != -1)
-                fName = "Aspose.ThreeD";
-
-            try
-            {
-                Type type2 = assembly.GetType(fName + ".License");
-                MethodInfo mi = type2.GetMethod("SetLicense", new[] { typeof(Stream) });
-                const string LData = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPExpY2Vuc2U+CiAgPERhdGE+CiAgICA8TGljZW5zZWRUbz5MaWNlbnNlZTwvTGljZW5zZWRUbz4KICAgIDxFbWFpbFRvPmxpY2Vuc2VlQGVtYWlsLmNvbTwvRW1haWxUbz4KICAgIDxMaWNlbnNlVHlwZT5EZXZlbG9wZXIgT0VNPC9MaWNlbnNlVHlwZT4KICAgIDxMaWNlbnNlTm90ZT5MaW1pdGVkIHRvIDEwMDAgZGV2ZWxvcGVyLCB1bmxpbWl0ZWQgcGh5c2ljYWwgbG9jYXRpb25zPC9MaWNlbnNlTm90ZT4KICAgIDxPcmRlcklEPjc4NDM3ODU3Nzg1PC9PcmRlcklEPgogICAgPFVzZXJJRD4xMTk3ODkyNDM3OTwvVXNlcklEPgogICAgPE9FTT5UaGlzIGlzIGEgcmVkaXN0cmlidXRhYmxlIGxpY2Vuc2U8L09FTT4KICAgIDxQcm9kdWN0cz4KICAgICAgPFByb2R1Y3Q+QXNwb3NlLlRvdGFsIFByb2R1Y3QgRmFtaWx5PC9Qcm9kdWN0PgogICAgPC9Qcm9kdWN0cz4KICAgIDxFZGl0aW9uVHlwZT5FbnRlcnByaXNlPC9FZGl0aW9uVHlwZT4KICAgIDxTZXJpYWxOdW1iZXI+e0YyQjk3MDQ1LTFCMjktNEIzRi1CRDUzLTYwMUVGRkExNUFBOX08L1NlcmlhbE51bWJlcj4KICAgIDxTdWJzY3JpcHRpb25FeHBpcnk+MjA5OTEyMzE8L1N1YnNjcmlwdGlvbkV4cGlyeT4KICAgIDxMaWNlbnNlVmVyc2lvbj4zLjA8L0xpY2Vuc2VWZXJzaW9uPgogIDwvRGF0YT4KICA8U2lnbmF0dXJlPlFYTndiM05sTGxSdmRHRnNJRkJ5YjJSMVkzUWdSbUZ0YVd4NTwvU2lnbmF0dXJlPgo8L0xpY2Vuc2U+";
-                Stream stream = new MemoryStream(Convert.FromBase64String(LData));
-                stream.Seek(0, SeekOrigin.Begin);
-                mi.Invoke(Activator.CreateInstance(type2, null), new[] { stream });
-            }
-            catch
-            {
-                throw new InvalidOperationException("SetLicense for \"" + assembly.FullName + "\" failed !");
-            }
-        }
-
-        private static DateTime InvokeMe1(XmlElement element, string name)
-        {
-            return DateTime.MaxValue;
-        }
-
-        private static XmlElement InvokeMe2(XmlElement element, string name)
-        {
-            if (element.LocalName == "License")
-            {
-                const string License64 = "PERhdGE+PExpY2Vuc2VkVG8+R3JvdXBEb2NzPC9MaWNlbnNlZFRvPjxMaWNlbnNlVHlwZT5TaXRlIE9FTTwvTGljZW5zZVR5cGU+PExpY2Vuc2VOb3RlPkxpbWl0ZWQgdG8gMTAgZGV2ZWxvcGVyczwvTGljZW5zZU5vdGU+PE9yZGVySUQ+MTMwNzI0MDQwODQ5PC9PcmRlcklEPjxPRU0+VGhpcyBpcyBhIHJlZGlzdHJpYnV0YWJsZSBsaWNlbnNlPC9PRU0+PFByb2R1Y3RzPjxQcm9kdWN0PkFzcG9zZS5Ub3RhbDwvUHJvZHVjdD48L1Byb2R1Y3RzPjxFZGl0aW9uVHlwZT5FbnRlcnByaXNlPC9FZGl0aW9uVHlwZT48U2VyaWFsTnVtYmVyPjliNTc5NTAxLTUyNjEtNDIyMC04NjcwLWZjMmQ4Y2NkZDkwYzwvU2VyaWFsTnVtYmVyPjxTdWJzY3JpcHRpb25FeHBpcnk+MjAxNDA3MjQ8L1N1YnNjcmlwdGlvbkV4cGlyeT48TGljZW5zZVZlcnNpb24+Mi4yPC9MaWNlbnNlVmVyc2lvbj48L0RhdGE+PFNpZ25hdHVyZT5udFpocmRoL3I0QS81ZFpsU2dWYnhac0hYSFBxSjZ5UVVYa0RvaW4vS2lVZWhUUWZET0lQdHdzUlR2NmRTUVplOVdXekNnV3RGdkdROWpmR2QySmF4YUQvbkx1ZEk2R0VVajhqeVhUMG4vbWRrMEF1WVZNYlBXRjJYd3dSTnFlTmRrblYyQjhrZVFwbDJ2RzZVbnhxS2J6VVFxS2Rhc1pzZ2w1Q0xqSFVEWms9PC9TaWduYXR1cmU+";
-                element.InnerXml = new UTF8Encoding().GetString(Convert.FromBase64String(License64));
-            }
-
-            if (element.LocalName == "BlackList")
-            {
-                const string BlackList64 = "PERhdGE+PC9EYXRhPjxTaWduYXR1cmU+cUJwMEx1cEVoM1ZnOWJjeS8vbUVXUk9KRWZmczRlY25iTHQxYlNhanU2NjY5RHlad09FakJ1eEdBdVBxS1hyd0x5bmZ5VWplYUNGQ0QxSkh2RVUxVUl5eXJOTnBSMXc2NXJIOUFyUCtFbE1lVCtIQkZ4NFMzckFVMnd6dkxPZnhGeU9DQ0dGQ2UraTdiSHlGQk44WHp6R1UwdGRPMGR1RTFoRTQ5M1RNY3pRPTwvU2lnbmF0dXJlPg==";
-                element.InnerXml = new UTF8Encoding().GetString(Convert.FromBase64String(BlackList64));
-            }
-
-            XmlNodeList elementsByTagName = element.GetElementsByTagName(name);
-            if (elementsByTagName.Count <= 0)
-                return null;
-
-            return (XmlElement)elementsByTagName[0];
-        }
-
-        private static unsafe void MemoryPatching(MethodBase miEvaluation, MethodBase miLicensed)
-        {
-            IntPtr IntPtrEval = GetMemoryAddress(miEvaluation);
-            IntPtr IntPtrLicensed = GetMemoryAddress(miLicensed);
-
-            if (IntPtr.Size == 8)
-                *(long*)IntPtrEval.ToPointer() = *(long*)IntPtrLicensed.ToPointer();
-            else
-                *(int*)IntPtrEval.ToPointer() = *(int*)IntPtrLicensed.ToPointer();
-        }
-
-        private static unsafe IntPtr GetMemoryAddress(MethodBase mb)
-        {
-            RuntimeHelpers.PrepareMethod(mb.MethodHandle);
-
-            if ((Environment.Version.Major >= 4) || ((Environment.Version.Major == 2) && (Environment.Version.MinorRevision >= 3053)))
-                return new IntPtr((int*)mb.MethodHandle.Value.ToPointer() + 2);
-
-            ulong* location = (ulong*)mb.MethodHandle.Value.ToPointer();
-            int index = (int)((*location >> 32) & 0xFF);
-            if (IntPtr.Size == 8)
-            {
-                ulong* classStart = (ulong*)mb.DeclaringType.TypeHandle.Value.ToPointer();
-                ulong* address = classStart + index + 10;
-                return new IntPtr(address);
-            }
-            else
-            {
-                uint* classStart = (uint*)mb.DeclaringType.TypeHandle.Value.ToPointer();
-                uint* address = classStart + index + 10;
-                return new IntPtr(address);
-            }
-        }
-    }
-}
-
-//End

+ 412 - 41
Masuit.Tools.Core/Masuit.Tools.Core.csproj

@@ -20,52 +20,410 @@
     <UserSecretsId>830c282f-f7c1-42be-8651-4cd06ac8e73f</UserSecretsId>
     <RepositoryType>Github</RepositoryType>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-    <Version>2.3.1.9</Version>
-    <FileVersion>2.3.1.9</FileVersion>
+    <Version>2.3.1.10</Version>
+    <FileVersion>2.3.1.10</FileVersion>
     <Company>masuit.com</Company>
-    <AssemblyVersion>2.3.1.9</AssemblyVersion>
+    <AssemblyVersion>2.3.1.10</AssemblyVersion>
     <Authors>懒得勤快X</Authors>
     <RepositoryUrl>https://github.com/ldqk/Masuit.Tools</RepositoryUrl>
   </PropertyGroup>
 
   <ItemGroup>
-    <Compile Remove="DateTimeExt\**" />
-    <Compile Remove="Hardware\**" />
-    <Compile Remove="Html\**" />
-    <Compile Remove="Linq\**" />
-    <Compile Remove="Logging\**" />
-    <Compile Remove="Mapping\**" />
-    <Compile Remove="Maths\**" />
-    <Compile Remove="Media\**" />
-    <Compile Remove="RandomSelector\**" />
-    <Compile Remove="Systems\**" />
-    <Compile Remove="Win32\**" />
-    <EmbeddedResource Remove="DateTimeExt\**" />
-    <EmbeddedResource Remove="Hardware\**" />
-    <EmbeddedResource Remove="Html\**" />
-    <EmbeddedResource Remove="Linq\**" />
-    <EmbeddedResource Remove="Logging\**" />
-    <EmbeddedResource Remove="Mapping\**" />
-    <EmbeddedResource Remove="Maths\**" />
-    <EmbeddedResource Remove="Media\**" />
-    <EmbeddedResource Remove="RandomSelector\**" />
-    <EmbeddedResource Remove="Systems\**" />
-    <EmbeddedResource Remove="Win32\**" />
-    <None Remove="DateTimeExt\**" />
-    <None Remove="Hardware\**" />
-    <None Remove="Html\**" />
-    <None Remove="Linq\**" />
-    <None Remove="Logging\**" />
-    <None Remove="Mapping\**" />
-    <None Remove="Maths\**" />
-    <None Remove="Media\**" />
-    <None Remove="RandomSelector\**" />
-    <None Remove="Systems\**" />
-    <None Remove="Win32\**" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
+    <Compile Include="..\Masuit.Tools.Abstractions\Config\CoreConfig.cs" Link="Config\CoreConfig.cs" />
+    <Compile Include="..\Masuit.Tools.Abstractions\Database\DataExt.cs">
+      <Link>Database\DataExt.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Database\DataTableBuilder.cs">
+      <Link>Database\DataTableBuilder.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Database\DataTableHelper.cs">
+      <Link>Database\DataTableHelper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\DateTimeExt\ChineseCalendar.cs">
+      <Link>DateTimeExt\ChineseCalendar.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\DateTimeExt\DateInfoStruct.cs">
+      <Link>DateTimeExt\DateInfoStruct.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\DateTimeExt\DateTimeHelper.cs">
+      <Link>DateTimeExt\DateTimeHelper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\DateTimeExt\DateUtil.cs">
+      <Link>DateTimeExt\DateUtil.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\DateTimeExt\TimeHelper.cs">
+      <Link>DateTimeExt\TimeHelper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\DateTimeExt\WeekHolidayStruct.cs">
+      <Link>DateTimeExt\WeekHolidayStruct.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\BigIntegerExtensions.cs">
+      <Link>Extensions\BaseType\BigIntegerExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\DoubleExtensions.cs">
+      <Link>Extensions\BaseType\DoubleExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\IConvertibleExtensions.cs">
+      <Link>Extensions\BaseType\IConvertibleExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\IDictionaryExtensions.cs">
+      <Link>Extensions\BaseType\IDictionaryExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\IEnumerableExtensions.cs">
+      <Link>Extensions\BaseType\IEnumerableExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\IntExtensions.cs">
+      <Link>Extensions\BaseType\IntExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\IPAddressExtensions.cs">
+      <Link>Extensions\BaseType\IPAddressExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\LongExtensions.cs">
+      <Link>Extensions\BaseType\LongExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\ObjectExtensions.cs">
+      <Link>Extensions\BaseType\ObjectExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\RandomExtensions.cs">
+      <Link>Extensions\BaseType\RandomExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\ShortExtensions.cs">
+      <Link>Extensions\BaseType\ShortExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\StreamExtensions.cs">
+      <Link>Extensions\BaseType\StreamExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\StringExtensions.cs">
+      <Link>Extensions\BaseType\StringExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\ValueTypeConvertExtensions.cs">
+      <Link>Extensions\BaseType\ValueTypeConvertExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Files\FileExt.cs">
+      <Link>Files\FileExt.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Files\INIFile.cs">
+      <Link>Files\INIFile.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Files\WinrarHelper.cs">
+      <Link>Files\WinrarHelper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Hardware\CpuInfo.cs">
+      <Link>Hardware\CpuInfo.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Hardware\CPU_INFO.cs">
+      <Link>Hardware\CPU_INFO.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Hardware\DiskData.cs">
+      <Link>Hardware\DiskData.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Hardware\MemoryInfo.cs">
+      <Link>Hardware\MemoryInfo.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Hardware\NetData.cs">
+      <Link>Hardware\NetData.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Hardware\RamInfo.cs">
+      <Link>Hardware\RamInfo.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Hardware\SystemInfo.cs">
+      <Link>Hardware\SystemInfo.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Hardware\SystemtimeInfo.cs">
+      <Link>Hardware\SystemtimeInfo.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Hardware\Unit.cs">
+      <Link>Hardware\Unit.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Html\HtmlTools.cs">
+      <Link>Html\HtmlTools.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Linq\LinqExtension.cs">
+      <Link>Linq\LinqExtension.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Logging\LogInfo.cs">
+      <Link>Logging\LogInfo.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Logging\LogLevel.cs">
+      <Link>Logging\LogLevel.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Logging\LogManager.cs">
+      <Link>Logging\LogManager.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Copier.cs">
+      <Link>Mapping\Copier.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Core\CreateConfig.cs">
+      <Link>Mapping\Core\CreateConfig.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Core\MapperConfiguration.cs">
+      <Link>Mapping\Core\MapperConfiguration.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Core\MapperConfigurationBase.cs">
+      <Link>Mapping\Core\MapperConfigurationBase.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Core\MapperConfigurationCollectionContainer.cs">
+      <Link>Mapping\Core\MapperConfigurationCollectionContainer.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Core\PropertiesNotMapped.cs">
+      <Link>Mapping\Core\PropertiesNotMapped.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Core\TypePairMapper.cs">
+      <Link>Mapping\Core\TypePairMapper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Exceptions\MapperExceptionBase.cs">
+      <Link>Mapping\Exceptions\MapperExceptionBase.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Exceptions\MapperExistException.cs">
+      <Link>Mapping\Exceptions\MapperExistException.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Exceptions\MapperNotInitializedException.cs">
+      <Link>Mapping\Exceptions\MapperNotInitializedException.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Exceptions\NoActionAfterMappingException.cs">
+      <Link>Mapping\Exceptions\NoActionAfterMappingException.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Exceptions\NoFoundMapperException.cs">
+      <Link>Mapping\Exceptions\NoFoundMapperException.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Exceptions\NotSameTypePropertyException.cs">
+      <Link>Mapping\Exceptions\NotSameTypePropertyException.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Exceptions\PropertyNoExistException.cs">
+      <Link>Mapping\Exceptions\PropertyNoExistException.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Exceptions\ReadOnlyPropertyException.cs">
+      <Link>Mapping\Exceptions\ReadOnlyPropertyException.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\ExpressionCpoier.cs">
+      <Link>Mapping\ExpressionCpoier.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\ExpressionMapper.cs">
+      <Link>Mapping\ExpressionMapper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Extensions\ExpressionExtentions.cs">
+      <Link>Mapping\Extensions\ExpressionExtentions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Extensions\QueryableExtentions.cs">
+      <Link>Mapping\Extensions\QueryableExtentions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Helper\MapperHelper.cs">
+      <Link>Mapping\Helper\MapperHelper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Helper\TypeSystem.cs">
+      <Link>Mapping\Helper\TypeSystem.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Visitor\ChangParameterExpressionVisitor.cs">
+      <Link>Mapping\Visitor\ChangParameterExpressionVisitor.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Visitor\ConverterExpressionVisitor.cs">
+      <Link>Mapping\Visitor\ConverterExpressionVisitor.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Visitor\MapperExpressionVisitor.cs">
+      <Link>Mapping\Visitor\MapperExpressionVisitor.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Visitor\PropertiesVisitor.cs">
+      <Link>Mapping\Visitor\PropertiesVisitor.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Maths\Point2D.cs">
+      <Link>Maths\Point2D.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Maths\RadarChart.cs">
+      <Link>Maths\RadarChart.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Maths\RadarChartEngine.cs">
+      <Link>Maths\RadarChartEngine.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Maths\Vector2D.cs">
+      <Link>Maths\Vector2D.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Media\ImageUtilities.cs">
+      <Link>Media\ImageUtilities.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Media\ImageWatermarker.cs">
+      <Link>Media\ImageWatermarker.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Media\ThumbnailCutMode.cs">
+      <Link>Media\ThumbnailCutMode.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Media\WatermarkPosition.cs">
+      <Link>Media\WatermarkPosition.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mime\ContentType.cs">
+      <Link>Mime\ContentType.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mime\DefaultMimeItems.cs">
+      <Link>Mime\DefaultMimeItems.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mime\IMimeMapper.cs">
+      <Link>Mime\IMimeMapper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mime\MimeMapper.cs">
+      <Link>Mime\MimeMapper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mime\MimeMappingItem.cs">
+      <Link>Mime\MimeMappingItem.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\AddressComponent.cs">
+      <Link>Models\AddressComponent.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\AddressResult.cs">
+      <Link>Models\AddressResult.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\BaiduIP.cs">
+      <Link>Models\BaiduIP.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\DateTimeRange.cs">
+      <Link>Models\DateTimeRange.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\Email.cs">
+      <Link>Models\Email.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\EmailAddress.cs">
+      <Link>Models\EmailAddress.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\IspInfo.cs">
+      <Link>Models\IspInfo.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\Location.cs">
+      <Link>Models\Location.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\PagedList.cs">
+      <Link>Models\PagedList.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\PhysicsAddress.cs">
+      <Link>Models\PhysicsAddress.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\Pois.cs">
+      <Link>Models\Pois.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\TaobaoIP.cs">
+      <Link>Models\TaobaoIP.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Net\FtpClient.cs">
+      <Link>Net\FtpClient.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Net\MultiThreadDownloader.cs">
+      <Link>Net\MultiThreadDownloader.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Net\PartialDownloader.cs">
+      <Link>Net\PartialDownloader.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Net\SocketClient.cs">
+      <Link>Net\SocketClient.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\RandomSelector\Extensions.cs">
+      <Link>RandomSelector\Extensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\RandomSelector\MultipleSelector.cs">
+      <Link>RandomSelector\MultipleSelector.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\RandomSelector\SelectorBase.cs">
+      <Link>RandomSelector\SelectorBase.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\RandomSelector\SelectorOptions.cs">
+      <Link>RandomSelector\SelectorOptions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\RandomSelector\SingleSelector.cs">
+      <Link>RandomSelector\SingleSelector.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\RandomSelector\WeightedItem.cs">
+      <Link>RandomSelector\WeightedItem.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\RandomSelector\WeightedSelector.cs">
+      <Link>RandomSelector\WeightedSelector.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Reflection\ClassHelper.cs">
+      <Link>Reflection\ClassHelper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Reflection\ReflectHelper.cs">
+      <Link>Reflection\ReflectHelper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Reflection\ReflectionUtil.cs">
+      <Link>Reflection\ReflectionUtil.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Security\Crc32.cs">
+      <Link>Security\Crc32.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Security\Crc64.cs">
+      <Link>Security\Crc64.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Security\Encrypt.cs">
+      <Link>Security\Encrypt.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Security\HashEncode.cs">
+      <Link>Security\HashEncode.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Security\RSA.cs">
+      <Link>Security\RSA.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Security\RSACrypt.cs">
+      <Link>Security\RSACrypt.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Security\RsaKey.cs">
+      <Link>Security\RsaKey.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Security\RsaKeyType.cs">
+      <Link>Security\RsaKeyType.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Security\RsaPem.cs">
+      <Link>Security\RsaPem.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Strings\ChineseString.cs">
+      <Link>Strings\ChineseString.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Strings\NumberFormater.cs">
+      <Link>Strings\NumberFormater.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Strings\Template.cs">
+      <Link>Strings\Template.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Strings\ValidateCode.cs" Link="Strings\ValidateCode.cs" />
+    <Compile Include="..\Masuit.Tools.Abstractions\Systems\ConcurrentLimitedQueue.cs">
+      <Link>Systems\ConcurrentLimitedQueue.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Systems\Disposable.cs">
+      <Link>Systems\Disposable.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Systems\EnumExt.cs">
+      <Link>Systems\EnumExt.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Systems\HiPerfTimer.cs">
+      <Link>Systems\HiPerfTimer.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Systems\LimitedQueue.cs">
+      <Link>Systems\LimitedQueue.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Systems\SnowFlake.cs">
+      <Link>Systems\SnowFlake.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Systems\StopwatchHelper.cs">
+      <Link>Systems\StopwatchHelper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Validator\ComplexPassword.cs">
+      <Link>Validator\ComplexPassword.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Validator\IsEmailAttribute.cs">
+      <Link>Validator\IsEmailAttribute.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Validator\IsIPAddressAttribute.cs">
+      <Link>Validator\IsIPAddressAttribute.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Validator\IsPhoneAttribute.cs">
+      <Link>Validator\IsPhoneAttribute.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Validator\MaxValueAttribute.cs">
+      <Link>Validator\MaxValueAttribute.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Validator\MinValueAttribute.cs">
+      <Link>Validator\MinValueAttribute.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Win32\Windows.cs">
+      <Link>Win32\Windows.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Win32\WindowsCommand.cs">
+      <Link>Win32\WindowsCommand.cs</Link>
+    </Compile>
   </ItemGroup>
 
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
@@ -80,11 +438,24 @@
   </PropertyGroup>
 
   <ItemGroup>
+    <PackageReference Include="DnsClient" Version="1.3.2" />
+    <PackageReference Include="HtmlAgilityPack" Version="1.11.24" />
+    <PackageReference Include="HtmlSanitizer" Version="5.0.343" />
     <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
     <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.8" />
+    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.7" />
     <PackageReference Include="Microsoft.Extensions.Http" Version="3.1.8" />
+    <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
+    <PackageReference Include="Microsoft.Win32.Registry" Version="4.7.0" />
     <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
+    <PackageReference Include="System.ComponentModel.Annotations" Version="4.7.0" />
+    <PackageReference Include="System.Diagnostics.PerformanceCounter" Version="4.7.0" />
+    <PackageReference Include="System.Drawing.Common" Version="4.7.0" />
+    <PackageReference Include="System.Management" Version="4.7.0" />
+    <PackageReference Include="System.Reflection.Emit" Version="4.7.0" />
+    <PackageReference Include="System.Reflection.Emit.Lightweight" Version="4.7.0" />
     <PackageReference Include="SharpCompress" Version="0.26.0" />
+    <PackageReference Include="System.Management" Version="4.7.0" />
   </ItemGroup>
 
   <ItemGroup>
@@ -94,6 +465,6 @@
   </ItemGroup>
 
   <ItemGroup>
-    <ProjectReference Include="..\Masuit.Tools.Abstractions\Masuit.Tools.Abstractions.csproj" />
+    <Folder Include="Config\" />
   </ItemGroup>
 </Project>

+ 12 - 0
Masuit.Tools/Config/CoreConfig.cs

@@ -0,0 +1,12 @@
+using System.Configuration;
+
+namespace Masuit.Tools.Core.Config
+{
+    public static class ConfigHelper
+    {
+        public static string GetConfigOrDefault(string key, string defaultValue = "")
+        {
+            return ConfigurationManager.AppSettings.Get(key) ?? defaultValue;
+        }
+    }
+}

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

@@ -47,6 +47,400 @@
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
   </PropertyGroup>
   <ItemGroup>
+    <Compile Include="..\Masuit.Tools.Abstractions\Database\DataExt.cs">
+      <Link>Database\DataExt.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Database\DataTableBuilder.cs">
+      <Link>Database\DataTableBuilder.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Database\DataTableHelper.cs">
+      <Link>Database\DataTableHelper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\DateTimeExt\ChineseCalendar.cs">
+      <Link>DateTimeExt\ChineseCalendar.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\DateTimeExt\DateInfoStruct.cs">
+      <Link>DateTimeExt\DateInfoStruct.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\DateTimeExt\DateTimeHelper.cs">
+      <Link>DateTimeExt\DateTimeHelper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\DateTimeExt\DateUtil.cs">
+      <Link>DateTimeExt\DateUtil.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\DateTimeExt\TimeHelper.cs">
+      <Link>DateTimeExt\TimeHelper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\DateTimeExt\WeekHolidayStruct.cs">
+      <Link>DateTimeExt\WeekHolidayStruct.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\BigIntegerExtensions.cs">
+      <Link>Extensions\BaseType\BigIntegerExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\DoubleExtensions.cs">
+      <Link>Extensions\BaseType\DoubleExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\IConvertibleExtensions.cs">
+      <Link>Extensions\BaseType\IConvertibleExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\IDictionaryExtensions.cs">
+      <Link>Extensions\BaseType\IDictionaryExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\IEnumerableExtensions.cs">
+      <Link>Extensions\BaseType\IEnumerableExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\IntExtensions.cs">
+      <Link>Extensions\BaseType\IntExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\IPAddressExtensions.cs">
+      <Link>Extensions\BaseType\IPAddressExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\LongExtensions.cs">
+      <Link>Extensions\BaseType\LongExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\ObjectExtensions.cs">
+      <Link>Extensions\BaseType\ObjectExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\RandomExtensions.cs">
+      <Link>Extensions\BaseType\RandomExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\ShortExtensions.cs">
+      <Link>Extensions\BaseType\ShortExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\StreamExtensions.cs">
+      <Link>Extensions\BaseType\StreamExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\StringExtensions.cs">
+      <Link>Extensions\BaseType\StringExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Extensions\BaseType\ValueTypeConvertExtensions.cs">
+      <Link>Extensions\BaseType\ValueTypeConvertExtensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Files\FileExt.cs">
+      <Link>Files\FileExt.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Files\INIFile.cs">
+      <Link>Files\INIFile.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Files\WinrarHelper.cs">
+      <Link>Files\WinrarHelper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Hardware\CpuInfo.cs">
+      <Link>Hardware\CpuInfo.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Hardware\CPU_INFO.cs">
+      <Link>Hardware\CPU_INFO.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Hardware\DiskData.cs">
+      <Link>Hardware\DiskData.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Hardware\MemoryInfo.cs">
+      <Link>Hardware\MemoryInfo.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Hardware\NetData.cs">
+      <Link>Hardware\NetData.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Hardware\RamInfo.cs">
+      <Link>Hardware\RamInfo.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Hardware\SystemInfo.cs">
+      <Link>Hardware\SystemInfo.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Hardware\SystemtimeInfo.cs">
+      <Link>Hardware\SystemtimeInfo.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Hardware\Unit.cs">
+      <Link>Hardware\Unit.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Html\HtmlTools.cs">
+      <Link>Html\HtmlTools.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Linq\LinqExtension.cs">
+      <Link>Linq\LinqExtension.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Logging\LogInfo.cs">
+      <Link>Logging\LogInfo.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Logging\LogLevel.cs">
+      <Link>Logging\LogLevel.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Logging\LogManager.cs">
+      <Link>Logging\LogManager.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Copier.cs">
+      <Link>Mapping\Copier.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Core\CreateConfig.cs">
+      <Link>Mapping\Core\CreateConfig.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Core\MapperConfiguration.cs">
+      <Link>Mapping\Core\MapperConfiguration.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Core\MapperConfigurationBase.cs">
+      <Link>Mapping\Core\MapperConfigurationBase.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Core\MapperConfigurationCollectionContainer.cs">
+      <Link>Mapping\Core\MapperConfigurationCollectionContainer.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Core\PropertiesNotMapped.cs">
+      <Link>Mapping\Core\PropertiesNotMapped.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Core\TypePairMapper.cs">
+      <Link>Mapping\Core\TypePairMapper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Exceptions\MapperExceptionBase.cs">
+      <Link>Mapping\Exceptions\MapperExceptionBase.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Exceptions\MapperExistException.cs">
+      <Link>Mapping\Exceptions\MapperExistException.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Exceptions\MapperNotInitializedException.cs">
+      <Link>Mapping\Exceptions\MapperNotInitializedException.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Exceptions\NoActionAfterMappingException.cs">
+      <Link>Mapping\Exceptions\NoActionAfterMappingException.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Exceptions\NoFoundMapperException.cs">
+      <Link>Mapping\Exceptions\NoFoundMapperException.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Exceptions\NotSameTypePropertyException.cs">
+      <Link>Mapping\Exceptions\NotSameTypePropertyException.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Exceptions\PropertyNoExistException.cs">
+      <Link>Mapping\Exceptions\PropertyNoExistException.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Exceptions\ReadOnlyPropertyException.cs">
+      <Link>Mapping\Exceptions\ReadOnlyPropertyException.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\ExpressionCpoier.cs">
+      <Link>Mapping\ExpressionCpoier.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\ExpressionMapper.cs">
+      <Link>Mapping\ExpressionMapper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Extensions\ExpressionExtentions.cs">
+      <Link>Mapping\Extensions\ExpressionExtentions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Extensions\QueryableExtentions.cs">
+      <Link>Mapping\Extensions\QueryableExtentions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Helper\MapperHelper.cs">
+      <Link>Mapping\Helper\MapperHelper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Helper\TypeSystem.cs">
+      <Link>Mapping\Helper\TypeSystem.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Visitor\ChangParameterExpressionVisitor.cs">
+      <Link>Mapping\Visitor\ChangParameterExpressionVisitor.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Visitor\ConverterExpressionVisitor.cs">
+      <Link>Mapping\Visitor\ConverterExpressionVisitor.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Visitor\MapperExpressionVisitor.cs">
+      <Link>Mapping\Visitor\MapperExpressionVisitor.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mapping\Visitor\PropertiesVisitor.cs">
+      <Link>Mapping\Visitor\PropertiesVisitor.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Maths\Point2D.cs">
+      <Link>Maths\Point2D.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Maths\RadarChart.cs">
+      <Link>Maths\RadarChart.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Maths\RadarChartEngine.cs">
+      <Link>Maths\RadarChartEngine.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Maths\Vector2D.cs">
+      <Link>Maths\Vector2D.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Media\ImageUtilities.cs">
+      <Link>Media\ImageUtilities.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Media\ImageWatermarker.cs">
+      <Link>Media\ImageWatermarker.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Media\ThumbnailCutMode.cs">
+      <Link>Media\ThumbnailCutMode.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Media\WatermarkPosition.cs">
+      <Link>Media\WatermarkPosition.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mime\ContentType.cs">
+      <Link>Mime\ContentType.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mime\DefaultMimeItems.cs">
+      <Link>Mime\DefaultMimeItems.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mime\IMimeMapper.cs">
+      <Link>Mime\IMimeMapper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mime\MimeMapper.cs">
+      <Link>Mime\MimeMapper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Mime\MimeMappingItem.cs">
+      <Link>Mime\MimeMappingItem.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\AddressComponent.cs">
+      <Link>Models\AddressComponent.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\AddressResult.cs">
+      <Link>Models\AddressResult.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\BaiduIP.cs">
+      <Link>Models\BaiduIP.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\DateTimeRange.cs">
+      <Link>Models\DateTimeRange.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\Email.cs">
+      <Link>Models\Email.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\EmailAddress.cs">
+      <Link>Models\EmailAddress.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\IspInfo.cs">
+      <Link>Models\IspInfo.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\Location.cs">
+      <Link>Models\Location.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\PagedList.cs">
+      <Link>Models\PagedList.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\PhysicsAddress.cs">
+      <Link>Models\PhysicsAddress.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\Pois.cs">
+      <Link>Models\Pois.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Models\TaobaoIP.cs">
+      <Link>Models\TaobaoIP.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Net\FtpClient.cs">
+      <Link>Net\FtpClient.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Net\MultiThreadDownloader.cs">
+      <Link>Net\MultiThreadDownloader.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Net\PartialDownloader.cs">
+      <Link>Net\PartialDownloader.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Net\SocketClient.cs">
+      <Link>Net\SocketClient.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\RandomSelector\Extensions.cs">
+      <Link>RandomSelector\Extensions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\RandomSelector\MultipleSelector.cs">
+      <Link>RandomSelector\MultipleSelector.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\RandomSelector\SelectorBase.cs">
+      <Link>RandomSelector\SelectorBase.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\RandomSelector\SelectorOptions.cs">
+      <Link>RandomSelector\SelectorOptions.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\RandomSelector\SingleSelector.cs">
+      <Link>RandomSelector\SingleSelector.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\RandomSelector\WeightedItem.cs">
+      <Link>RandomSelector\WeightedItem.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\RandomSelector\WeightedSelector.cs">
+      <Link>RandomSelector\WeightedSelector.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Reflection\ClassHelper.cs">
+      <Link>Reflection\ClassHelper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Reflection\ReflectHelper.cs">
+      <Link>Reflection\ReflectHelper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Reflection\ReflectionUtil.cs">
+      <Link>Reflection\ReflectionUtil.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Security\Crc32.cs">
+      <Link>Security\Crc32.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Security\Crc64.cs">
+      <Link>Security\Crc64.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Security\Encrypt.cs">
+      <Link>Security\Encrypt.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Security\HashEncode.cs">
+      <Link>Security\HashEncode.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Security\RSA.cs">
+      <Link>Security\RSA.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Security\RSACrypt.cs">
+      <Link>Security\RSACrypt.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Security\RsaKey.cs">
+      <Link>Security\RsaKey.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Security\RsaKeyType.cs">
+      <Link>Security\RsaKeyType.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Security\RsaPem.cs">
+      <Link>Security\RsaPem.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Strings\ChineseString.cs">
+      <Link>Strings\ChineseString.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Strings\NumberFormater.cs">
+      <Link>Strings\NumberFormater.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Strings\Template.cs">
+      <Link>Strings\Template.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Systems\ConcurrentLimitedQueue.cs">
+      <Link>Systems\ConcurrentLimitedQueue.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Systems\Disposable.cs">
+      <Link>Systems\Disposable.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Systems\EnumExt.cs">
+      <Link>Systems\EnumExt.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Systems\HiPerfTimer.cs">
+      <Link>Systems\HiPerfTimer.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Systems\LimitedQueue.cs">
+      <Link>Systems\LimitedQueue.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Systems\SnowFlake.cs">
+      <Link>Systems\SnowFlake.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Systems\StopwatchHelper.cs">
+      <Link>Systems\StopwatchHelper.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Validator\ComplexPassword.cs">
+      <Link>Validator\ComplexPassword.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Validator\IsEmailAttribute.cs">
+      <Link>Validator\IsEmailAttribute.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Validator\IsIPAddressAttribute.cs">
+      <Link>Validator\IsIPAddressAttribute.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Validator\IsPhoneAttribute.cs">
+      <Link>Validator\IsPhoneAttribute.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Validator\MaxValueAttribute.cs">
+      <Link>Validator\MaxValueAttribute.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Validator\MinValueAttribute.cs">
+      <Link>Validator\MinValueAttribute.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Win32\Windows.cs">
+      <Link>Win32\Windows.cs</Link>
+    </Compile>
+    <Compile Include="..\Masuit.Tools.Abstractions\Win32\WindowsCommand.cs">
+      <Link>Win32\WindowsCommand.cs</Link>
+    </Compile>
+    <Compile Include="Config\CoreConfig.cs" />
     <Compile Include="Files\SevenZipCompressor.cs" />
     <Compile Include="Files\ExtensionAttach.cs" />
     <Compile Include="Mvc\ActionResults\ResumeActionResultBase.cs" />
@@ -69,6 +463,7 @@
     <Compile Include="NoSQL\RedisConnectionManager.cs" />
     <Compile Include="NoSQL\RedisHelper.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Strings\ValidateCode.cs" />
     <Compile Include="Systems\Lock.cs" />
     <Compile Include="Systems\RedisLock.cs" />
   </ItemGroup>
@@ -78,6 +473,21 @@
     <None Include="packages.config" />
   </ItemGroup>
   <ItemGroup>
+    <Reference Include="AngleSharp, Version=0.14.0.0, Culture=neutral, PublicKeyToken=e83494dcdc6d31ea, processorArchitecture=MSIL">
+      <HintPath>..\packages\AngleSharp.0.14.0\lib\net461\AngleSharp.dll</HintPath>
+    </Reference>
+    <Reference Include="AngleSharp.Css, Version=0.14.2.0, Culture=neutral, PublicKeyToken=e83494dcdc6d31ea, processorArchitecture=MSIL">
+      <HintPath>..\packages\AngleSharp.Css.0.14.2\lib\net461\AngleSharp.Css.dll</HintPath>
+    </Reference>
+    <Reference Include="DnsClient, Version=1.3.2.0, Culture=neutral, PublicKeyToken=4574bb5573c51424, processorArchitecture=MSIL">
+      <HintPath>..\packages\DnsClient.1.3.2\lib\net45\DnsClient.dll</HintPath>
+    </Reference>
+    <Reference Include="HtmlAgilityPack, Version=1.11.24.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
+      <HintPath>..\packages\HtmlAgilityPack.1.11.24\lib\Net45\HtmlAgilityPack.dll</HintPath>
+    </Reference>
+    <Reference Include="HtmlSanitizer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=61c49a1a9e79cc28, processorArchitecture=MSIL">
+      <HintPath>..\packages\HtmlSanitizer.5.0.343\lib\net46\HtmlSanitizer.dll</HintPath>
+    </Reference>
     <Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
       <HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.1.1.1\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
     </Reference>
@@ -85,6 +495,9 @@
     <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>
     </Reference>
+    <Reference Include="Microsoft.Win32.Registry, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\Microsoft.Win32.Registry.4.7.0\lib\net461\Microsoft.Win32.Registry.dll</HintPath>
+    </Reference>
     <Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
       <HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
     </Reference>
@@ -101,7 +514,12 @@
     <Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
       <HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
     </Reference>
+    <Reference Include="System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.ComponentModel.Annotations.4.7.0\lib\net461\System.ComponentModel.Annotations.dll</HintPath>
+    </Reference>
+    <Reference Include="System.ComponentModel.DataAnnotations" />
     <Reference Include="System.Configuration" />
+    <Reference Include="System.Data" />
     <Reference Include="System.Diagnostics.PerformanceCounter, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
       <HintPath>..\packages\System.Diagnostics.PerformanceCounter.4.7.0\lib\net461\System.Diagnostics.PerformanceCounter.dll</HintPath>
     </Reference>
@@ -112,6 +530,7 @@
     <Reference Include="System.IO.Pipelines, Version=4.0.2.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
       <HintPath>..\packages\System.IO.Pipelines.4.7.2\lib\net461\System.IO.Pipelines.dll</HintPath>
     </Reference>
+    <Reference Include="System.Management" />
     <Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
       <HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
     </Reference>
@@ -127,12 +546,24 @@
     <Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
       <HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
     </Reference>
+    <Reference Include="System.Security.AccessControl, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Security.AccessControl.4.7.0\lib\net461\System.Security.AccessControl.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Security.Principal.Windows, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Security.Principal.Windows.4.7.0\lib\net461\System.Security.Principal.Windows.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Text.Encoding.CodePages, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Text.Encoding.CodePages.4.7.1\lib\net461\System.Text.Encoding.CodePages.dll</HintPath>
+    </Reference>
     <Reference Include="System.Threading.Channels, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
       <HintPath>..\packages\System.Threading.Channels.4.7.1\lib\net461\System.Threading.Channels.dll</HintPath>
     </Reference>
     <Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
       <HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
     </Reference>
+    <Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll</HintPath>
+    </Reference>
     <Reference Include="System.Web" />
     <Reference Include="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
       <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.Helpers.dll</HintPath>
@@ -153,12 +584,6 @@
       <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Razor.dll</HintPath>
     </Reference>
   </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\Masuit.Tools.Abstractions\Masuit.Tools.Abstractions.csproj">
-      <Project>{74e7c0a2-499d-408f-a2e4-08878700c2de}</Project>
-      <Name>Masuit.Tools.Abstractions</Name>
-    </ProjectReference>
-  </ItemGroup>
   <ItemGroup />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it.

二進制
Masuit.Tools/Properties/AssemblyInfo.cs


+ 93 - 0
Masuit.Tools/Strings/ValidateCode.cs

@@ -0,0 +1,93 @@
+using System;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.IO;
+using System.Security.Cryptography;
+using System.Text;
+using System.Web;
+namespace Masuit.Tools.Strings
+{
+    /// <summary>
+    /// 画验证码
+    /// </summary>
+    public static class ValidateCode
+    {
+        /// <summary>
+        /// 生成验证码
+        /// </summary>
+        /// <param name="length">指定验证码的长度</param>
+        /// <returns>验证码字符串</returns>
+        public static string CreateValidateCode(int length)
+        {
+            string ch = "abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ1234567890@#$%&?";
+            byte[] b = new byte[4];
+            using var cpt = new RNGCryptoServiceProvider();
+            cpt.GetBytes(b);
+            var r = new Random(BitConverter.ToInt32(b, 0));
+            var sb = new StringBuilder();
+            for (int i = 0; i < length; i++)
+            {
+                sb.Append(ch[r.Next(ch.Length)]);
+            }
+
+            return sb.ToString();
+        }
+
+        /// <summary>
+        /// 创建验证码的图片
+        /// </summary>
+        /// <param name="validateCode">验证码序列</param>
+        /// <param name="context">当前的HttpContext上下文对象</param>
+        /// <param name="fontSize">字体大小,默认值22px</param>
+        /// <param name="lineHeight">行高,默认36px</param>
+        /// <exception cref="Exception">The operation failed.</exception>
+        public static byte[] CreateValidateGraphic(this HttpContext context, string validateCode, int fontSize = 22, int lineHeight = 36)
+        {
+            using Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * (fontSize + 2.0)), lineHeight);
+            using Graphics g = Graphics.FromImage(image);
+            //生成随机生成器
+            Random random = new Random();
+            //清空图片背景色
+            g.Clear(Color.White);
+            //画图片的干扰线
+            for (int i = 0; i < 75; i++)
+            {
+                int x1 = random.Next(image.Width);
+                int x2 = random.Next(image.Width);
+                int y1 = random.Next(image.Height);
+                int y2 = random.Next(image.Height);
+                g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
+            }
+
+            Font[] fonts =
+            {
+                new Font("Arial", fontSize, FontStyle.Bold | FontStyle.Italic),
+                new Font("微软雅黑", fontSize, FontStyle.Bold | FontStyle.Italic),
+                new Font("黑体", fontSize, FontStyle.Bold | FontStyle.Italic),
+                new Font("宋体", fontSize, FontStyle.Bold | FontStyle.Italic),
+                new Font("楷体", fontSize, FontStyle.Bold | FontStyle.Italic)
+            };
+            //渐变.
+            using var brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
+            g.DrawString(validateCode, fonts[new Random().Next(fonts.Length)], brush, 3, 2);
+
+            //画图片的前景干扰点
+            for (int i = 0; i < 300; i++)
+            {
+                int x = random.Next(image.Width);
+                int y = random.Next(image.Height);
+                image.SetPixel(x, y, Color.FromArgb(random.Next()));
+            }
+
+            //画图片的边框线
+            g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
+            //保存图片数据
+            using MemoryStream stream = new MemoryStream();
+            image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
+            //输出图片流
+            context.Response.Clear();
+            context.Response.ContentType = "image/jpeg";
+            return stream.ToArray();
+        }
+    }
+}

+ 1 - 4
Masuit.Tools/package.nuspec

@@ -4,7 +4,7 @@
     <!--*-->
     <id>Masuit.Tools.Net</id>
     <!--*-->
-    <version>2.3.1.9</version>
+    <version>2.3.1.10</version>
     <title>Masuit.Tools</title>
     <!--*-->
     <authors>masuit.com</authors>
@@ -21,8 +21,5 @@
     <releaseNotes>如有问题请联系作者QQ:3444764617,或者到项目的github反馈问题,详细的API文档在github上:https://github.com/ldqk/Masuit.Tools</releaseNotes>
     <copyright>Copyright ©  懒得勤快</copyright>
     <tags>Masuit.Tools,工具库,Utility,Crypt,Extensions</tags>
-    <dependencies>
-      <dependency id="Masuit.Tools.Abstractions" version="2.3.1.9" />
-    </dependencies>
   </metadata>
 </package>

+ 11 - 0
Masuit.Tools/packages.config

@@ -1,15 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
+  <package id="AngleSharp" version="0.14.0" targetFramework="net461" />
+  <package id="AngleSharp.Css" version="0.14.2" targetFramework="net461" />
+  <package id="DnsClient" version="1.3.2" targetFramework="net461" />
+  <package id="HtmlAgilityPack" version="1.11.24" targetFramework="net461" />
+  <package id="HtmlSanitizer" version="5.0.343" targetFramework="net461" />
   <package id="Microsoft.AspNet.Mvc" version="5.2.7" targetFramework="net461" />
   <package id="Microsoft.AspNet.Razor" version="3.2.7" targetFramework="net461" />
   <package id="Microsoft.AspNet.WebPages" version="3.2.7" targetFramework="net461" />
   <package id="Microsoft.Bcl.AsyncInterfaces" version="1.1.1" targetFramework="net461" />
   <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net461" />
+  <package id="Microsoft.Win32.Registry" version="4.7.0" targetFramework="net461" />
   <package id="Newtonsoft.Json" version="12.0.3" targetFramework="net461" />
   <package id="Pipelines.Sockets.Unofficial" version="2.1.16" targetFramework="net461" />
   <package id="SharpCompress" version="0.26.0" targetFramework="net461" />
   <package id="StackExchange.Redis" version="2.1.58" targetFramework="net461" />
   <package id="System.Buffers" version="4.5.1" targetFramework="net461" />
+  <package id="System.ComponentModel.Annotations" version="4.7.0" targetFramework="net461" />
   <package id="System.Diagnostics.PerformanceCounter" version="4.7.0" targetFramework="net461" />
   <package id="System.IO.Compression" version="4.3.0" targetFramework="net461" />
   <package id="System.IO.Pipelines" version="4.7.2" targetFramework="net461" />
@@ -17,6 +24,10 @@
   <package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net461" />
   <package id="System.Runtime.CompilerServices.Unsafe" version="4.7.1" targetFramework="net461" />
   <package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net461" />
+  <package id="System.Security.AccessControl" version="4.7.0" targetFramework="net461" />
+  <package id="System.Security.Principal.Windows" version="4.7.0" targetFramework="net461" />
+  <package id="System.Text.Encoding.CodePages" version="4.7.1" targetFramework="net461" />
   <package id="System.Threading.Channels" version="4.7.1" targetFramework="net461" />
   <package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net461" />
+  <package id="System.ValueTuple" version="4.5.0" targetFramework="net461" />
 </packages>

+ 0 - 4
Test/Masuit.Tools.Test/Masuit.Tools.Test.csproj

@@ -132,10 +132,6 @@
     <None Include="packages.config" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\Masuit.Tools.Abstractions\Masuit.Tools.Abstractions.csproj">
-      <Project>{74e7c0a2-499d-408f-a2e4-08878700c2de}</Project>
-      <Name>Masuit.Tools.Abstractions</Name>
-    </ProjectReference>
     <ProjectReference Include="..\..\Masuit.Tools\Masuit.Tools.csproj">
       <Project>{275d5a0d-c49c-497e-a4b5-f40285c2495f}</Project>
       <Name>Masuit.Tools</Name>