懒得勤快 5 лет назад
Родитель
Сommit
6f2a3b250f

+ 66 - 56
Masuit.Tools.Abstractions.xml

@@ -1177,21 +1177,23 @@
             <param name="this"></param>
             <param name="where"></param>
         </member>
-        <member name="M:Masuit.Tools.IEnumerableExtensions.ToList``2(System.Collections.Generic.IEnumerable{``0})">
+        <member name="M:Masuit.Tools.IEnumerableExtensions.InsertAfter``1(System.Collections.Generic.IList{``0},System.Func{``0,System.Boolean},``0)">
             <summary>
-            映射到目标类型的集合
+            在元素之后添加元素
             </summary>
-            <param name="source">源</param>
-            <typeparam name="TDestination">目标类型</typeparam>
-            <returns>目标类型集合</returns>
+            <typeparam name="T"></typeparam>
+            <param name="list"></param>
+            <param name="condition">条件</param>
+            <param name="value">值</param>
         </member>
-        <member name="M:Masuit.Tools.IEnumerableExtensions.ToListAsync``2(System.Collections.Generic.IEnumerable{``0})">
+        <member name="M:Masuit.Tools.IEnumerableExtensions.InsertAfter``1(System.Collections.Generic.IList{``0},System.Int32,``0)">
             <summary>
-            映射到目标类型的集合
+            在元素之后添加元素
             </summary>
-            <param name="source">源</param>
-            <typeparam name="TDestination">目标类型</typeparam>
-            <returns>目标类型集合</returns>
+            <typeparam name="T"></typeparam>
+            <param name="list"></param>
+            <param name="index">索引位置</param>
+            <param name="value">值</param>
         </member>
         <member name="M:Masuit.Tools.IntExtensions.GetBytes(System.Int32)">
             <summary>
@@ -1377,7 +1379,25 @@
             <param name="stdDev">方差</param>
             <returns></returns>
         </member>
-    <param name="stream"></param>
+        <member name="M:Masuit.Tools.ShortExtensions.GetBytes(System.Int16)">
+            <summary>
+            转换成字节数组
+            </summary>
+            <param name="value"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Masuit.Tools.StreamExtensions.SaveAsMemoryStream(System.IO.Stream)">
+            <summary>
+            将流转换为内存流
+            </summary>
+            <param name="stream"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Masuit.Tools.StreamExtensions.ToArray(System.IO.Stream)">
+             <summary>
+            
+             </summary>
+             <param name="stream"></param>
              <returns></returns>
         </member>
         <member name="M:Masuit.Tools.StringExtensions.ToDateTime(System.String)">
@@ -1599,39 +1619,31 @@
             字符串转int
             </summary>
             <param name="s">源字符串</param>
-            <param name="defaultValue">失败时返回的值</param>
+            <param name="defaultValue">转换失败的默认值</param>
             <returns>int类型的数字</returns>
         </member>
-        <member name="M:Masuit.Tools.ValueTypeConvertExtensions.ToInt64(System.String,System.Int64)">
+        <member name="M:Masuit.Tools.ValueTypeConvertExtensions.ToInt64(System.String,System.Int32)">
             <summary>
             字符串转long
             </summary>
             <param name="s">源字符串</param>
-            <param name="defaultValue">失败时返回的值</param>
+            <param name="defaultValue">转换失败的默认值</param>
             <returns>int类型的数字</returns>
         </member>
-        <member name="M:Masuit.Tools.ValueTypeConvertExtensions.ToLong(System.String,System.Int64)">
-            <summary>
-            字符串转long类型
-            </summary>
-            <param name="str"></param>
-            <param name="defaultResult">转换失败的默认值</param>
-            <returns></returns>
-        </member>
-        <member name="M:Masuit.Tools.ValueTypeConvertExtensions.ToDouble(System.String,System.Double)">
+        <member name="M:Masuit.Tools.ValueTypeConvertExtensions.ToDouble(System.String,System.Int32)">
             <summary>
             字符串转double
             </summary>
             <param name="s">源字符串</param>
-            <param name="defaultValue">失败时返回的值</param>
+            <param name="defaultValue">转换失败的默认值</param>
             <returns>double类型的数据</returns>
         </member>
-        <member name="M:Masuit.Tools.ValueTypeConvertExtensions.ToDecimal(System.String,System.Decimal)">
+        <member name="M:Masuit.Tools.ValueTypeConvertExtensions.ToDecimal(System.String,System.Int32)">
             <summary>
             字符串转decimal
             </summary>
             <param name="s">源字符串</param>
