diff --git a/build/Version.props b/build/Version.props
index 49b065e..39a89eb 100644
--- a/build/Version.props
+++ b/build/Version.props
@@ -1,5 +1,5 @@
- 7.6.0
+ 7.7.0
\ No newline at end of file
diff --git a/src/Utils/Walterlv.IO.PackageManagement/PackageDirectory.cs b/src/Utils/Walterlv.IO.PackageManagement/PackageDirectory.cs
index 88435f9..828eea6 100644
--- a/src/Utils/Walterlv.IO.PackageManagement/PackageDirectory.cs
+++ b/src/Utils/Walterlv.IO.PackageManagement/PackageDirectory.cs
@@ -1,10 +1,7 @@
using System;
-using System.Collections.Generic;
using System.Diagnostics.Contracts;
using System.IO;
using System.Linq;
-using System.Text;
-
using Walterlv.IO.PackageManagement.Core;
namespace Walterlv.IO.PackageManagement
@@ -42,7 +39,8 @@ public static IOResult Move(string sourceDirectory, string targetDirectory, bool
/// 目标文件夹。
/// 指定当目标路径存在现成现成文件夹时,应该如何覆盖目标文件夹。
/// 包含执行成功和失败的信息,以及中间执行中方法自动决定的一些细节。
- public static IOResult Move(string sourceDirectory, string targetDirectory, DirectoryOverwriteStrategy overwrite = DirectoryOverwriteStrategy.Overwrite) => Move(
+ public static IOResult Move(string sourceDirectory, string targetDirectory,
+ DirectoryOverwriteStrategy overwrite = DirectoryOverwriteStrategy.Overwrite) => Move(
VerifyDirectoryArgument(sourceDirectory, nameof(sourceDirectory)),
VerifyDirectoryArgument(targetDirectory, nameof(targetDirectory)),
overwrite);
@@ -68,7 +66,8 @@ public static IOResult Copy(string sourceDirectory, string targetDirectory, bool
/// 目标文件夹。
/// 指定当目标路径存在现成现成文件夹时,应该如何覆盖目标文件夹。
/// 包含执行成功和失败的信息,以及中间执行中方法自动决定的一些细节。
- public static IOResult Copy(string sourceDirectory, string targetDirectory, DirectoryOverwriteStrategy overwrite = DirectoryOverwriteStrategy.Overwrite) => Copy(
+ public static IOResult Copy(string sourceDirectory, string targetDirectory,
+ DirectoryOverwriteStrategy overwrite = DirectoryOverwriteStrategy.Overwrite) => Copy(
VerifyDirectoryArgument(sourceDirectory, nameof(sourceDirectory)),
VerifyDirectoryArgument(targetDirectory, nameof(targetDirectory)),
overwrite);
@@ -131,7 +130,8 @@ public static IOResult Move(DirectoryInfo sourceDirectory, DirectoryInfo targetD
/// 目标文件夹。
/// 指定当目标路径存在现成现成文件夹时,应该如何覆盖目标文件夹。
/// 包含执行成功和失败的信息,以及中间执行中方法自动决定的一些细节。
- public static IOResult Move(DirectoryInfo sourceDirectory, DirectoryInfo targetDirectory, DirectoryOverwriteStrategy overwrite = DirectoryOverwriteStrategy.Overwrite)
+ public static IOResult Move(DirectoryInfo sourceDirectory, DirectoryInfo targetDirectory,
+ DirectoryOverwriteStrategy overwrite = DirectoryOverwriteStrategy.Overwrite)
{
if (sourceDirectory is null)
{
@@ -289,7 +289,8 @@ public static IOResult Copy(DirectoryInfo sourceDirectory, DirectoryInfo targetD
/// 目标文件夹。
/// 指定当目标路径存在现成现成文件夹时,应该如何覆盖目标文件夹。
/// 包含执行成功和失败的信息,以及中间执行中方法自动决定的一些细节。
- public static IOResult Copy(DirectoryInfo sourceDirectory, DirectoryInfo targetDirectory, DirectoryOverwriteStrategy overwrite = DirectoryOverwriteStrategy.Overwrite)
+ public static IOResult Copy(DirectoryInfo sourceDirectory, DirectoryInfo targetDirectory,
+ DirectoryOverwriteStrategy overwrite = DirectoryOverwriteStrategy.Overwrite)
{
if (sourceDirectory is null)
{
@@ -374,6 +375,12 @@ static void Delete(DirectoryInfo directory, int depth, IOResult logger)
{
JunctionPoint.Delete(directory.FullName);
}
+#if NET6_0_OR_GREATER
+ else if(directory.LinkTarget != null)
+ {
+ directory.Delete();
+ }
+#endif
else if (!Directory.Exists(directory.FullName))
{
return;
@@ -444,21 +451,21 @@ private static IOResult DeleteIfOverwrite(DirectoryInfo targetDirectory, Directo
switch (overwrite)
{
case DirectoryOverwriteStrategy.DoNotOverwrite:
- {
- logger.Log("目标目录已经存在,但是要求不被覆盖,抛出异常。");
- throw new IOException($"目标目录“{targetDirectory.FullName}”已经存在,如要覆盖,请设置 {nameof(overwrite)} 为 true。");
- }
+ {
+ logger.Log("目标目录已经存在,但是要求不被覆盖,抛出异常。");
+ throw new IOException($"目标目录“{targetDirectory.FullName}”已经存在,如要覆盖,请设置 {nameof(overwrite)} 为 true。");
+ }
case DirectoryOverwriteStrategy.Overwrite:
- {
- logger.Log("目标目录已经存在,删除。");
- var deleteResult = Delete(targetDirectory.FullName);
- logger.Append(deleteResult);
- }
+ {
+ logger.Log("目标目录已经存在,删除。");
+ var deleteResult = Delete(targetDirectory.FullName);
+ logger.Append(deleteResult);
+ }
break;
case DirectoryOverwriteStrategy.MergeOverwrite:
- {
- // 如果是合并式覆盖,那么不需要删除,也不需要抛异常,直接覆盖即可。
- }
+ {
+ // 如果是合并式覆盖,那么不需要删除,也不需要抛异常,直接覆盖即可。
+ }
break;
default:
break;
@@ -467,7 +474,8 @@ private static IOResult DeleteIfOverwrite(DirectoryInfo targetDirectory, Directo
return logger;
}
- private static void MoveFileWithConflictionResolver(DirectoryInfo targetDirectory, FileInfo sourceFile, FileInfo targetFile, Action conflictionResolver)
+ private static void MoveFileWithConflictionResolver(DirectoryInfo targetDirectory, FileInfo sourceFile, FileInfo targetFile,
+ Action conflictionResolver)
{
var resolver = new FileMergeResolvingInfo(targetDirectory, targetFile);
for (var i = 0; i < ushort.MaxValue; i++)
diff --git a/src/Utils/Walterlv.IO.PackageManagement/Walterlv.IO.PackageManagement.csproj b/src/Utils/Walterlv.IO.PackageManagement/Walterlv.IO.PackageManagement.csproj
index 1c94dae..45c8dde 100644
--- a/src/Utils/Walterlv.IO.PackageManagement/Walterlv.IO.PackageManagement.csproj
+++ b/src/Utils/Walterlv.IO.PackageManagement/Walterlv.IO.PackageManagement.csproj
@@ -1,7 +1,7 @@
- netcoreapp3.0;netstandard2.0;net45
+ net6.0;netcoreapp3.0;netstandard2.0;net45
Walterlv.IO.PackageManagement is a tool for you to manage packages. It manage a directory with many versions of sub-directories and a current Junction Point linked to one of them.
diff --git a/src/Utils/Walterlv.Logger/ILogger.cs b/src/Utils/Walterlv.Logger/ILogger.cs
index 489639f..1a8c2cb 100644
--- a/src/Utils/Walterlv.Logger/ILogger.cs
+++ b/src/Utils/Walterlv.Logger/ILogger.cs
@@ -26,14 +26,14 @@ public interface ILogger
void Message(string text, [CallerMemberName] string? callerMemberName = null);
///
- /// 如果方法进入了非预期的分支,请调用此方法以便在日志文件中高亮显示。
+ /// 如果方法进入了非预期的分支,请调用此方法以便在记录可高亮显示的日志。
///
/// 描述当前进入的代码分支。
/// 编译器自动传入。
void Warning(string message, [CallerMemberName] string? callerMemberName = null);
///
- /// 在单独的日志文件中记录异常,并同时在普通的日志文件中插入一段高亮显示的日志。
+ /// 单独记录异常。
/// 请注意,并不是所有的异常都需要调用此方法记录,此方法仅仅记录非预期的异常。
///
/// 对当前异常的文字描述。
@@ -42,7 +42,7 @@ public interface ILogger
void Error(string message, Exception? exception = null, [CallerMemberName] string? callerMemberName = null);
///
- /// 在单独的日志文件中记录异常,并同时在普通的日志文件中插入一段高亮显示的日志。
+ /// 单独记录异常。
/// 请注意,并不是所有的异常都需要调用此方法记录,此方法仅仅记录非预期的异常。
///
/// 异常实例。
@@ -51,7 +51,7 @@ public interface ILogger
void Error(Exception exception, string? message = null, [CallerMemberName] string? callerMemberName = null);
///
- /// 在单独的日志文件中记录一条导致致命性错误的异常,并同时在普通的日志文件中插入一段高亮显示的致命错误标记。
+ /// 单独记录导致致命性错误的异常。
/// 请注意,仅在全局区域记录此异常,全局区域如果还能收到异常说明方法内部有未处理的异常。
///
/// 异常实例。
diff --git a/src/Utils/Walterlv.Logger/IO/TextFileLogger.cs b/src/Utils/Walterlv.Logger/IO/TextFileLogger.cs
index 642af94..fdaa599 100644
--- a/src/Utils/Walterlv.Logger/IO/TextFileLogger.cs
+++ b/src/Utils/Walterlv.Logger/IO/TextFileLogger.cs
@@ -73,6 +73,11 @@ public TextFileLogger(FileInfo infoLogFile, FileInfo errorLogFile, string lineEn
_errorLogFile = areSameFile ? infoLogFile : errorLogFile;
}
+ ///
+ /// 获取或设置一个值,指示在记录错误日志时,是否同时在信息日志上对此错误进行高亮显示。
+ ///
+ public bool HighlightErrorsOnInfo { get; set; } = true;
+
///
/// 请求在写入首条日志前针对日志文件执行一些代码。代码可能在任一线程中执行,但确保不会并发。
///
@@ -133,7 +138,10 @@ protected sealed override void OnLogReceived(in LogContext context)
if (!areSameFile && context.CurrentLevel <= LogLevel.Error)
{
// 写入日志的主要部分。
- CriticalWrite(infoMutex, _infoLogFile, BuildLogText(in context, containsExtraInfo: false, _lineEnd));
+ if (HighlightErrorsOnInfo)
+ {
+ CriticalWrite(infoMutex, _infoLogFile, BuildLogText(in context, containsExtraInfo: false, _lineEnd));
+ }
// 写入日志的扩展部分。
CriticalWrite(errorMutex, _errorLogFile, BuildLogText(in context, context.ExtraInfo != null, _lineEnd));