diff --git a/.gitee/ISSUE_TEMPLATE/bug.yml b/.gitee/ISSUE_TEMPLATE/bug.yml index 16113a51562839ba346cde7c7e1bb7eabf7705ad..457e05924ab907c95ec43b6cf51e59089c3989f9 100644 --- a/.gitee/ISSUE_TEMPLATE/bug.yml +++ b/.gitee/ISSUE_TEMPLATE/bug.yml @@ -13,7 +13,10 @@ body: label: 版本号 description: 请选择项目使用的 Furion 版本? options: - - 4.9.4.7 (最新) + - 4.9.4.10 (最新) + - 4.9.4.9 + - 4.9.4.8 + - 4.9.4.7 - 4.9.4.6 - 4.9.4.5 - 4.9.4.4 diff --git a/framework/Directory.Build.props b/framework/Directory.Build.props index 752e36119413652f245fb3dd59bc17ce47c267f4..5142f97602af893575b9c68708b2d63245185d1f 100644 --- a/framework/Directory.Build.props +++ b/framework/Directory.Build.props @@ -1,7 +1,7 @@ net5.0;net6.0;net7.0;net8.0;net9.0 - 4.9.4.7 + 4.9.4.10 enable 百小僧 百签科技(广东)有限公司 diff --git a/framework/Furion.Extras.DatabaseAccessor.MongoDB/Furion.Extras.DatabaseAccessor.MongoDB.csproj b/framework/Furion.Extras.DatabaseAccessor.MongoDB/Furion.Extras.DatabaseAccessor.MongoDB.csproj index cebdc4c0bf5dea96a7cda44c01be58a316e998a0..efa0724374e6880e11da7b3b27eef3e896e122ee 100644 --- a/framework/Furion.Extras.DatabaseAccessor.MongoDB/Furion.Extras.DatabaseAccessor.MongoDB.csproj +++ b/framework/Furion.Extras.DatabaseAccessor.MongoDB/Furion.Extras.DatabaseAccessor.MongoDB.csproj @@ -25,7 +25,7 @@ - + \ No newline at end of file diff --git a/framework/Furion.Pure/App/Extensions/AppApplicationBuilderExtensions.cs b/framework/Furion.Pure/App/Extensions/AppApplicationBuilderExtensions.cs index 21d8298c11c98dfd691a118e898457912e54d96d..ec1524be5b902b1510fb86293af4792f2d57417c 100644 --- a/framework/Furion.Pure/App/Extensions/AppApplicationBuilderExtensions.cs +++ b/framework/Furion.Pure/App/Extensions/AppApplicationBuilderExtensions.cs @@ -34,6 +34,24 @@ namespace Microsoft.AspNetCore.Builder; [SuppressSniffer] public static class AppApplicationBuilderExtensions { +#if !NET5_0 + /// + /// 设置默认服务存储器 + /// + /// + /// + /// 解决在主机启动前解析服务问题 + /// 使用:var app = builder.Build().UseDefaultServiceProvider(); + /// + /// + public static WebApplication UseDefaultServiceProvider(this WebApplication app) + { + InternalApp.RootServices ??= app.Services; + + return app; + } +#endif + /// /// 注入基础中间件(带Swagger) /// @@ -41,7 +59,7 @@ public static class AppApplicationBuilderExtensions /// 空字符串将为首页 /// /// 解决 Swagger 被代理问题 - /// + /// public static IApplicationBuilder UseInject(this IApplicationBuilder app, string routePrefix = default, Action configure = null, bool withProxy = false) { // 载入中间件配置选项 @@ -59,7 +77,7 @@ public static class AppApplicationBuilderExtensions /// /// /// 解决 Swagger 被代理问题 - /// + /// public static IApplicationBuilder UseInject(this IApplicationBuilder app, Action configure, bool withProxy = false) { return app.UseInject(default, configure: configure, withProxy: withProxy); @@ -79,7 +97,7 @@ public static class AppApplicationBuilderExtensions /// 解决 .NET6 WebApplication 模式下二级虚拟目录错误问题 /// /// - /// + /// public static IApplicationBuilder MapRouteControllers(this IApplicationBuilder app) { app.UseRouting(); @@ -96,7 +114,7 @@ public static class AppApplicationBuilderExtensions /// /// 须在 app.UseRouting() 之前注册 /// - /// + /// public static IApplicationBuilder EnableBuffering(this IApplicationBuilder app) { return app.Use(next => context => @@ -111,7 +129,7 @@ public static class AppApplicationBuilderExtensions /// /// 应用构建器 /// 应用配置 - /// 应用构建器 + /// internal static IApplicationBuilder UseApp(this IApplicationBuilder app, Action configure = null) { // 调用自定义服务 diff --git a/framework/Furion.Pure/App/Filters/StartupFilter.cs b/framework/Furion.Pure/App/Filters/StartupFilter.cs index 478db95ae6b8beff919cd74a5f2dd080798c6281..a29900b2821686a1c485bee9d95aac86d9285764 100644 --- a/framework/Furion.Pure/App/Filters/StartupFilter.cs +++ b/framework/Furion.Pure/App/Filters/StartupFilter.cs @@ -49,7 +49,7 @@ public class StartupFilter : IStartupFilter return app => { // 存储根服务 - InternalApp.RootServices = app.ApplicationServices; + InternalApp.RootServices ??= app.ApplicationServices; // 环境名 var envName = App.HostEnvironment?.EnvironmentName ?? "Unknown"; diff --git a/framework/Furion.Pure/App/Startups/GenericHostLifetimeEventsHostedService.cs b/framework/Furion.Pure/App/Startups/GenericHostLifetimeEventsHostedService.cs index 78a020bcf781b45c71951e5d85b8501377a4f01d..e6451d869e016f0c19fea47a0159d84a0791e384 100644 --- a/framework/Furion.Pure/App/Startups/GenericHostLifetimeEventsHostedService.cs +++ b/framework/Furion.Pure/App/Startups/GenericHostLifetimeEventsHostedService.cs @@ -39,7 +39,7 @@ internal class GenericHostLifetimeEventsHostedService : IHostedService public GenericHostLifetimeEventsHostedService(IHost host) { // 存储根服务 - InternalApp.RootServices = host.Services; + InternalApp.RootServices ??= host.Services; } /// diff --git a/framework/Furion.Pure/JsonSerialization/JSON.cs b/framework/Furion.Pure/JsonSerialization/JSON.cs index 019adb4b43087ee1baf4285e2d0b7cd5dbc06609..ce7bbb7f427fd92664803d0143e4bb88c09a3ab6 100644 --- a/framework/Furion.Pure/JsonSerialization/JSON.cs +++ b/framework/Furion.Pure/JsonSerialization/JSON.cs @@ -79,16 +79,17 @@ public static class JSON /// /// 检查 JSON 字符串是否有效 /// - /// + /// JSON 字符串 + /// 标准 JSON /// - public static bool IsValid(string jsonString) + public static bool IsValid(string jsonString, bool standard = false) { if (string.IsNullOrWhiteSpace(jsonString)) return false; try { using var document = JsonDocument.Parse(jsonString); - return true; + return !standard || document.RootElement.ValueKind == JsonValueKind.Object || document.RootElement.ValueKind == JsonValueKind.Array; } catch (JsonException) { diff --git a/framework/Furion.Pure/RemoteRequest/Internal/HttpRequestPartMethods.cs b/framework/Furion.Pure/RemoteRequest/Internal/HttpRequestPartMethods.cs index c1e44b7f8ec64473dcceb65f5bed9edaebec795e..6afb689316e18b0956993087f1d2548bab30bc5c 100644 --- a/framework/Furion.Pure/RemoteRequest/Internal/HttpRequestPartMethods.cs +++ b/framework/Furion.Pure/RemoteRequest/Internal/HttpRequestPartMethods.cs @@ -961,7 +961,10 @@ public sealed partial class HttpRequestPart httpContent = new ByteArrayContent(Files[0].Bytes); // 设置内容类型 - httpContent.Headers.ContentType = new MediaTypeHeaderValue(ContentType); + httpContent.Headers.ContentType = new MediaTypeHeaderValue(ContentType) + { + CharSet = ContentEncoding.BodyName + }; } break; @@ -976,7 +979,10 @@ public sealed partial class HttpRequestPart httpContent = new StringContent(SerializerObject(Body), ContentEncoding); // 设置内容类型 - httpContent.Headers.ContentType = new MediaTypeHeaderValue(ContentType); + httpContent.Headers.ContentType = new MediaTypeHeaderValue(ContentType) + { + CharSet = ContentEncoding.BodyName + }; } break; diff --git a/framework/Furion.Pure/RemoteRequest/Internal/HttpRequestPartSetters.cs b/framework/Furion.Pure/RemoteRequest/Internal/HttpRequestPartSetters.cs index 90ce1cbd8f24f8b04160094b9dffeb11408dd4c1..e17816a6e827a815db82b42d703ba53956d9fb44 100644 --- a/framework/Furion.Pure/RemoteRequest/Internal/HttpRequestPartSetters.cs +++ b/framework/Furion.Pure/RemoteRequest/Internal/HttpRequestPartSetters.cs @@ -192,7 +192,16 @@ public sealed partial class HttpRequestPart /// public HttpRequestPart SetContentType(string contentType) { - if (!string.IsNullOrWhiteSpace(contentType)) ContentType = contentType; + if (!string.IsNullOrWhiteSpace(contentType)) + { + // 处理 application/json;charset=utf-8,携带 charset 并非标准格式 + if (contentType.Contains("charset", StringComparison.OrdinalIgnoreCase)) + { + var parts = contentType.Split(';', StringSplitOptions.RemoveEmptyEntries); + if (parts.Length > 0) ContentType = parts[0]; + } + else ContentType = contentType; + } return this; } diff --git a/framework/Furion.Pure/UnitOfWork/FilterAttributes/UnitOfWorkAttribute.cs b/framework/Furion.Pure/UnitOfWork/FilterAttributes/UnitOfWorkAttribute.cs index aa6f7f347b85a488b081c17a7da7c59dc3600782..8971b15dc1f94549786613443e5029255d045008 100644 --- a/framework/Furion.Pure/UnitOfWork/FilterAttributes/UnitOfWorkAttribute.cs +++ b/framework/Furion.Pure/UnitOfWork/FilterAttributes/UnitOfWorkAttribute.cs @@ -204,6 +204,8 @@ public sealed class UnitOfWorkAttribute : Attribute, IAsyncActionFilter, IAsyncP // 打印工作单元开始消息 if (UseAmbientTransaction) App.PrintToMiniProfiler(MiniProfilerCategory, "Beginning (Ambient)"); + logger.LogWarning("[Database Transaction] Starting a new transaction."); + // 开始事务 BeginTransaction(context, method, out var _unitOfWork, out var unitOfWorkAttribute); @@ -218,6 +220,8 @@ public sealed class UnitOfWorkAttribute : Attribute, IAsyncActionFilter, IAsyncP { transactionScope?.Complete(); + logger.LogWarning("[Database Transaction] Transaction committed successfully."); + // 打印事务提交消息 if (UseAmbientTransaction) App.PrintToMiniProfiler(MiniProfilerCategory, "Completed (Ambient)"); } @@ -226,12 +230,12 @@ public sealed class UnitOfWorkAttribute : Attribute, IAsyncActionFilter, IAsyncP // 打印事务回滚消息 if (UseAmbientTransaction) App.PrintToMiniProfiler(MiniProfilerCategory, "Rollback (Ambient)", isError: true); - logger.LogError(resultContext.Exception, "Transaction Failed."); + logger.LogError(resultContext.Exception, "[Database Transaction] Transaction rolled back due to an error."); } } catch (Exception ex) { - logger.LogError(ex, "Transaction Failed."); + logger.LogError(ex, "[Database Transaction] Transaction rolled back due to an error."); // 打印事务回滚消息 if (UseAmbientTransaction) App.PrintToMiniProfiler(MiniProfilerCategory, "Rollback (Ambient)", isError: true); diff --git a/framework/Furion/App/Extensions/AppApplicationBuilderExtensions.cs b/framework/Furion/App/Extensions/AppApplicationBuilderExtensions.cs index 21d8298c11c98dfd691a118e898457912e54d96d..ec1524be5b902b1510fb86293af4792f2d57417c 100644 --- a/framework/Furion/App/Extensions/AppApplicationBuilderExtensions.cs +++ b/framework/Furion/App/Extensions/AppApplicationBuilderExtensions.cs @@ -34,6 +34,24 @@ namespace Microsoft.AspNetCore.Builder; [SuppressSniffer] public static class AppApplicationBuilderExtensions { +#if !NET5_0 + /// + /// 设置默认服务存储器 + /// + /// + /// + /// 解决在主机启动前解析服务问题 + /// 使用:var app = builder.Build().UseDefaultServiceProvider(); + /// + /// + public static WebApplication UseDefaultServiceProvider(this WebApplication app) + { + InternalApp.RootServices ??= app.Services; + + return app; + } +#endif + /// /// 注入基础中间件(带Swagger) /// @@ -41,7 +59,7 @@ public static class AppApplicationBuilderExtensions /// 空字符串将为首页 /// /// 解决 Swagger 被代理问题 - /// + /// public static IApplicationBuilder UseInject(this IApplicationBuilder app, string routePrefix = default, Action configure = null, bool withProxy = false) { // 载入中间件配置选项 @@ -59,7 +77,7 @@ public static class AppApplicationBuilderExtensions /// /// /// 解决 Swagger 被代理问题 - /// + /// public static IApplicationBuilder UseInject(this IApplicationBuilder app, Action configure, bool withProxy = false) { return app.UseInject(default, configure: configure, withProxy: withProxy); @@ -79,7 +97,7 @@ public static class AppApplicationBuilderExtensions /// 解决 .NET6 WebApplication 模式下二级虚拟目录错误问题 /// /// - /// + /// public static IApplicationBuilder MapRouteControllers(this IApplicationBuilder app) { app.UseRouting(); @@ -96,7 +114,7 @@ public static class AppApplicationBuilderExtensions /// /// 须在 app.UseRouting() 之前注册 /// - /// + /// public static IApplicationBuilder EnableBuffering(this IApplicationBuilder app) { return app.Use(next => context => @@ -111,7 +129,7 @@ public static class AppApplicationBuilderExtensions /// /// 应用构建器 /// 应用配置 - /// 应用构建器 + /// internal static IApplicationBuilder UseApp(this IApplicationBuilder app, Action configure = null) { // 调用自定义服务 diff --git a/framework/Furion/App/Filters/StartupFilter.cs b/framework/Furion/App/Filters/StartupFilter.cs index 478db95ae6b8beff919cd74a5f2dd080798c6281..a29900b2821686a1c485bee9d95aac86d9285764 100644 --- a/framework/Furion/App/Filters/StartupFilter.cs +++ b/framework/Furion/App/Filters/StartupFilter.cs @@ -49,7 +49,7 @@ public class StartupFilter : IStartupFilter return app => { // 存储根服务 - InternalApp.RootServices = app.ApplicationServices; + InternalApp.RootServices ??= app.ApplicationServices; // 环境名 var envName = App.HostEnvironment?.EnvironmentName ?? "Unknown"; diff --git a/framework/Furion/App/Startups/GenericHostLifetimeEventsHostedService.cs b/framework/Furion/App/Startups/GenericHostLifetimeEventsHostedService.cs index 78a020bcf781b45c71951e5d85b8501377a4f01d..e6451d869e016f0c19fea47a0159d84a0791e384 100644 --- a/framework/Furion/App/Startups/GenericHostLifetimeEventsHostedService.cs +++ b/framework/Furion/App/Startups/GenericHostLifetimeEventsHostedService.cs @@ -39,7 +39,7 @@ internal class GenericHostLifetimeEventsHostedService : IHostedService public GenericHostLifetimeEventsHostedService(IHost host) { // 存储根服务 - InternalApp.RootServices = host.Services; + InternalApp.RootServices ??= host.Services; } /// diff --git a/framework/Furion/DatabaseAccessor/Extensions/PagedQueryableExtensions.cs b/framework/Furion/DatabaseAccessor/Extensions/PagedQueryableExtensions.cs index 475b2130e781551015507f6cc8c41dc77ffb59fe..e755bcb8f96d2f70db46ee46fd335f969a14176d 100644 --- a/framework/Furion/DatabaseAccessor/Extensions/PagedQueryableExtensions.cs +++ b/framework/Furion/DatabaseAccessor/Extensions/PagedQueryableExtensions.cs @@ -40,12 +40,16 @@ public static class PagedQueryableExtensions /// /// 页码,必须大于0 /// + /// 总数计算方式 /// - public static PagedList ToPagedList(this IQueryable entities, int pageIndex = 1, int pageSize = 20) + public static PagedList ToPagedList(this IQueryable entities, int pageIndex = 1, int pageSize = 20, Func totalComputed = null) { if (pageIndex <= 0) throw new InvalidOperationException($"{nameof(pageIndex)} must be a positive integer greater than 0."); - var totalCount = entities.Count(); + var totalCount = totalComputed == null + ? entities.Count() + : totalComputed(); + var items = entities.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); var totalPages = (int)Math.Ceiling(totalCount / (double)pageSize); @@ -69,12 +73,16 @@ public static class PagedQueryableExtensions /// 页码,必须大于0 /// /// + /// 总数计算方式 /// - public static async Task> ToPagedListAsync(this IQueryable entities, int pageIndex = 1, int pageSize = 20, CancellationToken cancellationToken = default) + public static async Task> ToPagedListAsync(this IQueryable entities, int pageIndex = 1, int pageSize = 20, CancellationToken cancellationToken = default, Func totalComputed = null) { if (pageIndex <= 0) throw new InvalidOperationException($"{nameof(pageIndex)} must be a positive integer greater than 0."); - var totalCount = await entities.CountAsync(cancellationToken); + var totalCount = totalComputed == null + ? (await entities.CountAsync(cancellationToken)) + : totalComputed(); + var items = await entities.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync(cancellationToken); var totalPages = (int)Math.Ceiling(totalCount / (double)pageSize); diff --git a/framework/Furion/JsonSerialization/JSON.cs b/framework/Furion/JsonSerialization/JSON.cs index 019adb4b43087ee1baf4285e2d0b7cd5dbc06609..ce7bbb7f427fd92664803d0143e4bb88c09a3ab6 100644 --- a/framework/Furion/JsonSerialization/JSON.cs +++ b/framework/Furion/JsonSerialization/JSON.cs @@ -79,16 +79,17 @@ public static class JSON /// /// 检查 JSON 字符串是否有效 /// - /// + /// JSON 字符串 + /// 标准 JSON /// - public static bool IsValid(string jsonString) + public static bool IsValid(string jsonString, bool standard = false) { if (string.IsNullOrWhiteSpace(jsonString)) return false; try { using var document = JsonDocument.Parse(jsonString); - return true; + return !standard || document.RootElement.ValueKind == JsonValueKind.Object || document.RootElement.ValueKind == JsonValueKind.Array; } catch (JsonException) { diff --git a/framework/Furion/RemoteRequest/Internal/HttpRequestPartMethods.cs b/framework/Furion/RemoteRequest/Internal/HttpRequestPartMethods.cs index c1e44b7f8ec64473dcceb65f5bed9edaebec795e..6afb689316e18b0956993087f1d2548bab30bc5c 100644 --- a/framework/Furion/RemoteRequest/Internal/HttpRequestPartMethods.cs +++ b/framework/Furion/RemoteRequest/Internal/HttpRequestPartMethods.cs @@ -961,7 +961,10 @@ public sealed partial class HttpRequestPart httpContent = new ByteArrayContent(Files[0].Bytes); // 设置内容类型 - httpContent.Headers.ContentType = new MediaTypeHeaderValue(ContentType); + httpContent.Headers.ContentType = new MediaTypeHeaderValue(ContentType) + { + CharSet = ContentEncoding.BodyName + }; } break; @@ -976,7 +979,10 @@ public sealed partial class HttpRequestPart httpContent = new StringContent(SerializerObject(Body), ContentEncoding); // 设置内容类型 - httpContent.Headers.ContentType = new MediaTypeHeaderValue(ContentType); + httpContent.Headers.ContentType = new MediaTypeHeaderValue(ContentType) + { + CharSet = ContentEncoding.BodyName + }; } break; diff --git a/framework/Furion/RemoteRequest/Internal/HttpRequestPartSetters.cs b/framework/Furion/RemoteRequest/Internal/HttpRequestPartSetters.cs index 90ce1cbd8f24f8b04160094b9dffeb11408dd4c1..e17816a6e827a815db82b42d703ba53956d9fb44 100644 --- a/framework/Furion/RemoteRequest/Internal/HttpRequestPartSetters.cs +++ b/framework/Furion/RemoteRequest/Internal/HttpRequestPartSetters.cs @@ -192,7 +192,16 @@ public sealed partial class HttpRequestPart /// public HttpRequestPart SetContentType(string contentType) { - if (!string.IsNullOrWhiteSpace(contentType)) ContentType = contentType; + if (!string.IsNullOrWhiteSpace(contentType)) + { + // 处理 application/json;charset=utf-8,携带 charset 并非标准格式 + if (contentType.Contains("charset", StringComparison.OrdinalIgnoreCase)) + { + var parts = contentType.Split(';', StringSplitOptions.RemoveEmptyEntries); + if (parts.Length > 0) ContentType = parts[0]; + } + else ContentType = contentType; + } return this; } diff --git a/framework/Furion/UnitOfWork/FilterAttributes/UnitOfWorkAttribute.cs b/framework/Furion/UnitOfWork/FilterAttributes/UnitOfWorkAttribute.cs index aa6f7f347b85a488b081c17a7da7c59dc3600782..8971b15dc1f94549786613443e5029255d045008 100644 --- a/framework/Furion/UnitOfWork/FilterAttributes/UnitOfWorkAttribute.cs +++ b/framework/Furion/UnitOfWork/FilterAttributes/UnitOfWorkAttribute.cs @@ -204,6 +204,8 @@ public sealed class UnitOfWorkAttribute : Attribute, IAsyncActionFilter, IAsyncP // 打印工作单元开始消息 if (UseAmbientTransaction) App.PrintToMiniProfiler(MiniProfilerCategory, "Beginning (Ambient)"); + logger.LogWarning("[Database Transaction] Starting a new transaction."); + // 开始事务 BeginTransaction(context, method, out var _unitOfWork, out var unitOfWorkAttribute); @@ -218,6 +220,8 @@ public sealed class UnitOfWorkAttribute : Attribute, IAsyncActionFilter, IAsyncP { transactionScope?.Complete(); + logger.LogWarning("[Database Transaction] Transaction committed successfully."); + // 打印事务提交消息 if (UseAmbientTransaction) App.PrintToMiniProfiler(MiniProfilerCategory, "Completed (Ambient)"); } @@ -226,12 +230,12 @@ public sealed class UnitOfWorkAttribute : Attribute, IAsyncActionFilter, IAsyncP // 打印事务回滚消息 if (UseAmbientTransaction) App.PrintToMiniProfiler(MiniProfilerCategory, "Rollback (Ambient)", isError: true); - logger.LogError(resultContext.Exception, "Transaction Failed."); + logger.LogError(resultContext.Exception, "[Database Transaction] Transaction rolled back due to an error."); } } catch (Exception ex) { - logger.LogError(ex, "Transaction Failed."); + logger.LogError(ex, "[Database Transaction] Transaction rolled back due to an error."); // 打印事务回滚消息 if (UseAmbientTransaction) App.PrintToMiniProfiler(MiniProfilerCategory, "Rollback (Ambient)", isError: true); diff --git a/samples/Furion.Core/Furion.Core.csproj b/samples/Furion.Core/Furion.Core.csproj index 5704de0dce6afec03debab52a2bf9c3bea53e412..335177bc84ee90faa0f83582d2a65c1bb22ac9f3 100644 --- a/samples/Furion.Core/Furion.Core.csproj +++ b/samples/Furion.Core/Furion.Core.csproj @@ -11,8 +11,8 @@ - - + + diff --git a/samples/Furion.Web.Core/Startup.cs b/samples/Furion.Web.Core/Startup.cs index c88737013b18bf7299cb8eba8535fbe1541fe98e..734b46f52026968f8889a5b4d37dfc1b7b8c740b 100644 --- a/samples/Furion.Web.Core/Startup.cs +++ b/samples/Furion.Web.Core/Startup.cs @@ -146,6 +146,7 @@ public sealed class Startup : AppStartup { ContentTypeProvider = FS.GetFileExtensionContentTypeProvider() }); + app.UseScheduleUI(options => { }); diff --git a/templates/FurionApiTemplate/Furion.Template.Api.nuspec b/templates/FurionApiTemplate/Furion.Template.Api.nuspec index 9f5a348d9cc3288f05dde9c47b660beffcbf082c..173ead1461e4b6962185fbd4bde235b005abd12e 100644 --- a/templates/FurionApiTemplate/Furion.Template.Api.nuspec +++ b/templates/FurionApiTemplate/Furion.Template.Api.nuspec @@ -2,7 +2,7 @@ Furion.Template.Api - 4.9.4.7 + 4.9.4.10 基于 Furion 框架快速搭建 Api 多层架构模板。 百小僧 diff --git a/templates/FurionApiTemplate/src/FurionApi.Core/FurionApi.Core.csproj b/templates/FurionApiTemplate/src/FurionApi.Core/FurionApi.Core.csproj index 9ecb85acf8e1da8852227f8284c6548e0e62c59e..7ad4a09174963f7b7e1d3020209f7819cc892bc0 100644 --- a/templates/FurionApiTemplate/src/FurionApi.Core/FurionApi.Core.csproj +++ b/templates/FurionApiTemplate/src/FurionApi.Core/FurionApi.Core.csproj @@ -36,9 +36,9 @@ - - - + + + diff --git a/templates/FurionAppTemplate/Furion.Template.App.nuspec b/templates/FurionAppTemplate/Furion.Template.App.nuspec index 13e7fe1715ec03d4fca8cc77e4209f5f3f268be7..85e303daf912dbca117278d0a3a6ee39a9b40ee5 100644 --- a/templates/FurionAppTemplate/Furion.Template.App.nuspec +++ b/templates/FurionAppTemplate/Furion.Template.App.nuspec @@ -2,7 +2,7 @@ Furion.Template.App - 4.9.4.7 + 4.9.4.10 基于 Furion 框架快速搭建 Mvc/Api 多层架构模板。 百小僧 diff --git a/templates/FurionAppTemplate/src/FurionApp.Core/FurionApp.Core.csproj b/templates/FurionAppTemplate/src/FurionApp.Core/FurionApp.Core.csproj index 1217672136dfaf08fbf5eb98b2befd928e482ec0..1fa784e7119351f27f8232d0b06972cd4a40a896 100644 --- a/templates/FurionAppTemplate/src/FurionApp.Core/FurionApp.Core.csproj +++ b/templates/FurionAppTemplate/src/FurionApp.Core/FurionApp.Core.csproj @@ -36,9 +36,9 @@ - - - + + + diff --git a/templates/FurionBlazorAppTemplate/Furion.Template.Blazor.App.nuspec b/templates/FurionBlazorAppTemplate/Furion.Template.Blazor.App.nuspec index 96144129c6acd99b0689da8fde7f92e50625bb4f..0fcb7528a3a240dc76a2a91bc39bf60131bb86e3 100644 --- a/templates/FurionBlazorAppTemplate/Furion.Template.Blazor.App.nuspec +++ b/templates/FurionBlazorAppTemplate/Furion.Template.Blazor.App.nuspec @@ -2,7 +2,7 @@ Furion.Template.Blazor.App - 4.9.4.7 + 4.9.4.10 基于 Furion 框架快速搭建 Blazor App 多层架构模板。 百小僧 diff --git a/templates/FurionBlazorAppTemplate/src/FurionBlazorApp.Core/FurionBlazorApp.Core.csproj b/templates/FurionBlazorAppTemplate/src/FurionBlazorApp.Core/FurionBlazorApp.Core.csproj index 0932ca490426d9973fb4925af44338140005c3f6..59a61ce441f6f23c0d9eed72979a1d25250a3a0c 100644 --- a/templates/FurionBlazorAppTemplate/src/FurionBlazorApp.Core/FurionBlazorApp.Core.csproj +++ b/templates/FurionBlazorAppTemplate/src/FurionBlazorApp.Core/FurionBlazorApp.Core.csproj @@ -11,8 +11,8 @@ - - + + diff --git a/templates/FurionBlazorTemplate/Furion.Template.Blazor.nuspec b/templates/FurionBlazorTemplate/Furion.Template.Blazor.nuspec index a03e22527e5f4902a49b86ca813822df60011f9b..031c06fcb6757eb80466094143b3a879cdf298a3 100644 --- a/templates/FurionBlazorTemplate/Furion.Template.Blazor.nuspec +++ b/templates/FurionBlazorTemplate/Furion.Template.Blazor.nuspec @@ -2,7 +2,7 @@ Furion.Template.Blazor - 4.9.4.7 + 4.9.4.10 基于 Furion 框架快速搭建 Blazor 多层架构模板。 百小僧 diff --git a/templates/FurionBlazorTemplate/src/FurionBlazor.Core/FurionBlazor.Core.csproj b/templates/FurionBlazorTemplate/src/FurionBlazor.Core/FurionBlazor.Core.csproj index fe14a07226b16fc81cb365837b72baf4a96b0b9e..374dd016a415614be600975a1908b3fc59570487 100644 --- a/templates/FurionBlazorTemplate/src/FurionBlazor.Core/FurionBlazor.Core.csproj +++ b/templates/FurionBlazorTemplate/src/FurionBlazor.Core/FurionBlazor.Core.csproj @@ -27,8 +27,8 @@ - - + + diff --git a/templates/FurionBlazorWithWebApiTemplate/Furion.Template.BlazorWithWebApi.nuspec b/templates/FurionBlazorWithWebApiTemplate/Furion.Template.BlazorWithWebApi.nuspec index 3c6ebc37f8ecb5229a8b8e533a2d64b866e5e3b2..e6b9ac203c2b78661c62c5193b5237e8e34c3f8a 100644 --- a/templates/FurionBlazorWithWebApiTemplate/Furion.Template.BlazorWithWebApi.nuspec +++ b/templates/FurionBlazorWithWebApiTemplate/Furion.Template.BlazorWithWebApi.nuspec @@ -2,7 +2,7 @@ Furion.Template.BlazorWithWebApi - 4.9.4.7 + 4.9.4.10 基于 Furion 框架快速搭建 Blazor和WebApi 多层架构模板。 百小僧 diff --git a/templates/FurionBlazorWithWebApiTemplate/src/FurionBlazorApi.Core/FurionBlazorApi.Core.csproj b/templates/FurionBlazorWithWebApiTemplate/src/FurionBlazorApi.Core/FurionBlazorApi.Core.csproj index 40666fe5de86e7b42edd95d87c01a8bb0b812512..92fff51b80da370e9349d512db4c22fa9b6e9f45 100644 --- a/templates/FurionBlazorWithWebApiTemplate/src/FurionBlazorApi.Core/FurionBlazorApi.Core.csproj +++ b/templates/FurionBlazorWithWebApiTemplate/src/FurionBlazorApi.Core/FurionBlazorApi.Core.csproj @@ -36,9 +36,9 @@ - - - + + + diff --git a/templates/FurionMvcTemplate/Furion.Template.Mvc.nuspec b/templates/FurionMvcTemplate/Furion.Template.Mvc.nuspec index fb0ce9c8b6c7cd29b00bf00fd2f1b3c00bd4b8b6..acfaf356b138ecdab37f06c4208c53120a83014a 100644 --- a/templates/FurionMvcTemplate/Furion.Template.Mvc.nuspec +++ b/templates/FurionMvcTemplate/Furion.Template.Mvc.nuspec @@ -2,7 +2,7 @@ Furion.Template.Mvc - 4.9.4.7 + 4.9.4.10 基于 Furion 框架快速搭建 Mvc 多层架构模板。 百小僧 diff --git a/templates/FurionMvcTemplate/src/FurionMvc.Core/FurionMvc.Core.csproj b/templates/FurionMvcTemplate/src/FurionMvc.Core/FurionMvc.Core.csproj index fe14a07226b16fc81cb365837b72baf4a96b0b9e..374dd016a415614be600975a1908b3fc59570487 100644 --- a/templates/FurionMvcTemplate/src/FurionMvc.Core/FurionMvc.Core.csproj +++ b/templates/FurionMvcTemplate/src/FurionMvc.Core/FurionMvc.Core.csproj @@ -27,8 +27,8 @@ - - + + diff --git a/templates/FurionRazorTemplate/Furion.Template.Razor.nuspec b/templates/FurionRazorTemplate/Furion.Template.Razor.nuspec index 1d92c07e1332ba6594e1a37ec5499b9e7a77e704..5245993e67409b2fb7e676e24e22c7be49093295 100644 --- a/templates/FurionRazorTemplate/Furion.Template.Razor.nuspec +++ b/templates/FurionRazorTemplate/Furion.Template.Razor.nuspec @@ -2,7 +2,7 @@ Furion.Template.Razor - 4.9.4.7 + 4.9.4.10 基于 Furion 框架快速搭建 Razor Pages 多层架构模板。 百小僧 diff --git a/templates/FurionRazorTemplate/src/FurionRazor.Core/FurionRazor.Core.csproj b/templates/FurionRazorTemplate/src/FurionRazor.Core/FurionRazor.Core.csproj index fe14a07226b16fc81cb365837b72baf4a96b0b9e..374dd016a415614be600975a1908b3fc59570487 100644 --- a/templates/FurionRazorTemplate/src/FurionRazor.Core/FurionRazor.Core.csproj +++ b/templates/FurionRazorTemplate/src/FurionRazor.Core/FurionRazor.Core.csproj @@ -27,8 +27,8 @@ - - + + diff --git a/templates/FurionRazorWithWebApiTemplate/Furion.Template.RazorWithWebApi.nuspec b/templates/FurionRazorWithWebApiTemplate/Furion.Template.RazorWithWebApi.nuspec index e0bc0ab00466b9cb048e7fffc7dfbc175da975c1..8dbf54c00be829d7aa27d89aaa261dfe883f3195 100644 --- a/templates/FurionRazorWithWebApiTemplate/Furion.Template.RazorWithWebApi.nuspec +++ b/templates/FurionRazorWithWebApiTemplate/Furion.Template.RazorWithWebApi.nuspec @@ -2,7 +2,7 @@ Furion.Template.RazorWithWebApi - 4.9.4.7 + 4.9.4.10 基于 Furion 框架快速搭建 RazorPages和WebApi 多层架构模板。 百小僧 diff --git a/templates/FurionRazorWithWebApiTemplate/src/FurionRazorApi.Core/FurionRazorApi.Core.csproj b/templates/FurionRazorWithWebApiTemplate/src/FurionRazorApi.Core/FurionRazorApi.Core.csproj index f31ebbc98a9b98289eeb3bfa17dc28574e84c064..a8004cfddaab4cb2a170e5052df1e255f7f95e77 100644 --- a/templates/FurionRazorWithWebApiTemplate/src/FurionRazorApi.Core/FurionRazorApi.Core.csproj +++ b/templates/FurionRazorWithWebApiTemplate/src/FurionRazorApi.Core/FurionRazorApi.Core.csproj @@ -36,9 +36,9 @@ - - - + + + diff --git a/templates/SqlSugarTemplates/FurionApiTemplate/Furion.Template.Api.nuspec b/templates/SqlSugarTemplates/FurionApiTemplate/Furion.Template.Api.nuspec index 71a36e24db6e7f89cfaf160c7ef9f21412d64d41..ecde60babde002382208d8cd7e92e46e76c2e0a1 100644 --- a/templates/SqlSugarTemplates/FurionApiTemplate/Furion.Template.Api.nuspec +++ b/templates/SqlSugarTemplates/FurionApiTemplate/Furion.Template.Api.nuspec @@ -2,7 +2,7 @@ Furion.SqlSugar.Template.Api - 4.9.4.7 + 4.9.4.10 基于 Furion 和 SqlSugar 框架快速搭建 Api 多层架构模板。 百小僧 diff --git a/templates/SqlSugarTemplates/FurionApiTemplate/src/FurionApi.Core/FurionApi.Core.csproj b/templates/SqlSugarTemplates/FurionApiTemplate/src/FurionApi.Core/FurionApi.Core.csproj index 58f17d3224095b03e8cc4588ba8d546868c6f86c..f556ea1ac7d11414933d74499070cb970d81d43b 100644 --- a/templates/SqlSugarTemplates/FurionApiTemplate/src/FurionApi.Core/FurionApi.Core.csproj +++ b/templates/SqlSugarTemplates/FurionApiTemplate/src/FurionApi.Core/FurionApi.Core.csproj @@ -36,9 +36,9 @@ - - - + + + diff --git a/templates/SqlSugarTemplates/FurionAppTemplate/Furion.Template.App.nuspec b/templates/SqlSugarTemplates/FurionAppTemplate/Furion.Template.App.nuspec index 3105651e415e969b17e095f754ca27a63b976a31..7f262cf6d587a0a8f7af9c914ecce152ecb17e83 100644 --- a/templates/SqlSugarTemplates/FurionAppTemplate/Furion.Template.App.nuspec +++ b/templates/SqlSugarTemplates/FurionAppTemplate/Furion.Template.App.nuspec @@ -2,7 +2,7 @@ Furion.SqlSugar.Template.App - 4.9.4.7 + 4.9.4.10 基于 Furion 和 SqlSugar 框架快速搭建 Mvc/Api 多层架构模板。 百小僧 diff --git a/templates/SqlSugarTemplates/FurionAppTemplate/src/FurionApp.Core/FurionApp.Core.csproj b/templates/SqlSugarTemplates/FurionAppTemplate/src/FurionApp.Core/FurionApp.Core.csproj index ac847e4138d0e0a465a0d82b379b3eddf6f58057..604600695efe40a417d12b7483d7086ac8d9d89a 100644 --- a/templates/SqlSugarTemplates/FurionAppTemplate/src/FurionApp.Core/FurionApp.Core.csproj +++ b/templates/SqlSugarTemplates/FurionAppTemplate/src/FurionApp.Core/FurionApp.Core.csproj @@ -36,9 +36,9 @@ - - - + + + diff --git a/templates/SqlSugarTemplates/FurionBlazorAppTemplate/Furion.SqlSugar.Template.Blazor.App.nuspec b/templates/SqlSugarTemplates/FurionBlazorAppTemplate/Furion.SqlSugar.Template.Blazor.App.nuspec index 706f8f03b3c14b8061a6e8a5b8cbafc9acb08b34..1d7664f5f956052512409856217cc782b0359050 100644 --- a/templates/SqlSugarTemplates/FurionBlazorAppTemplate/Furion.SqlSugar.Template.Blazor.App.nuspec +++ b/templates/SqlSugarTemplates/FurionBlazorAppTemplate/Furion.SqlSugar.Template.Blazor.App.nuspec @@ -2,7 +2,7 @@ Furion.SqlSugar.Template.Blazor.App - 4.9.4.7 + 4.9.4.10 基于 Furion 和 SqlSugar 框架快速搭建 Blazor App 多层架构模板。 百小僧 diff --git a/templates/SqlSugarTemplates/FurionBlazorAppTemplate/src/FurionBlazorApp.Core/FurionBlazorApp.Core.csproj b/templates/SqlSugarTemplates/FurionBlazorAppTemplate/src/FurionBlazorApp.Core/FurionBlazorApp.Core.csproj index 8c590a21118023093415f485754027f7a9013ed7..cedc5c263f55e5a4f6df65a1736b9c90d76bd5ef 100644 --- a/templates/SqlSugarTemplates/FurionBlazorAppTemplate/src/FurionBlazorApp.Core/FurionBlazorApp.Core.csproj +++ b/templates/SqlSugarTemplates/FurionBlazorAppTemplate/src/FurionBlazorApp.Core/FurionBlazorApp.Core.csproj @@ -11,9 +11,9 @@ - + - + diff --git a/templates/SqlSugarTemplates/FurionBlazorTemplate/Furion.Template.Blazor.nuspec b/templates/SqlSugarTemplates/FurionBlazorTemplate/Furion.Template.Blazor.nuspec index 87e703786ce34214e7ff4133c3d34aedce704c0a..533738991873273fac62d63d73eadfafaa487637 100644 --- a/templates/SqlSugarTemplates/FurionBlazorTemplate/Furion.Template.Blazor.nuspec +++ b/templates/SqlSugarTemplates/FurionBlazorTemplate/Furion.Template.Blazor.nuspec @@ -2,7 +2,7 @@ Furion.SqlSugar.Template.Blazor - 4.9.4.7 + 4.9.4.10 基于 Furion 和 SqlSugar 框架快速搭建 Blazor 多层架构模板。 百小僧 diff --git a/templates/SqlSugarTemplates/FurionBlazorTemplate/src/FurionBlazor.Core/FurionBlazor.Core.csproj b/templates/SqlSugarTemplates/FurionBlazorTemplate/src/FurionBlazor.Core/FurionBlazor.Core.csproj index 5a29494bb16962203147f5a3d79a8671ed307e90..1c02e21c96428da9a85894d23eabbf6431147709 100644 --- a/templates/SqlSugarTemplates/FurionBlazorTemplate/src/FurionBlazor.Core/FurionBlazor.Core.csproj +++ b/templates/SqlSugarTemplates/FurionBlazorTemplate/src/FurionBlazor.Core/FurionBlazor.Core.csproj @@ -27,8 +27,8 @@ - - + + diff --git a/templates/SqlSugarTemplates/FurionBlazorWithWebApiTemplate/Furion.Template.BlazorWithWebApi.nuspec b/templates/SqlSugarTemplates/FurionBlazorWithWebApiTemplate/Furion.Template.BlazorWithWebApi.nuspec index b5824bca1563dc94641029b0d5c5e155c573a886..0ffea114685924c866d2cf0509f08ce01daf375e 100644 --- a/templates/SqlSugarTemplates/FurionBlazorWithWebApiTemplate/Furion.Template.BlazorWithWebApi.nuspec +++ b/templates/SqlSugarTemplates/FurionBlazorWithWebApiTemplate/Furion.Template.BlazorWithWebApi.nuspec @@ -2,7 +2,7 @@ Furion.SqlSugar.Template.BlazorWithWebApi - 4.9.4.7 + 4.9.4.10 基于 Furion 和 SqlSugar 框架快速搭建 Blazor和WebApi 多层架构模板。 百小僧 diff --git a/templates/SqlSugarTemplates/FurionBlazorWithWebApiTemplate/src/FurionBlazorApi.Core/FurionBlazorApi.Core.csproj b/templates/SqlSugarTemplates/FurionBlazorWithWebApiTemplate/src/FurionBlazorApi.Core/FurionBlazorApi.Core.csproj index e159c25598a35c32939723cbeea7bcf6aa24227c..1c3ad7e2a0f0897b00035d89f31767225a3aaf99 100644 --- a/templates/SqlSugarTemplates/FurionBlazorWithWebApiTemplate/src/FurionBlazorApi.Core/FurionBlazorApi.Core.csproj +++ b/templates/SqlSugarTemplates/FurionBlazorWithWebApiTemplate/src/FurionBlazorApi.Core/FurionBlazorApi.Core.csproj @@ -36,9 +36,9 @@ - - - + + + diff --git a/templates/SqlSugarTemplates/FurionMvcTemplate/Furion.Template.Mvc.nuspec b/templates/SqlSugarTemplates/FurionMvcTemplate/Furion.Template.Mvc.nuspec index a5b19f3050d8c5ea99cd851a53b07f7eca6d9b49..6de680442f36d9d999c0c839575cd9a9865863f8 100644 --- a/templates/SqlSugarTemplates/FurionMvcTemplate/Furion.Template.Mvc.nuspec +++ b/templates/SqlSugarTemplates/FurionMvcTemplate/Furion.Template.Mvc.nuspec @@ -2,7 +2,7 @@ Furion.SqlSugar.Template.Mvc - 4.9.4.7 + 4.9.4.10 基于 Furion 和 SqlSugar 框架快速搭建 Mvc 多层架构模板。 百小僧 diff --git a/templates/SqlSugarTemplates/FurionMvcTemplate/src/FurionMvc.Core/FurionMvc.Core.csproj b/templates/SqlSugarTemplates/FurionMvcTemplate/src/FurionMvc.Core/FurionMvc.Core.csproj index 5a29494bb16962203147f5a3d79a8671ed307e90..1c02e21c96428da9a85894d23eabbf6431147709 100644 --- a/templates/SqlSugarTemplates/FurionMvcTemplate/src/FurionMvc.Core/FurionMvc.Core.csproj +++ b/templates/SqlSugarTemplates/FurionMvcTemplate/src/FurionMvc.Core/FurionMvc.Core.csproj @@ -27,8 +27,8 @@ - - + + diff --git a/templates/SqlSugarTemplates/FurionRazorTemplate/Furion.Template.Razor.nuspec b/templates/SqlSugarTemplates/FurionRazorTemplate/Furion.Template.Razor.nuspec index eb0d2a5a7545dd14b714250ec7e97a20dcf5c5a0..5e716d906ff5b277d0c12e924cc687c11b63d7bc 100644 --- a/templates/SqlSugarTemplates/FurionRazorTemplate/Furion.Template.Razor.nuspec +++ b/templates/SqlSugarTemplates/FurionRazorTemplate/Furion.Template.Razor.nuspec @@ -2,7 +2,7 @@ Furion.SqlSugar.Template.Razor - 4.9.4.7 + 4.9.4.10 基于 Furion 和 SqlSugar 框架快速搭建 Razor Pages 多层架构模板。 百小僧 diff --git a/templates/SqlSugarTemplates/FurionRazorTemplate/src/FurionRazor.Core/FurionRazor.Core.csproj b/templates/SqlSugarTemplates/FurionRazorTemplate/src/FurionRazor.Core/FurionRazor.Core.csproj index 5a29494bb16962203147f5a3d79a8671ed307e90..1c02e21c96428da9a85894d23eabbf6431147709 100644 --- a/templates/SqlSugarTemplates/FurionRazorTemplate/src/FurionRazor.Core/FurionRazor.Core.csproj +++ b/templates/SqlSugarTemplates/FurionRazorTemplate/src/FurionRazor.Core/FurionRazor.Core.csproj @@ -27,8 +27,8 @@ - - + + diff --git a/templates/SqlSugarTemplates/FurionRazorWithWebApiTemplate/Furion.Template.RazorWithWebApi.nuspec b/templates/SqlSugarTemplates/FurionRazorWithWebApiTemplate/Furion.Template.RazorWithWebApi.nuspec index 697d1e4ae1720f5d891b822f106c3fd178cc8ec5..d059b47ae4dd99401de3c9c0598bfd7298dac304 100644 --- a/templates/SqlSugarTemplates/FurionRazorWithWebApiTemplate/Furion.Template.RazorWithWebApi.nuspec +++ b/templates/SqlSugarTemplates/FurionRazorWithWebApiTemplate/Furion.Template.RazorWithWebApi.nuspec @@ -2,7 +2,7 @@ Furion.SqlSugar.Template.RazorWithWebApi - 4.9.4.7 + 4.9.4.10 基于 Furion 和 SqlSugar 框架快速搭建 RazorPages和WebApi 多层架构模板。 百小僧 diff --git a/templates/SqlSugarTemplates/FurionRazorWithWebApiTemplate/src/FurionRazorApi.Core/FurionRazorApi.Core.csproj b/templates/SqlSugarTemplates/FurionRazorWithWebApiTemplate/src/FurionRazorApi.Core/FurionRazorApi.Core.csproj index 4e926a579248a8edc44000a03caa14b4b614fa86..cdc50cfa5c6c7522852ac1225acc1e209e07d27b 100644 --- a/templates/SqlSugarTemplates/FurionRazorWithWebApiTemplate/src/FurionRazorApi.Core/FurionRazorApi.Core.csproj +++ b/templates/SqlSugarTemplates/FurionRazorWithWebApiTemplate/src/FurionRazorApi.Core/FurionRazorApi.Core.csproj @@ -36,9 +36,9 @@ - - - + + + diff --git a/tools/Furion.Tools/Directory.Build.props b/tools/Furion.Tools/Directory.Build.props index cf9d835799cc2b9f7b3bb5526d81bf42cbbfa2b7..3762ecf3c1a6577f5ca081de5e33396f2f21336a 100644 --- a/tools/Furion.Tools/Directory.Build.props +++ b/tools/Furion.Tools/Directory.Build.props @@ -1,7 +1,7 @@  net5.0;net6.0;net7.0;net8.0;net9.0 - 4.9.4.7 + 4.9.4.10 enable 百小僧 百签科技(广东)有限公司 diff --git a/tools/Furion.Tools/Furion.Tools/Furion.Tools.csproj b/tools/Furion.Tools/Furion.Tools/Furion.Tools.csproj index 5d4812fb1344e921089b05fe627482c7c487d47b..d26f8a15cbf265b6529fea93507bced496a92857 100644 --- a/tools/Furion.Tools/Furion.Tools/Furion.Tools.csproj +++ b/tools/Furion.Tools/Furion.Tools/Furion.Tools.csproj @@ -7,7 +7,7 @@ - + \ No newline at end of file diff --git a/tools/cli.ps1 b/tools/cli.ps1 index a44ffa18087138f7476e161a71da64892a733941..c24214a58a62455dd49e8545e292d3ec5402b5f9 100644 --- a/tools/cli.ps1 +++ b/tools/cli.ps1 @@ -24,7 +24,7 @@ Param( #[string]$UseDatabaseNames ) -$FurTools = "Furion Tools v4.9.4.7"; +$FurTools = "Furion Tools v4.9.4.10"; # 输出信息 $copyright = @"