-            <param name="defaultValue">失败时返回的值</param>
+            <param name="defaultValue">转换失败的默认值</param>
             <returns>int类型的数字</returns>
         </member>
         <member name="M:Masuit.Tools.ValueTypeConvertExtensions.ToDecimal(System.Double)">
@@ -1656,28 +1668,19 @@
             <returns>int类型</returns>
         </member>
         <member name="M:Masuit.Tools.ValueTypeConvertExtensions.ToInt32(System.Decimal)">
-            <summary>
-            将double转换成int
-            </summary>
-            <param name="num"       <summary>
-            字符串转double
-            </summary>
-            <param name="s">源字符串</param>
-            <returns>double类型的数据</returns>
-        </member>
-        <member name="M:Masuit.Tools.ValueTypeConvertExtensions.ToInt32(System.Double)">
             <summary>
             将double转换成int
             </summary>
             <param name="num">double类型</param>
             <returns>int类型</returns>
         </member>
-        <member name="M:Masuit.Tools.ValueTypeConvertExtensions.ToInt32(System.Decimal)">
+        <member name="M:Masuit.Tools.ValueTypeConvertExtensions.ToLong(System.String,System.Int64)">
             <summary>
-            将double转换成int
+            字符串转long类型
             </summary>
-            <param name="num">double类型</param>
-            <returns>int类型</returns>
+            <param name="str"></param>
+            <param name="defaultResult">转换失败的默认值</param>
+            <returns></returns>
         </member>
         <member name="M:Masuit.Tools.ValueTypeConvertExtensions.ToDouble(System.Int32)">
             <summary>
@@ -1954,7 +1957,29 @@
         <member name="P:Masuit.Tools.Logging.LogInfo.LogLevel">
             <summary>
             日志级别
-            <suit.Tools.Logging.LogInfo.RequestUrl">
+            </summary>
+        </member>
+        <member name="P:Masuit.Tools.Logging.LogInfo.Source">
+            <summary>
+            异常源
+            </summary>
+        </member>
+        <member name="P:Masuit.Tools.Logging.LogInfo.Message">
+            <summary>
+            异常信息
+            </summary>
+        </member>
+        <member name="P:Masuit.Tools.Logging.LogInfo.Exception">
+            <summary>
+            异常对象
+            </summary>
+        </member>
+        <member name="P:Masuit.Tools.Logging.LogInfo.ExceptionType">
+            <summary>
+            日志类型
+            </summary>
+        </member>
+        <member name="P:Masuit.Tools.Logging.LogInfo.RequestUrl">
             <summary>
             请求路径
             </summary>
@@ -2057,21 +2082,6 @@
             <param name="source">异常源的类型</param>
             <param name="error">异常对象</param>
         </member>
-        <member name="M:Masuit.Tools.Logging.LogManager.Error(System.Type,System.String)">
-            <summary>
-            写入error级别日志
-            </summary>
-            <param name="source">异常源的类型</param>
-            <param name="error">异常信息<    </summary>
-            <param name="error">异常对象</param>
-        </member>
-        <member name="M:Masuit.Tools.Logging.LogManager.Error(System.Type,System.Exception)">
-            <summary>
-            写入error级别日志
-            </summary>
-            <param name="source">异常源的类型</param>
-            <param name="error">异常对象</param>
-        </member>
         <member name="M:Masuit.Tools.Logging.LogManager.Error(System.Type,System.String)">
             <summary>
             写入error级别日志

+ 48 - 32
Masuit.Tools.Abstractions/Extensions/BaseType/IEnumerableExtensions.cs

@@ -1,6 +1,5 @@
 using System;
 using System.Collections.Generic;
-using System.ComponentModel;
 using System.Linq;
 using System.Threading.Tasks;
 
@@ -24,21 +23,6 @@ namespace Masuit.Tools
             }
         }
 
-        /// <summary>
-        /// 遍历IEnumerable并返回一个新的IEnumerable
-        /// </summary>
-        /// <param name="objs"></param>
-        /// <param name="action">回调方法</param>
-        /// <typeparam name="T"></typeparam>
-        /// <returns></returns>
-        public static IEnumerable<TOutput> ForEach<TInput, TOutput>(this IEnumerable<TInput> objs, Func<TInput, TOutput> action)
-        {
-            foreach (var o in objs)
-            {
-                yield return action(o);
-            }
-        }
-
         #endregion SyncForEach
 
         #region AsyncForEach
@@ -80,9 +64,7 @@ namespace Masuit.Tools
         {
             selector.CheckNullWithException(nameof(selector));
 
-            return source == null
-                ? defaultValueFunc()
-                : converter(source.Select(selector));
+            return source == null ? defaultValueFunc() : converter(source.Select(selector));
         }
 
         /// <summary>
@@ -99,11 +81,7 @@ namespace Masuit.Tools
             Func<TSource, TResult> selector,
             List<TResult>? defaultValue = null)
         {
-            return IEnumerableBaseTo(
-                source: source,
-                selector: selector,
-                converter: Enumerable.ToList,
-                defaultValueFunc: () => defaultValue ?? new List<TResult>());
+            return IEnumerableBaseTo(source, selector, Enumerable.ToList, () => defaultValue ?? new List<TResult>());
         }
 
         /// <summary>
@@ -120,13 +98,7 @@ namespace Masuit.Tools
             Func<TSource, TResult> selector,
             List<TResult>? defaultValue = null)
         {
-            return Task.Run(() =>
-            {
-                return IEnumerableExtensions.ToList<TSource, TResult>(
-                    source: source,
-                    selector: selector,
-                    defaultValue: defaultValue);
-            });
+            return Task.Run(() => ToList(source, selector, defaultValue));
         }
 
         #endregion To方法
@@ -141,7 +113,7 @@ namespace Masuit.Tools
         /// <returns></returns>
         public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
         {
-            HashSet<TKey> hash = new HashSet<TKey>();
+            var hash = new HashSet<TKey>();
             return source.Where(p => hash.Add(keySelector(p)));
         }
 
@@ -210,5 +182,49 @@ namespace Masuit.Tools
                 @this.Remove(obj);
             }
         }
+
+        /// <summary>
+        /// 在元素之后添加元素
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="list"></param>
+        /// <param name="condition">条件</param>
+        /// <param name="value">值</param>
+        public static void InsertAfter<T>(this IList<T> list, Func<T, bool> condition, T value)
+        {
+            foreach (var item in list.Select((o, i) => new { Value = o, Index = i }).Where(p => condition(p.Value)).OrderByDescending(p => p.Index))
+            {
+                if (item.Index + 1 == list.Count)
+                {
+                    list.Add(value);
+                }
+                else
+                {
+                    list.Insert(item.Index + 1, value);
+                }
+            }
+        }
+
+        /// <summary>
+        /// 在元素之后添加元素
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="list"></param>
+        /// <param name="index">索引位置</param>
+        /// <param name="value">值</param>
+        public static void InsertAfter<T>(this IList<T> list, int index, T value)
+        {
+            foreach (var item in list.Select((o, i) => new { Value = o, Index = i }).Where(p => p.Index == index).OrderByDescending(p => p.Index))
+            {
+                if (item.Index + 1 == list.Count)
+                {
+                    list.Add(value);
+                }
+                else
+                {
+                    list.Insert(item.Index + 1, value);
+                }
+            }
+        }
     }
 }

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

@@ -1,43 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Masuit.Tools
-{
-    public static partial class IEnumerableExtensions
-    {
-        /// <summary>
-        /// 映射到目标类型的集合
-        /// </summary>
-        /// <param name="source">源</param>
-        /// <typeparam name="TDestination">目标类型</typeparam>
-        /// <returns>目标类型集合</returns>
-        [Obsolete("请改用新ToList方法,自行传递clone方法")]
-        public static IEnumerable<TDestination> ToList<TSource, TDestination>(this IEnumerable<TSource> source)
-            where TDestination : new()
-        {
-            return IEnumerableExtensions.ToList<TSource, TDestination>(
-                source: source,
-                selector: t => t.Clone<TDestination>(),
-                defaultValue: null);
-        }
-
-        /// <summary>
-        /// 映射到目标类型的集合
-        /// </summary>
-        /// <param name="source">源</param>
-        /// <typeparam name="TDestination">目标类型</typeparam>
-        /// <returns>目标类型集合</returns>
-        [Obsolete("请改用新ToListAsync方法,自行传递clone方法")]
-        public static Task<IEnumerable<TDestination>> ToListAsync<TSource, TDestination>(this IEnumerable<TSource> source)
-            where TDestination : new()
-        {
-            return Task.Run(() =>
-            {
-                return source.ToList<TSource, TDestination>();
-            });
-        }
-    }
-}

+ 0 - 13
Masuit.Tools/Masuit.Tools.csproj

@@ -1,9 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
-
   <Import Project="..\SDKPulishNuget.targets" />
-
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -49,19 +47,9 @@
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
   </PropertyGroup>
   <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="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.CSharp" />
     <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>
@@ -78,7 +66,6 @@
     <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.DataAnnotations" />
     <Reference Include="System.Configuration" />
     <Reference Include="System.Core" />
     <Reference Include="System.Data" />

+ 7 - 9
Masuit.Tools/packages.config

@@ -1,17 +1,15 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
-  <!--<package id="AngleSharp" version="0.14.0" 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="AngleSharp" version="0.14.0" targetFramework="net461" />
+  <package id="DnsClient" version="1.3.2" targetFramework="net461" />
+  <package id="HtmlAgilityPack" version="1.11.24" targetFramework="net461" />
   <package id="Microsoft.AspNet.Mvc" version="5.2.7" targetFramework="net45" />
   <package id="Microsoft.AspNet.Razor" version="3.2.7" targetFramework="net45" />
   <package id="Microsoft.AspNet.WebPages" version="3.2.7" targetFramework="net45" />
   <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
-  <!--<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net461" />-->
-  <!--<package id="SharpCompress" version="0.26.0" targetFramework="net461" />-->
+  <package id="Newtonsoft.Json" version="12.0.3" targetFramework="net461" />
+  <package id="SharpCompress" version="0.26.0" targetFramework="net461" />
   <package id="StackExchange.Redis" version="1.2.6" targetFramework="net45" requireReinstallation="true" />
-  <!--<package id="System.Buffers" version="4.5.1" targetFramework="net461" />
-  <package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net461" />
-  <package id="System.ValueTuple" version="4.5.0" targetFramework="net461" />-->
+  <package id="System.Buffers" version="4.5.1" targetFramework="net461" />
+  <package id="System.ValueTuple" version="4.5.0" targetFramework="net461" />
 </packages>

+ 16 - 0
Masuit.Tools/packages.config.new.20200817151312

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="AngleSharp" version="0.14.0" targetFramework="net461" />
+  <package id="DnsClient" version="1.3.2" targetFramework="net461" />
+  <package id="HtmlSanitizer" version="5.0.343" targetFramework="net461" />
+  <package id="Microsoft.AspNet.Mvc" version="5.2.7" targetFramework="net45" />
+  <package id="Microsoft.AspNet.Razor" version="3.2.7" targetFramework="net45" />
+  <package id="Microsoft.AspNet.WebPages" version="3.2.7" targetFramework="net45" />
+  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
+  <package id="Newtonsoft.Json" version="12.0.3" targetFramework="net461" />
+  <package id="SharpCompress" version="0.26.0" targetFramework="net461" />
+  <package id="StackExchange.Redis" version="1.2.6" targetFramework="net45" requireReinstallation="true" />
+  <package id="System.Buffers" version="4.5.1" targetFramework="net461" />
+  <package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net461" />
+  <package id="System.ValueTuple" version="4.5.0" targetFramework="net461" />
+</packages>

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

@@ -1,8 +1,8 @@
 <?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.1.2\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.props')" />
-  <Import Project="..\packages\NUnit.3.12.0\build\NUnit.props" Condition="Exists('..\packages\NUnit.3.12.0\build\NUnit.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="..\..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.props')" />
+  <Import Project="..\..\packages\NUnit.3.12.0\build\NUnit.props" Condition="Exists('..\..\packages\NUnit.3.12.0\build\NUnit.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>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -42,67 +42,67 @@
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
-      <HintPath>..\packages\Castle.Core.4.4.1\lib\net45\Castle.Core.dll</HintPath>
+      <HintPath>..\..\packages\Castle.Core.4.4.1\lib\net45\Castle.Core.dll</HintPath>
     </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.1.2\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>
+      <HintPath>..\..\packages\MSTest.TestFramework.2.1.2\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.1.2\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath>
+      <HintPath>..\..\packages\MSTest.TestFramework.2.1.2\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>
+      <HintPath>..\..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
     </Reference>
     <Reference Include="Moq, Version=4.14.0.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
-      <HintPath>..\packages\Moq.4.14.5\lib\net45\Moq.dll</HintPath>
+      <HintPath>..\..\packages\Moq.4.14.5\lib\net45\Moq.dll</HintPath>
     </Reference>
     <Reference Include="nunit.framework, Version=3.12.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
-      <HintPath>..\packages\NUnit.3.12.0\lib\net45\nunit.framework.dll</HintPath>
+      <HintPath>..\..\packages\NUnit.3.12.0\lib\net45\nunit.framework.dll</HintPath>
     </Reference>
     <Reference Include="System" />
     <Reference Include="System.Configuration" />
     <Reference Include="System.Core" />
     <Reference Include="System.Numerics" />
     <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
-      <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.7.1\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
+      <HintPath>..\..\packages\System.Runtime.CompilerServices.Unsafe.4.7.1\lib\net461\System.Runtime.CompilerServices.Unsafe.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>
+      <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>
+      <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>
+      <HintPath>..\..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.Helpers.dll</HintPath>
     </Reference>
     <Reference Include="System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <HintPath>..\packages\Microsoft.AspNet.Mvc.5.2.7\lib\net45\System.Web.Mvc.dll</HintPath>
+      <HintPath>..\..\packages\Microsoft.AspNet.Mvc.5.2.7\lib\net45\System.Web.Mvc.dll</HintPath>
     </Reference>
     <Reference Include="System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <HintPath>..\packages\Microsoft.AspNet.Razor.3.2.7\lib\net45\System.Web.Razor.dll</HintPath>
+      <HintPath>..\..\packages\Microsoft.AspNet.Razor.3.2.7\lib\net45\System.Web.Razor.dll</HintPath>
     </Reference>
     <Reference Include="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.dll</HintPath>
+      <HintPath>..\..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.dll</HintPath>
     </Reference>
     <Reference Include="System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Deployment.dll</HintPath>
+      <HintPath>..\..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Deployment.dll</HintPath>
     </Reference>
     <Reference Include="System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Razor.dll</HintPath>
+      <HintPath>..\..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Razor.dll</HintPath>
     </Reference>
     <Reference Include="xunit.abstractions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
-      <HintPath>..\packages\xunit.abstractions.2.0.3\lib\net35\xunit.abstractions.dll</HintPath>
+      <HintPath>..\..\packages\xunit.abstractions.2.0.3\lib\net35\xunit.abstractions.dll</HintPath>
     </Reference>
     <Reference Include="xunit.assert, Version=2.4.1.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
-      <HintPath>..\packages\xunit.assert.2.4.1\lib\netstandard1.1\xunit.assert.dll</HintPath>
+      <HintPath>..\..\packages\xunit.assert.2.4.1\lib\netstandard1.1\xunit.assert.dll</HintPath>
     </Reference>
     <Reference Include="xunit.core, Version=2.4.1.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
-      <HintPath>..\packages\xunit.extensibility.core.2.4.1\lib\net452\xunit.core.dll</HintPath>
+      <HintPath>..\..\packages\xunit.extensibility.core.2.4.1\lib\net452\xunit.core.dll</HintPath>
     </Reference>
     <Reference Include="xunit.execution.desktop, Version=2.4.1.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
-      <HintPath>..\packages\xunit.extensibility.execution.2.4.1\lib\net452\xunit.execution.desktop.dll</HintPath>
+      <HintPath>..\..\packages\xunit.extensibility.execution.2.4.1\lib\net452\xunit.execution.desktop.dll</HintPath>
     </Reference>
   </ItemGroup>
   <ItemGroup>
@@ -142,7 +142,7 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <Analyzer Include="..\packages\xunit.analyzers.0.10.0\analyzers\dotnet\cs\xunit.analyzers.dll" />
+    <Analyzer Include="..\..\packages\xunit.analyzers.0.10.0\analyzers\dotnet\cs\xunit.analyzers.dll" />
   </ItemGroup>
   <Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
@@ -150,12 +150,12 @@
     <PropertyGroup>
       <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>
     </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\NUnit.3.12.0\build\NUnit.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit.3.12.0\build\NUnit.props'))" />
-    <Error Condition="!Exists('..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.props'))" />
-    <Error Condition="!Exists('..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.targets'))" />
+    <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\NUnit.3.12.0\build\NUnit.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\NUnit.3.12.0\build\NUnit.props'))" />
+    <Error Condition="!Exists('..\..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.props'))" />
+    <Error Condition="!Exists('..\..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\MSTest.TestAdapter.2.1.2\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.1.2\build\net45\MSTest.TestAdapter.targets" Condition="Exists('..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.targets')" />
+  <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.1.2\build\net45\MSTest.TestAdapter.targets" Condition="Exists('..\..\packages\MSTest.TestAdapter.2.1.2\build\net45\MSTest.TestAdapter.targets')" />
 </Project>