Compare commits

...

4 Commits

Author SHA1 Message Date
MonkSoul
a41e1d869f 😊 发布 v4.9.7.217 版本,改进 HTTP 远程请求和包含 v4.9.8 新模块代码 2025-12-03 02:12:29 +08:00
MonkSoul
954761c5d5 😊 调整 定时任务 DateTimeTrigger 作业触发器名称为 AtTrigger 2025-12-03 01:34:02 +08:00
MonkSoul
6270b63479 😊 改进 新数据验证模块拓展 2025-12-03 01:13:42 +08:00
MonkSoul
75402c2c21 😊 新增 新数据验证模块自定义验证器拓展 2025-12-03 00:44:08 +08:00
64 changed files with 549 additions and 256 deletions

View File

@@ -13,7 +13,8 @@ body:
label:
description: 使 Furion
options:
- 4.9.7.216 ()
- 4.9.7.217 ()
- 4.9.7.216
- 4.9.7.215
- 4.9.7.214
- 4.9.7.213

View File

@@ -2,7 +2,7 @@
<PropertyGroup>
<LangVersion>preview</LangVersion>
<TargetFrameworks>net8.0;net9.0;net10.0</TargetFrameworks>
<Version>4.9.7.216</Version>
<Version>4.9.7.217</Version>
<ImplicitUsings>enable</ImplicitUsings>
<!--<Nullable>enable</Nullable>-->
<Authors>百小僧</Authors>

View File

@@ -17,7 +17,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="MongoDB.Driver" Version="3.5.1" />
<PackageReference Include="MongoDB.Driver" Version="3.5.2" />
</ItemGroup>
</Project>

View File

@@ -35,4 +35,20 @@
<None Include="readme.txt" pack="true" PackagePath="." />
</ItemGroup>
<ItemGroup>
<Compile Update="V5_Experience\Validation\Resources\ValidationMessages.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>ValidationMessages.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="V5_Experience\Validation\Resources\ValidationMessages.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>ValidationMessages.Designer.cs</LastGenOutput>
<CustomToolNamespace>Furion.Validation.Resources</CustomToolNamespace>
</EmbeddedResource>
</ItemGroup>
</Project>

View File

@@ -29,14 +29,14 @@ namespace Furion.Schedule;
/// 指定具体时间触发的一次性作业触发器特性
/// </summary>
[SuppressSniffer, AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public class DateTimeAttribute : TriggerAttribute
public class AtAttribute : TriggerAttribute
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="triggerTime">触发时间</param>
public DateTimeAttribute(string triggerTime)
: base(typeof(DateTimeTrigger)
public AtAttribute(string triggerTime)
: base(typeof(AtTrigger)
, triggerTime)
{
}

View File

@@ -77,9 +77,9 @@ public sealed partial class TriggerBuilder : Trigger
/// </summary>
/// <param name="triggerTime">触发时间</param>
/// <returns><see cref="TriggerBuilder"/></returns>
public static TriggerBuilder DateTime(DateTime triggerTime)
public static TriggerBuilder At(DateTime triggerTime)
{
return DateTime(triggerTime.ToString());
return At(triggerTime.ToString());
}
/// <summary>
@@ -87,9 +87,9 @@ public sealed partial class TriggerBuilder : Trigger
/// </summary>
/// <param name="triggerTime">触发时间</param>
/// <returns><see cref="TriggerBuilder"/></returns>
public static TriggerBuilder DateTime(string triggerTime)
public static TriggerBuilder At(string triggerTime)
{
return Create<DateTimeTrigger>(triggerTime);
return Create<AtTrigger>(triggerTime);
}
/// <summary>

View File

@@ -28,13 +28,13 @@ namespace Furion.Schedule;
/// <summary>
/// 指定具体时间触发的一次性作业触发器
/// </summary>
public class DateTimeTrigger : Trigger
public class AtTrigger : Trigger
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="triggerTime">触发时间</param>
public DateTimeTrigger(string triggerTime)
public AtTrigger(string triggerTime)
{
TriggerTime = Convert.ToDateTime(triggerTime);
}

View File

@@ -356,9 +356,9 @@ public static class Triggers
/// </summary>
/// <param name="triggerTime">触发时间</param>
/// <returns><see cref="TriggerBuilder"/></returns>
public static TriggerBuilder DateTime(DateTime triggerTime)
public static TriggerBuilder At(DateTime triggerTime)
{
return TriggerBuilder.DateTime(triggerTime);
return TriggerBuilder.At(triggerTime);
}
/// <summary>
@@ -366,8 +366,8 @@ public static class Triggers
/// </summary>
/// <param name="triggerTime">触发时间</param>
/// <returns><see cref="TriggerBuilder"/></returns>
public static TriggerBuilder DateTime(string triggerTime)
public static TriggerBuilder At(string triggerTime)
{
return TriggerBuilder.DateTime(triggerTime);
return TriggerBuilder.At(triggerTime);
}
}

View File

@@ -525,6 +525,21 @@ public abstract class FluentValidatorBuilder<T, TSelf> where TSelf
public TSelf MustUnless(Func<T?, bool> condition) =>
AddValidator(new MustUnlessValidator<T>(condition));
/// <summary>
/// 添加自定义条件不成立时委托验证器
/// </summary>
/// <param name="condition">条件委托</param>
/// <returns>
/// <typeparamref name="TSelf" />
/// </returns>
public TSelf MustUnlessUseServices(Func<T?, IServiceProvider?, bool> condition)
{
// 空检查
ArgumentNullException.ThrowIfNull(condition);
return AddValidator(new MustUnlessValidator<T>(u => condition(u, _serviceProvider)));
}
/// <summary>
/// 添加自定义条件成立时委托验证器
/// </summary>
@@ -534,6 +549,21 @@ public abstract class FluentValidatorBuilder<T, TSelf> where TSelf
/// </returns>
public TSelf Must(Func<T?, bool> condition) => AddValidator(new MustValidator<T>(condition));
/// <summary>
/// 添加自定义条件成立时委托验证器
/// </summary>
/// <param name="condition">条件委托</param>
/// <returns>
/// <typeparamref name="TSelf" />
/// </returns>
public TSelf MustUseServices(Func<T?, IServiceProvider?, bool> condition)
{
// 空检查
ArgumentNullException.ThrowIfNull(condition);
return AddValidator(new MustValidator<T>(u => condition(u, _serviceProvider)));
}
/// <summary>
/// 添加非空白字符串验证器
/// </summary>
@@ -601,6 +631,21 @@ public abstract class FluentValidatorBuilder<T, TSelf> where TSelf
/// </returns>
public TSelf Predicate(Func<T?, bool> condition) => AddValidator(new PredicateValidator<T>(condition));
/// <summary>
/// 添加自定义条件成立时委托验证器
/// </summary>
/// <param name="condition">条件委托</param>
/// <returns>
/// <typeparamref name="TSelf" />
/// </returns>
public TSelf PredicateUseServices(Func<T?, IServiceProvider?, bool> condition)
{
// 空检查
ArgumentNullException.ThrowIfNull(condition);
return AddValidator(new PredicateValidator<T>(u => condition(u, _serviceProvider)));
}
/// <summary>
/// 添加指定数值范围约束验证器
/// </summary>

View File

@@ -0,0 +1,40 @@
// ------------------------------------------------------------------------
// 版权信息
// 版权归百小僧及百签科技(广东)有限公司所有。
// 所有权利保留。
// 官方网站https://baiqian.com
//
// 许可证信息
// Furion 项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。
// 许可证的完整文本可以在源代码树根目录中的 LICENSE-APACHE 和 LICENSE-MIT 文件中找到。
// 官方网站https://furion.net
//
// 使用条款
// 使用本代码应遵守相关法律法规和许可证的要求。
//
// 免责声明
// 对于因使用本代码而产生的任何直接、间接、偶然、特殊或后果性损害,我们不承担任何责任。
//
// 其他重要信息
// Furion 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。
// 有关 Furion 项目的其他详细信息,请参阅位于源代码树根目录中的 COPYRIGHT 和 DISCLAIMER 文件。
//
// 更多信息
// 请访问 https://gitee.com/dotnetchina/Furion 获取更多关于 Furion 项目的许可证和版权信息。
// ------------------------------------------------------------------------
using System.ComponentModel.DataAnnotations;
namespace Furion.Validation;
/// <summary>
/// 数据验证模块常量配置
/// </summary>
internal static class Constants
{
/// <summary>
/// 规则集列表键
/// </summary>
/// <remarks>被用于从 <see cref="ValidationContext" /> 的 <c>Items</c> 属性中读取。</remarks>
internal const string RULESETS_KEY = "__VALIDATION_RULESETS__";
}

View File

@@ -59,13 +59,12 @@ public static class ValidationExtensions
/// <see cref="ValidationContext" />
/// </param>
/// <param name="configure">自定义配置委托</param>
/// <param name="ruleSets">规则集列表</param>
/// <typeparam name="T">对象类型</typeparam>
/// <returns>
/// <see cref="IEnumerable{T}" />
/// </returns>
public static IEnumerable<ValidationResult> ValidateObject<T>(this ValidationContext validationContext,
Action<ObjectValidator<T>>? configure = null, params string?[] ruleSets)
Action<ObjectValidator<T>>? configure = null)
where T : class
{
// 空检查
@@ -81,6 +80,13 @@ public static class ValidationExtensions
// 调用自定义配置委托
configure?.Invoke(objectValidator);
// 尝试从 Items 中解析规则集列表
string?[]? ruleSets = null;
if (validationContext.Items.TryGetValue(Constants.RULESETS_KEY, out var ruleSetsObj))
{
ruleSets = ruleSetsObj as string?[] ?? (ruleSetsObj is string ruleSet ? [ruleSet] : null);
}
// 获取对象验证结果集合
return objectValidator.GetValidationResults((T)validationContext.ObjectInstance, ruleSets) ?? [];
}

View File

@@ -530,6 +530,4 @@ public class ObjectValidator<T> : IObjectValidator<T>, IDisposable
_annotationValidator.ValidateAllProperties = Options.ValidateAllProperties;
}
}
// TODO: 这里还未提供解析服务的处理,是提供 GetService<T> 还是 ServiceProvider
}

View File

@@ -176,6 +176,22 @@ public sealed partial class PropertyValidator<T, TProperty> where T : class
[new Func<TProperty?, bool>(u => condition(instance, u))]);
}
/// <summary>
/// 添加自定义条件不成立时委托验证器
/// </summary>
/// <param name="condition">条件委托</param>
/// <returns>
/// <see cref="PropertyValidator{T,TProperty}" />
/// </returns>
public PropertyValidator<T, TProperty> MustUnlessUseServices(Func<T, TProperty?, IServiceProvider?, bool> condition)
{
// 空检查
ArgumentNullException.ThrowIfNull(condition);
return ValidatorProxy<MustUnlessValidator<TProperty>>(instance =>
[new Func<TProperty?, bool>(u => condition(instance, u, _serviceProvider))]);
}
/// <summary>
/// 添加自定义条件成立时委托验证器
/// </summary>
@@ -192,6 +208,22 @@ public sealed partial class PropertyValidator<T, TProperty> where T : class
[new Func<TProperty?, bool>(u => condition(instance, u))]);
}
/// <summary>
/// 添加自定义条件成立时委托验证器
/// </summary>
/// <param name="condition">条件委托</param>
/// <returns>
/// <see cref="PropertyValidator{T,TProperty}" />
/// </returns>
public PropertyValidator<T, TProperty> MustUseServices(Func<T, TProperty?, IServiceProvider?, bool> condition)
{
// 空检查
ArgumentNullException.ThrowIfNull(condition);
return ValidatorProxy<MustValidator<TProperty>>(instance =>
[new Func<TProperty?, bool>(u => condition(instance, u, _serviceProvider))]);
}
/// <summary>
/// 添加不相等验证器
/// </summary>
@@ -223,6 +255,22 @@ public sealed partial class PropertyValidator<T, TProperty> where T : class
[new Func<TProperty?, bool>(u => condition(instance, u))]);
}
/// <summary>
/// 添加自定义条件成立时委托验证器
/// </summary>
/// <param name="condition">条件委托</param>
/// <returns>
/// <see cref="PropertyValidator{T,TProperty}" />
/// </returns>
public PropertyValidator<T, TProperty> PredicateUseServices(Func<T, TProperty?, IServiceProvider?, bool> condition)
{
// 空检查
ArgumentNullException.ThrowIfNull(condition);
return ValidatorProxy<PredicateValidator<TProperty>>(instance =>
[new Func<TProperty?, bool>(u => condition(instance, u, _serviceProvider))]);
}
/// <summary>
/// 添加验证器代理
/// </summary>
@@ -330,12 +378,4 @@ public sealed partial class PropertyValidator<T, TProperty> where T : class
/// </returns>
public ObjectValidator<T> RuleSet(string?[]? ruleSets, Action<ObjectValidator<T>> setAction) =>
_objectValidator.RuleSet(ruleSets, setAction);
// TODO: 考虑支持解析服务的的拓展,比如先解析服务,满足某种添加再操作,另外是否考虑数据验证中,比如是否大于某个值,而这个值是通过服务解析出来的!
// TODO: Func<T, bool> 改为 Func<ValidationContext, bool>,因为里面可能还会解析服务
// TODO: IServiceProvider 还没用上,还有 ValidationContent 也是
// TODO: MustUseServices解析服务的验证器
}

View File

@@ -1,9 +1,10 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
@@ -12,13 +13,13 @@ namespace Furion.Validation.Resources {
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class ValidationMessages {
@@ -32,13 +33,13 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Furion.Validation.Resources.ValidationMessages", typeof(ValidationMessages).Assembly);
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Furion.V5_Experience.Validation.Resources.ValidationMessages", typeof(ValidationMessages).Assembly);
resourceMan = temp;
}
return resourceMan;
@@ -46,8 +47,8 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
@@ -60,7 +61,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid age..
/// 查找类似 The field {0} is not a valid age. 的本地化字符串。
/// </summary>
internal static string AgeValidator_ValidationError {
get {
@@ -69,7 +70,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be at least 18 years old..
/// 查找类似 The field {0} must be at least 18 years old. 的本地化字符串。
/// </summary>
internal static string AgeValidator_ValidationError_IsAdultOnly {
get {
@@ -78,7 +79,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The {0} field does not equal any of the values specified in AllowedValuesValidator..
/// 查找类似 The {0} field does not equal any of the values specified in AllowedValuesValidator. 的本地化字符串。
/// </summary>
internal static string AllowedValuesValidator_ValidationError {
get {
@@ -87,7 +88,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid bank card number..
/// 查找类似 The field {0} is not a valid bank card number. 的本地化字符串。
/// </summary>
internal static string BankCardValidator_ValidationError {
get {
@@ -96,7 +97,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The {0} field is not a valid Base64 encoding..
/// 查找类似 The {0} field is not a valid Base64 encoding. 的本地化字符串。
/// </summary>
internal static string Base64StringValidator_ValidationError {
get {
@@ -105,7 +106,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid Chinese name..
/// 查找类似 The field {0} is not a valid Chinese name. 的本地化字符串。
/// </summary>
internal static string ChineseNameValidator_ValidationError {
get {
@@ -114,7 +115,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} contains invalid Chinese characters..
/// 查找类似 The field {0} contains invalid Chinese characters. 的本地化字符串。
/// </summary>
internal static string ChineseValidator_ValidationError {
get {
@@ -123,7 +124,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid color value..
/// 查找类似 The field {0} is not a valid color value. 的本地化字符串。
/// </summary>
internal static string ColorValueValidator_ValidationError {
get {
@@ -132,7 +133,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a valid date..
/// 查找类似 The field {0} must be a valid date. 的本地化字符串。
/// </summary>
internal static string DateOnlyValidator_ValidationError {
get {
@@ -141,7 +142,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a valid date in the following format(s): {1}..
/// 查找类似 The field {0} must be a valid date in the following format(s): {1}. 的本地化字符串。
/// </summary>
internal static string DateOnlyValidator_ValidationError_Formats {
get {
@@ -150,7 +151,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a valid datetime..
/// 查找类似 The field {0} must be a valid datetime. 的本地化字符串。
/// </summary>
internal static string DateTimeValidator_ValidationError {
get {
@@ -159,7 +160,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a valid datetime in the following format(s): {1}..
/// 查找类似 The field {0} must be a valid datetime in the following format(s): {1}. 的本地化字符串。
/// </summary>
internal static string DateTimeValidator_ValidationError_Formats {
get {
@@ -168,7 +169,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must not have more than &apos;{1}&apos; decimal places..
/// 查找类似 The field {0} must not have more than &apos;{1}&apos; decimal places. 的本地化字符串。
/// </summary>
internal static string DecimalPlacesValidator_ValidationError {
get {
@@ -177,7 +178,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The {0} field equals one of the values specified in DeniedValuesValidator..
/// 查找类似 The {0} field equals one of the values specified in DeniedValuesValidator. 的本地化字符串。
/// </summary>
internal static string DeniedValuesValidator_ValidationError {
get {
@@ -186,7 +187,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid domain name..
/// 查找类似 The field {0} is not a valid domain name. 的本地化字符串。
/// </summary>
internal static string DomainValidator_ValidationError {
get {
@@ -195,7 +196,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The {0} field is not a valid e-mail address..
/// 查找类似 The {0} field is not a valid e-mail address. 的本地化字符串。
/// </summary>
internal static string EmailAddressValidator_ValidationError {
get {
@@ -204,7 +205,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} does not end with the string &apos;{1}&apos;..
/// 查找类似 The field {0} does not end with the string &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string EndsWithValidator_ValidationError {
get {
@@ -213,7 +214,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be equal to &apos;{1}&apos;..
/// 查找类似 The field {0} must be equal to &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string EqualToValidator_ValidationError {
get {
@@ -222,7 +223,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be greater than or equal to &apos;{1}&apos;..
/// 查找类似 The field {0} must be greater than or equal to &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string GreaterThanOrEqualToValidator_ValidationError {
get {
@@ -231,7 +232,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be greater than &apos;{1}&apos;..
/// 查找类似 The field {0} must be greater than &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string GreaterThanValidator_ValidationError {
get {
@@ -240,7 +241,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid Id card number format..
/// 查找类似 The field {0} is not a valid Id card number format. 的本地化字符串。
/// </summary>
internal static string IDCardValidator_ValidationError {
get {
@@ -249,7 +250,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The {0} field must be a valid JSON object or array..
/// 查找类似 The {0} field must be a valid JSON object or array. 的本地化字符串。
/// </summary>
internal static string JsonValidator_ValidationError {
get {
@@ -258,7 +259,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a string or collection type with a minimum length of &apos;{1}&apos; and maximum length of &apos;{2}&apos;..
/// 查找类似 The field {0} must be a string or collection type with a minimum length of &apos;{1}&apos; and maximum length of &apos;{2}&apos;. 的本地化字符串。
/// </summary>
internal static string LengthValidator_ValidationError {
get {
@@ -267,7 +268,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be less than or equal to &apos;{1}&apos;..
/// 查找类似 The field {0} must be less than or equal to &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string LessThanOrEqualToValidator_ValidationError {
get {
@@ -276,7 +277,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be less than &apos;{1}&apos;..
/// 查找类似 The field {0} must be less than &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string LessThanValidator_ValidationError {
get {
@@ -285,7 +286,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a string or array type with a maximum length of &apos;{1}&apos;..
/// 查找类似 The field {0} must be a string or array type with a maximum length of &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string MaxLengthValidator_ValidationError {
get {
@@ -294,7 +295,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be less than or equal to &apos;{1}&apos;..
/// 查找类似 The field {0} must be less than or equal to &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string MaxValidator_ValidationError {
get {
@@ -303,7 +304,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid MD5 string..
/// 查找类似 The field {0} is not a valid MD5 string. 的本地化字符串。
/// </summary>
internal static string MD5StringValidator_ValidationError {
get {
@@ -312,7 +313,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a string or array type with a minimum length of &apos;{1}&apos;..
/// 查找类似 The field {0} must be a string or array type with a minimum length of &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string MinLengthValidator_ValidationError {
get {
@@ -321,7 +322,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be greater than or equal to &apos;{1}&apos;..
/// 查找类似 The field {0} must be greater than or equal to &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string MinValidator_ValidationError {
get {
@@ -330,7 +331,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} cannot be empty or whitespace..
/// 查找类似 The field {0} cannot be empty or whitespace. 的本地化字符串。
/// </summary>
internal static string NotBlankValidator_ValidationError {
get {
@@ -339,7 +340,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} does not allow empty values..
/// 查找类似 The field {0} does not allow empty values. 的本地化字符串。
/// </summary>
internal static string NotEmptyValidator_ValidationError {
get {
@@ -348,7 +349,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} cannot be equal to &apos;{1}&apos;..
/// 查找类似 The field {0} cannot be equal to &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string NotEqualToValidator_ValidationError {
get {
@@ -357,7 +358,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} does not allow null values..
/// 查找类似 The field {0} does not allow null values. 的本地化字符串。
/// </summary>
internal static string NotNullValidator_ValidationError {
get {
@@ -366,7 +367,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} has an invalid password format. It must be 8 to 64 characters long and contain at least one letter and one number..
/// 查找类似 The field {0} has an invalid password format. It must be 8 to 64 characters long and contain at least one letter and one number. 的本地化字符串。
/// </summary>
internal static string PasswordValidator_ValidationError {
get {
@@ -375,7 +376,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} has an invalid password format. It must be 12 to 64 characters long and contain uppercase letters, lowercase letters, numbers, and special characters..
/// 查找类似 The field {0} has an invalid password format. It must be 12 to 64 characters long and contain uppercase letters, lowercase letters, numbers, and special characters. 的本地化字符串。
/// </summary>
internal static string PasswordValidator_ValidationError_Strong {
get {
@@ -384,7 +385,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid phone number..
/// 查找类似 The field {0} is not a valid phone number. 的本地化字符串。
/// </summary>
internal static string PhoneNumberValidator_ValidationError {
get {
@@ -393,7 +394,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid postal code..
/// 查找类似 The field {0} is not a valid postal code. 的本地化字符串。
/// </summary>
internal static string PostalCodeValidator_ValidationError {
get {
@@ -402,7 +403,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be between &apos;{1}&apos; and &apos;{2}&apos;..
/// 查找类似 The field {0} must be between &apos;{1}&apos; and &apos;{2}&apos;. 的本地化字符串。
/// </summary>
internal static string RangeValidator_ValidationError {
get {
@@ -411,7 +412,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be between &apos;{1}&apos; and &apos;{2}&apos; exclusive..
/// 查找类似 The field {0} must be between &apos;{1}&apos; and &apos;{2}&apos; exclusive. 的本地化字符串。
/// </summary>
internal static string RangeValidator_ValidationError_MaxExclusive {
get {
@@ -420,7 +421,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be between &apos;{1}&apos; exclusive and &apos;{2}&apos;..
/// 查找类似 The field {0} must be between &apos;{1}&apos; exclusive and &apos;{2}&apos;. 的本地化字符串。
/// </summary>
internal static string RangeValidator_ValidationError_MinExclusive {
get {
@@ -429,7 +430,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be between &apos;{1}&apos; exclusive and &apos;{2}&apos; exclusive..
/// 查找类似 The field {0} must be between &apos;{1}&apos; exclusive and &apos;{2}&apos; exclusive. 的本地化字符串。
/// </summary>
internal static string RangeValidator_ValidationError_MinExclusive_MaxExclusive {
get {
@@ -438,7 +439,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must match the regular expression &apos;{1}&apos;..
/// 查找类似 The field {0} must match the regular expression &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string RegularExpressionValidator_ValidationError {
get {
@@ -447,7 +448,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The {0} field is required..
/// 查找类似 The {0} field is required. 的本地化字符串。
/// </summary>
internal static string RequiredValidator_ValidationError {
get {
@@ -456,7 +457,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} only allows a single item..
/// 查找类似 The field {0} only allows a single item. 的本地化字符串。
/// </summary>
internal static string SingleValidator_ValidationError {
get {
@@ -465,7 +466,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} does not start with the string &apos;{1}&apos;..
/// 查找类似 The field {0} does not start with the string &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string StartsWithValidator_ValidationError {
get {
@@ -474,7 +475,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} does not contain the string &apos;{1}&apos;..
/// 查找类似 The field {0} does not contain the string &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string StringContainsValidator_ValidationError {
get {
@@ -483,7 +484,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a string with a maximum length of &apos;{1}&apos;..
/// 查找类似 The field {0} must be a string with a maximum length of &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string StringLengthValidator_ValidationError {
get {
@@ -492,7 +493,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a string with a minimum length of &apos;{2}&apos; and a maximum length of &apos;{1}&apos;..
/// 查找类似 The field {0} must be a string with a minimum length of &apos;{2}&apos; and a maximum length of &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string StringLengthValidator_ValidationError_MinimumLength {
get {
@@ -501,7 +502,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid telephone..
/// 查找类似 The field {0} is not a valid telephone. 的本地化字符串。
/// </summary>
internal static string TelephoneValidator_ValidationError {
get {
@@ -510,7 +511,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a valid time..
/// 查找类似 The field {0} must be a valid time. 的本地化字符串。
/// </summary>
internal static string TimeOnlyValidator_ValidationError {
get {
@@ -519,7 +520,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a valid time in the following format(s): {1}..
/// 查找类似 The field {0} must be a valid time in the following format(s): {1}. 的本地化字符串。
/// </summary>
internal static string TimeOnlyValidator_ValidationError_Formats {
get {
@@ -528,7 +529,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The {0} field is not a valid fully-qualified http, https URL..
/// 查找类似 The {0} field is not a valid fully-qualified http, https URL. 的本地化字符串。
/// </summary>
internal static string UrlValidator_ValidationError {
get {
@@ -537,7 +538,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The {0} field is not a valid fully-qualified http, https, or ftp URL..
/// 查找类似 The {0} field is not a valid fully-qualified http, https, or ftp URL. 的本地化字符串。
/// </summary>
internal static string UrlValidator_ValidationError_SupportsFtp {
get {
@@ -546,7 +547,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid username..
/// 查找类似 The field {0} is not a valid username. 的本地化字符串。
/// </summary>
internal static string UserNameValidator_ValidationError {
get {
@@ -555,7 +556,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is invalid..
/// 查找类似 The field {0} is invalid. 的本地化字符串。
/// </summary>
internal static string ValidatorBase_ValidationError {
get {

View File

@@ -35,4 +35,20 @@
<None Include="readme.txt" pack="true" PackagePath="." />
</ItemGroup>
<ItemGroup>
<Compile Update="V5_Experience\Validation\Resources\ValidationMessages.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>ValidationMessages.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="V5_Experience\Validation\Resources\ValidationMessages.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>ValidationMessages.Designer.cs</LastGenOutput>
<CustomToolNamespace>Furion.Validation.Resources</CustomToolNamespace>
</EmbeddedResource>
</ItemGroup>
</Project>

View File

@@ -29,14 +29,14 @@ namespace Furion.Schedule;
/// 指定具体时间触发的一次性作业触发器特性
/// </summary>
[SuppressSniffer, AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public class DateTimeAttribute : TriggerAttribute
public class AtAttribute : TriggerAttribute
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="triggerTime">触发时间</param>
public DateTimeAttribute(string triggerTime)
: base(typeof(DateTimeTrigger)
public AtAttribute(string triggerTime)
: base(typeof(AtTrigger)
, triggerTime)
{
}

View File

@@ -77,9 +77,9 @@ public sealed partial class TriggerBuilder : Trigger
/// </summary>
/// <param name="triggerTime">触发时间</param>
/// <returns><see cref="TriggerBuilder"/></returns>
public static TriggerBuilder DateTime(DateTime triggerTime)
public static TriggerBuilder At(DateTime triggerTime)
{
return DateTime(triggerTime.ToString());
return At(triggerTime.ToString());
}
/// <summary>
@@ -87,9 +87,9 @@ public sealed partial class TriggerBuilder : Trigger
/// </summary>
/// <param name="triggerTime">触发时间</param>
/// <returns><see cref="TriggerBuilder"/></returns>
public static TriggerBuilder DateTime(string triggerTime)
public static TriggerBuilder At(string triggerTime)
{
return Create<DateTimeTrigger>(triggerTime);
return Create<AtTrigger>(triggerTime);
}
/// <summary>

View File

@@ -28,13 +28,13 @@ namespace Furion.Schedule;
/// <summary>
/// 指定具体时间触发的一次性作业触发器
/// </summary>
public class DateTimeTrigger : Trigger
public class AtTrigger : Trigger
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="triggerTime">触发时间</param>
public DateTimeTrigger(string triggerTime)
public AtTrigger(string triggerTime)
{
TriggerTime = Convert.ToDateTime(triggerTime);
}

View File

@@ -356,9 +356,9 @@ public static class Triggers
/// </summary>
/// <param name="triggerTime">触发时间</param>
/// <returns><see cref="TriggerBuilder"/></returns>
public static TriggerBuilder DateTime(DateTime triggerTime)
public static TriggerBuilder At(DateTime triggerTime)
{
return TriggerBuilder.DateTime(triggerTime);
return TriggerBuilder.At(triggerTime);
}
/// <summary>
@@ -366,8 +366,8 @@ public static class Triggers
/// </summary>
/// <param name="triggerTime">触发时间</param>
/// <returns><see cref="TriggerBuilder"/></returns>
public static TriggerBuilder DateTime(string triggerTime)
public static TriggerBuilder At(string triggerTime)
{
return TriggerBuilder.DateTime(triggerTime);
return TriggerBuilder.At(triggerTime);
}
}

View File

@@ -525,6 +525,21 @@ public abstract class FluentValidatorBuilder<T, TSelf> where TSelf
public TSelf MustUnless(Func<T?, bool> condition) =>
AddValidator(new MustUnlessValidator<T>(condition));
/// <summary>
/// 添加自定义条件不成立时委托验证器
/// </summary>
/// <param name="condition">条件委托</param>
/// <returns>
/// <typeparamref name="TSelf" />
/// </returns>
public TSelf MustUnlessUseServices(Func<T?, IServiceProvider?, bool> condition)
{
// 空检查
ArgumentNullException.ThrowIfNull(condition);
return AddValidator(new MustUnlessValidator<T>(u => condition(u, _serviceProvider)));
}
/// <summary>
/// 添加自定义条件成立时委托验证器
/// </summary>
@@ -534,6 +549,21 @@ public abstract class FluentValidatorBuilder<T, TSelf> where TSelf
/// </returns>
public TSelf Must(Func<T?, bool> condition) => AddValidator(new MustValidator<T>(condition));
/// <summary>
/// 添加自定义条件成立时委托验证器
/// </summary>
/// <param name="condition">条件委托</param>
/// <returns>
/// <typeparamref name="TSelf" />
/// </returns>
public TSelf MustUseServices(Func<T?, IServiceProvider?, bool> condition)
{
// 空检查
ArgumentNullException.ThrowIfNull(condition);
return AddValidator(new MustValidator<T>(u => condition(u, _serviceProvider)));
}
/// <summary>
/// 添加非空白字符串验证器
/// </summary>
@@ -601,6 +631,21 @@ public abstract class FluentValidatorBuilder<T, TSelf> where TSelf
/// </returns>
public TSelf Predicate(Func<T?, bool> condition) => AddValidator(new PredicateValidator<T>(condition));
/// <summary>
/// 添加自定义条件成立时委托验证器
/// </summary>
/// <param name="condition">条件委托</param>
/// <returns>
/// <typeparamref name="TSelf" />
/// </returns>
public TSelf PredicateUseServices(Func<T?, IServiceProvider?, bool> condition)
{
// 空检查
ArgumentNullException.ThrowIfNull(condition);
return AddValidator(new PredicateValidator<T>(u => condition(u, _serviceProvider)));
}
/// <summary>
/// 添加指定数值范围约束验证器
/// </summary>

View File

@@ -0,0 +1,40 @@
// ------------------------------------------------------------------------
// 版权信息
// 版权归百小僧及百签科技(广东)有限公司所有。
// 所有权利保留。
// 官方网站https://baiqian.com
//
// 许可证信息
// Furion 项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。
// 许可证的完整文本可以在源代码树根目录中的 LICENSE-APACHE 和 LICENSE-MIT 文件中找到。
// 官方网站https://furion.net
//
// 使用条款
// 使用本代码应遵守相关法律法规和许可证的要求。
//
// 免责声明
// 对于因使用本代码而产生的任何直接、间接、偶然、特殊或后果性损害,我们不承担任何责任。
//
// 其他重要信息
// Furion 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。
// 有关 Furion 项目的其他详细信息,请参阅位于源代码树根目录中的 COPYRIGHT 和 DISCLAIMER 文件。
//
// 更多信息
// 请访问 https://gitee.com/dotnetchina/Furion 获取更多关于 Furion 项目的许可证和版权信息。
// ------------------------------------------------------------------------
using System.ComponentModel.DataAnnotations;
namespace Furion.Validation;
/// <summary>
/// 数据验证模块常量配置
/// </summary>
internal static class Constants
{
/// <summary>
/// 规则集列表键
/// </summary>
/// <remarks>被用于从 <see cref="ValidationContext" /> 的 <c>Items</c> 属性中读取。</remarks>
internal const string RULESETS_KEY = "__VALIDATION_RULESETS__";
}

View File

@@ -59,13 +59,12 @@ public static class ValidationExtensions
/// <see cref="ValidationContext" />
/// </param>
/// <param name="configure">自定义配置委托</param>
/// <param name="ruleSets">规则集列表</param>
/// <typeparam name="T">对象类型</typeparam>
/// <returns>
/// <see cref="IEnumerable{T}" />
/// </returns>
public static IEnumerable<ValidationResult> ValidateObject<T>(this ValidationContext validationContext,
Action<ObjectValidator<T>>? configure = null, params string?[] ruleSets)
Action<ObjectValidator<T>>? configure = null)
where T : class
{
// 空检查
@@ -81,6 +80,13 @@ public static class ValidationExtensions
// 调用自定义配置委托
configure?.Invoke(objectValidator);
// 尝试从 Items 中解析规则集列表
string?[]? ruleSets = null;
if (validationContext.Items.TryGetValue(Constants.RULESETS_KEY, out var ruleSetsObj))
{
ruleSets = ruleSetsObj as string?[] ?? (ruleSetsObj is string ruleSet ? [ruleSet] : null);
}
// 获取对象验证结果集合
return objectValidator.GetValidationResults((T)validationContext.ObjectInstance, ruleSets) ?? [];
}

View File

@@ -530,6 +530,4 @@ public class ObjectValidator<T> : IObjectValidator<T>, IDisposable
_annotationValidator.ValidateAllProperties = Options.ValidateAllProperties;
}
}
// TODO: 这里还未提供解析服务的处理,是提供 GetService<T> 还是 ServiceProvider
}

View File

@@ -176,6 +176,22 @@ public sealed partial class PropertyValidator<T, TProperty> where T : class
[new Func<TProperty?, bool>(u => condition(instance, u))]);
}
/// <summary>
/// 添加自定义条件不成立时委托验证器
/// </summary>
/// <param name="condition">条件委托</param>
/// <returns>
/// <see cref="PropertyValidator{T,TProperty}" />
/// </returns>
public PropertyValidator<T, TProperty> MustUnlessUseServices(Func<T, TProperty?, IServiceProvider?, bool> condition)
{
// 空检查
ArgumentNullException.ThrowIfNull(condition);
return ValidatorProxy<MustUnlessValidator<TProperty>>(instance =>
[new Func<TProperty?, bool>(u => condition(instance, u, _serviceProvider))]);
}
/// <summary>
/// 添加自定义条件成立时委托验证器
/// </summary>
@@ -192,6 +208,22 @@ public sealed partial class PropertyValidator<T, TProperty> where T : class
[new Func<TProperty?, bool>(u => condition(instance, u))]);
}
/// <summary>
/// 添加自定义条件成立时委托验证器
/// </summary>
/// <param name="condition">条件委托</param>
/// <returns>
/// <see cref="PropertyValidator{T,TProperty}" />
/// </returns>
public PropertyValidator<T, TProperty> MustUseServices(Func<T, TProperty?, IServiceProvider?, bool> condition)
{
// 空检查
ArgumentNullException.ThrowIfNull(condition);
return ValidatorProxy<MustValidator<TProperty>>(instance =>
[new Func<TProperty?, bool>(u => condition(instance, u, _serviceProvider))]);
}
/// <summary>
/// 添加不相等验证器
/// </summary>
@@ -223,6 +255,22 @@ public sealed partial class PropertyValidator<T, TProperty> where T : class
[new Func<TProperty?, bool>(u => condition(instance, u))]);
}
/// <summary>
/// 添加自定义条件成立时委托验证器
/// </summary>
/// <param name="condition">条件委托</param>
/// <returns>
/// <see cref="PropertyValidator{T,TProperty}" />
/// </returns>
public PropertyValidator<T, TProperty> PredicateUseServices(Func<T, TProperty?, IServiceProvider?, bool> condition)
{
// 空检查
ArgumentNullException.ThrowIfNull(condition);
return ValidatorProxy<PredicateValidator<TProperty>>(instance =>
[new Func<TProperty?, bool>(u => condition(instance, u, _serviceProvider))]);
}
/// <summary>
/// 添加验证器代理
/// </summary>
@@ -330,12 +378,4 @@ public sealed partial class PropertyValidator<T, TProperty> where T : class
/// </returns>
public ObjectValidator<T> RuleSet(string?[]? ruleSets, Action<ObjectValidator<T>> setAction) =>
_objectValidator.RuleSet(ruleSets, setAction);
// TODO: 考虑支持解析服务的的拓展,比如先解析服务,满足某种添加再操作,另外是否考虑数据验证中,比如是否大于某个值,而这个值是通过服务解析出来的!
// TODO: Func<T, bool> 改为 Func<ValidationContext, bool>,因为里面可能还会解析服务
// TODO: IServiceProvider 还没用上,还有 ValidationContent 也是
// TODO: MustUseServices解析服务的验证器
}

View File

@@ -1,9 +1,10 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
@@ -12,13 +13,13 @@ namespace Furion.Validation.Resources {
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class ValidationMessages {
@@ -32,13 +33,13 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Furion.Validation.Resources.ValidationMessages", typeof(ValidationMessages).Assembly);
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Furion.V5_Experience.Validation.Resources.ValidationMessages", typeof(ValidationMessages).Assembly);
resourceMan = temp;
}
return resourceMan;
@@ -46,8 +47,8 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
@@ -60,7 +61,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid age..
/// 查找类似 The field {0} is not a valid age. 的本地化字符串。
/// </summary>
internal static string AgeValidator_ValidationError {
get {
@@ -69,7 +70,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be at least 18 years old..
/// 查找类似 The field {0} must be at least 18 years old. 的本地化字符串。
/// </summary>
internal static string AgeValidator_ValidationError_IsAdultOnly {
get {
@@ -78,7 +79,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The {0} field does not equal any of the values specified in AllowedValuesValidator..
/// 查找类似 The {0} field does not equal any of the values specified in AllowedValuesValidator. 的本地化字符串。
/// </summary>
internal static string AllowedValuesValidator_ValidationError {
get {
@@ -87,7 +88,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid bank card number..
/// 查找类似 The field {0} is not a valid bank card number. 的本地化字符串。
/// </summary>
internal static string BankCardValidator_ValidationError {
get {
@@ -96,7 +97,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The {0} field is not a valid Base64 encoding..
/// 查找类似 The {0} field is not a valid Base64 encoding. 的本地化字符串。
/// </summary>
internal static string Base64StringValidator_ValidationError {
get {
@@ -105,7 +106,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid Chinese name..
/// 查找类似 The field {0} is not a valid Chinese name. 的本地化字符串。
/// </summary>
internal static string ChineseNameValidator_ValidationError {
get {
@@ -114,7 +115,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} contains invalid Chinese characters..
/// 查找类似 The field {0} contains invalid Chinese characters. 的本地化字符串。
/// </summary>
internal static string ChineseValidator_ValidationError {
get {
@@ -123,7 +124,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid color value..
/// 查找类似 The field {0} is not a valid color value. 的本地化字符串。
/// </summary>
internal static string ColorValueValidator_ValidationError {
get {
@@ -132,7 +133,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a valid date..
/// 查找类似 The field {0} must be a valid date. 的本地化字符串。
/// </summary>
internal static string DateOnlyValidator_ValidationError {
get {
@@ -141,7 +142,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a valid date in the following format(s): {1}..
/// 查找类似 The field {0} must be a valid date in the following format(s): {1}. 的本地化字符串。
/// </summary>
internal static string DateOnlyValidator_ValidationError_Formats {
get {
@@ -150,7 +151,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a valid datetime..
/// 查找类似 The field {0} must be a valid datetime. 的本地化字符串。
/// </summary>
internal static string DateTimeValidator_ValidationError {
get {
@@ -159,7 +160,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a valid datetime in the following format(s): {1}..
/// 查找类似 The field {0} must be a valid datetime in the following format(s): {1}. 的本地化字符串。
/// </summary>
internal static string DateTimeValidator_ValidationError_Formats {
get {
@@ -168,7 +169,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must not have more than &apos;{1}&apos; decimal places..
/// 查找类似 The field {0} must not have more than &apos;{1}&apos; decimal places. 的本地化字符串。
/// </summary>
internal static string DecimalPlacesValidator_ValidationError {
get {
@@ -177,7 +178,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The {0} field equals one of the values specified in DeniedValuesValidator..
/// 查找类似 The {0} field equals one of the values specified in DeniedValuesValidator. 的本地化字符串。
/// </summary>
internal static string DeniedValuesValidator_ValidationError {
get {
@@ -186,7 +187,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid domain name..
/// 查找类似 The field {0} is not a valid domain name. 的本地化字符串。
/// </summary>
internal static string DomainValidator_ValidationError {
get {
@@ -195,7 +196,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The {0} field is not a valid e-mail address..
/// 查找类似 The {0} field is not a valid e-mail address. 的本地化字符串。
/// </summary>
internal static string EmailAddressValidator_ValidationError {
get {
@@ -204,7 +205,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} does not end with the string &apos;{1}&apos;..
/// 查找类似 The field {0} does not end with the string &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string EndsWithValidator_ValidationError {
get {
@@ -213,7 +214,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be equal to &apos;{1}&apos;..
/// 查找类似 The field {0} must be equal to &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string EqualToValidator_ValidationError {
get {
@@ -222,7 +223,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be greater than or equal to &apos;{1}&apos;..
/// 查找类似 The field {0} must be greater than or equal to &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string GreaterThanOrEqualToValidator_ValidationError {
get {
@@ -231,7 +232,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be greater than &apos;{1}&apos;..
/// 查找类似 The field {0} must be greater than &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string GreaterThanValidator_ValidationError {
get {
@@ -240,7 +241,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid Id card number format..
/// 查找类似 The field {0} is not a valid Id card number format. 的本地化字符串。
/// </summary>
internal static string IDCardValidator_ValidationError {
get {
@@ -249,7 +250,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The {0} field must be a valid JSON object or array..
/// 查找类似 The {0} field must be a valid JSON object or array. 的本地化字符串。
/// </summary>
internal static string JsonValidator_ValidationError {
get {
@@ -258,7 +259,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a string or collection type with a minimum length of &apos;{1}&apos; and maximum length of &apos;{2}&apos;..
/// 查找类似 The field {0} must be a string or collection type with a minimum length of &apos;{1}&apos; and maximum length of &apos;{2}&apos;. 的本地化字符串。
/// </summary>
internal static string LengthValidator_ValidationError {
get {
@@ -267,7 +268,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be less than or equal to &apos;{1}&apos;..
/// 查找类似 The field {0} must be less than or equal to &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string LessThanOrEqualToValidator_ValidationError {
get {
@@ -276,7 +277,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be less than &apos;{1}&apos;..
/// 查找类似 The field {0} must be less than &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string LessThanValidator_ValidationError {
get {
@@ -285,7 +286,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a string or array type with a maximum length of &apos;{1}&apos;..
/// 查找类似 The field {0} must be a string or array type with a maximum length of &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string MaxLengthValidator_ValidationError {
get {
@@ -294,7 +295,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be less than or equal to &apos;{1}&apos;..
/// 查找类似 The field {0} must be less than or equal to &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string MaxValidator_ValidationError {
get {
@@ -303,7 +304,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid MD5 string..
/// 查找类似 The field {0} is not a valid MD5 string. 的本地化字符串。
/// </summary>
internal static string MD5StringValidator_ValidationError {
get {
@@ -312,7 +313,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a string or array type with a minimum length of &apos;{1}&apos;..
/// 查找类似 The field {0} must be a string or array type with a minimum length of &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string MinLengthValidator_ValidationError {
get {
@@ -321,7 +322,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be greater than or equal to &apos;{1}&apos;..
/// 查找类似 The field {0} must be greater than or equal to &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string MinValidator_ValidationError {
get {
@@ -330,7 +331,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} cannot be empty or whitespace..
/// 查找类似 The field {0} cannot be empty or whitespace. 的本地化字符串。
/// </summary>
internal static string NotBlankValidator_ValidationError {
get {
@@ -339,7 +340,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} does not allow empty values..
/// 查找类似 The field {0} does not allow empty values. 的本地化字符串。
/// </summary>
internal static string NotEmptyValidator_ValidationError {
get {
@@ -348,7 +349,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} cannot be equal to &apos;{1}&apos;..
/// 查找类似 The field {0} cannot be equal to &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string NotEqualToValidator_ValidationError {
get {
@@ -357,7 +358,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} does not allow null values..
/// 查找类似 The field {0} does not allow null values. 的本地化字符串。
/// </summary>
internal static string NotNullValidator_ValidationError {
get {
@@ -366,7 +367,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} has an invalid password format. It must be 8 to 64 characters long and contain at least one letter and one number..
/// 查找类似 The field {0} has an invalid password format. It must be 8 to 64 characters long and contain at least one letter and one number. 的本地化字符串。
/// </summary>
internal static string PasswordValidator_ValidationError {
get {
@@ -375,7 +376,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} has an invalid password format. It must be 12 to 64 characters long and contain uppercase letters, lowercase letters, numbers, and special characters..
/// 查找类似 The field {0} has an invalid password format. It must be 12 to 64 characters long and contain uppercase letters, lowercase letters, numbers, and special characters. 的本地化字符串。
/// </summary>
internal static string PasswordValidator_ValidationError_Strong {
get {
@@ -384,7 +385,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid phone number..
/// 查找类似 The field {0} is not a valid phone number. 的本地化字符串。
/// </summary>
internal static string PhoneNumberValidator_ValidationError {
get {
@@ -393,7 +394,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid postal code..
/// 查找类似 The field {0} is not a valid postal code. 的本地化字符串。
/// </summary>
internal static string PostalCodeValidator_ValidationError {
get {
@@ -402,7 +403,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be between &apos;{1}&apos; and &apos;{2}&apos;..
/// 查找类似 The field {0} must be between &apos;{1}&apos; and &apos;{2}&apos;. 的本地化字符串。
/// </summary>
internal static string RangeValidator_ValidationError {
get {
@@ -411,7 +412,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be between &apos;{1}&apos; and &apos;{2}&apos; exclusive..
/// 查找类似 The field {0} must be between &apos;{1}&apos; and &apos;{2}&apos; exclusive. 的本地化字符串。
/// </summary>
internal static string RangeValidator_ValidationError_MaxExclusive {
get {
@@ -420,7 +421,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be between &apos;{1}&apos; exclusive and &apos;{2}&apos;..
/// 查找类似 The field {0} must be between &apos;{1}&apos; exclusive and &apos;{2}&apos;. 的本地化字符串。
/// </summary>
internal static string RangeValidator_ValidationError_MinExclusive {
get {
@@ -429,7 +430,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be between &apos;{1}&apos; exclusive and &apos;{2}&apos; exclusive..
/// 查找类似 The field {0} must be between &apos;{1}&apos; exclusive and &apos;{2}&apos; exclusive. 的本地化字符串。
/// </summary>
internal static string RangeValidator_ValidationError_MinExclusive_MaxExclusive {
get {
@@ -438,7 +439,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must match the regular expression &apos;{1}&apos;..
/// 查找类似 The field {0} must match the regular expression &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string RegularExpressionValidator_ValidationError {
get {
@@ -447,7 +448,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The {0} field is required..
/// 查找类似 The {0} field is required. 的本地化字符串。
/// </summary>
internal static string RequiredValidator_ValidationError {
get {
@@ -456,7 +457,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} only allows a single item..
/// 查找类似 The field {0} only allows a single item. 的本地化字符串。
/// </summary>
internal static string SingleValidator_ValidationError {
get {
@@ -465,7 +466,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} does not start with the string &apos;{1}&apos;..
/// 查找类似 The field {0} does not start with the string &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string StartsWithValidator_ValidationError {
get {
@@ -474,7 +475,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} does not contain the string &apos;{1}&apos;..
/// 查找类似 The field {0} does not contain the string &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string StringContainsValidator_ValidationError {
get {
@@ -483,7 +484,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a string with a maximum length of &apos;{1}&apos;..
/// 查找类似 The field {0} must be a string with a maximum length of &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string StringLengthValidator_ValidationError {
get {
@@ -492,7 +493,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a string with a minimum length of &apos;{2}&apos; and a maximum length of &apos;{1}&apos;..
/// 查找类似 The field {0} must be a string with a minimum length of &apos;{2}&apos; and a maximum length of &apos;{1}&apos;. 的本地化字符串。
/// </summary>
internal static string StringLengthValidator_ValidationError_MinimumLength {
get {
@@ -501,7 +502,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid telephone..
/// 查找类似 The field {0} is not a valid telephone. 的本地化字符串。
/// </summary>
internal static string TelephoneValidator_ValidationError {
get {
@@ -510,7 +511,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a valid time..
/// 查找类似 The field {0} must be a valid time. 的本地化字符串。
/// </summary>
internal static string TimeOnlyValidator_ValidationError {
get {
@@ -519,7 +520,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} must be a valid time in the following format(s): {1}..
/// 查找类似 The field {0} must be a valid time in the following format(s): {1}. 的本地化字符串。
/// </summary>
internal static string TimeOnlyValidator_ValidationError_Formats {
get {
@@ -528,7 +529,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The {0} field is not a valid fully-qualified http, https URL..
/// 查找类似 The {0} field is not a valid fully-qualified http, https URL. 的本地化字符串。
/// </summary>
internal static string UrlValidator_ValidationError {
get {
@@ -537,7 +538,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The {0} field is not a valid fully-qualified http, https, or ftp URL..
/// 查找类似 The {0} field is not a valid fully-qualified http, https, or ftp URL. 的本地化字符串。
/// </summary>
internal static string UrlValidator_ValidationError_SupportsFtp {
get {
@@ -546,7 +547,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is not a valid username..
/// 查找类似 The field {0} is not a valid username. 的本地化字符串。
/// </summary>
internal static string UserNameValidator_ValidationError {
get {
@@ -555,7 +556,7 @@ namespace Furion.Validation.Resources {
}
/// <summary>
/// Looks up a localized string similar to The field {0} is invalid..
/// 查找类似 The field {0} is invalid. 的本地化字符串。
/// </summary>
internal static string ValidatorBase_ValidationError {
get {

View File

@@ -4,7 +4,7 @@ using Microsoft.Extensions.Logging;
namespace Furion.Application;
//[Period(10000)]
[DateTime("2024-12-31 23:59:59")]
[At("2024-12-31 23:59:59")]
public class TestJob : IJob, IDisposable
{
private readonly ILogger<TestJob> _logger;

View File

@@ -11,8 +11,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.217" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.217" />
</ItemGroup>
<ItemGroup>

View File

@@ -141,7 +141,7 @@ public sealed class Startup : AppStartup
options.AddJob<TestJob>(builder => builder.SetTemporary(), Triggers.PeriodMinutes(1));
options.AddJob<TestJob>(u => u.SetIncludeAnnotations(true), Triggers.DateTime("2025-11-26 14:58:20"));
options.AddJob<TestJob>(u => u.SetIncludeAnnotations(true), Triggers.At("2025-11-26 14:58:20"));
});
// 新版本任务队列

View File

@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31521.260
# Visual Studio Version 18
VisualStudioVersion = 18.3.11222.16 d18.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Furion.Application", "Furion.Application\Furion.Application.csproj", "{AB699EE9-43A8-46F2-A855-04A26DE63372}"
EndProject

View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Furion.Template.Api</id>
<version>4.9.7.216</version>
<version>4.9.7.217</version>
<description>基于 Furion 框架快速搭建 Api 多层架构模板。</description>
<authors>百小僧</authors>
<packageTypes>

View File

@@ -12,9 +12,9 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Furion" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.216" />
<PackageReference Include="Furion" Version="4.9.7.217" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.217" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.217" />
</ItemGroup>
</Project>

View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Furion.Template.App</id>
<version>4.9.7.216</version>
<version>4.9.7.217</version>
<description>基于 Furion 框架快速搭建 Mvc/Api 多层架构模板。</description>
<authors>百小僧</authors>
<packageTypes>

View File

@@ -12,9 +12,9 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Furion" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.216" />
<PackageReference Include="Furion" Version="4.9.7.217" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.217" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.217" />
</ItemGroup>
</Project>

View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Furion.Template.Blazor.App</id>
<version>4.9.7.216</version>
<version>4.9.7.217</version>
<description>基于 Furion 框架快速搭建 Blazor App 多层架构模板。</description>
<authors>百小僧</authors>
<packageTypes>

View File

@@ -7,8 +7,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Furion" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.216" />
<PackageReference Include="Furion" Version="4.9.7.217" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.217" />
</ItemGroup>
</Project>

View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Furion.Template.Blazor</id>
<version>4.9.7.216</version>
<version>4.9.7.217</version>
<description>基于 Furion 框架快速搭建 Blazor 多层架构模板。</description>
<authors>百小僧</authors>
<packageTypes>

View File

@@ -7,8 +7,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Furion" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.216" />
<PackageReference Include="Furion" Version="4.9.7.217" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.217" />
</ItemGroup>
</Project>

View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Furion.Template.BlazorWithWebApi</id>
<version>4.9.7.216</version>
<version>4.9.7.217</version>
<description>基于 Furion 框架快速搭建 Blazor和WebApi 多层架构模板。</description>
<authors>百小僧</authors>
<packageTypes>

View File

@@ -12,9 +12,9 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Furion" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.216" />
<PackageReference Include="Furion" Version="4.9.7.217" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.217" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.217" />
</ItemGroup>
</Project>

View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Furion.Template.Mvc</id>
<version>4.9.7.216</version>
<version>4.9.7.217</version>
<description>基于 Furion 框架快速搭建 Mvc 多层架构模板。</description>
<authors>百小僧</authors>
<packageTypes>

View File

@@ -7,8 +7,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Furion" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.216" />
<PackageReference Include="Furion" Version="4.9.7.217" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.217" />
</ItemGroup>
</Project>

View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Furion.Template.Razor</id>
<version>4.9.7.216</version>
<version>4.9.7.217</version>
<description>基于 Furion 框架快速搭建 Razor Pages 多层架构模板。</description>
<authors>百小僧</authors>
<packageTypes>

View File

@@ -7,8 +7,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Furion" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.216" />
<PackageReference Include="Furion" Version="4.9.7.217" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.217" />
</ItemGroup>
</Project>

View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Furion.Template.RazorWithWebApi</id>
<version>4.9.7.216</version>
<version>4.9.7.217</version>
<description>基于 Furion 框架快速搭建 RazorPages和WebApi 多层架构模板。</description>
<authors>百小僧</authors>
<packageTypes>

View File

@@ -12,9 +12,9 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Furion" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.216" />
<PackageReference Include="Furion" Version="4.9.7.217" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.217" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.217" />
</ItemGroup>
</Project>

View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Furion.SqlSugar.Template.Api</id>
<version>4.9.7.216</version>
<version>4.9.7.217</version>
<description>基于 Furion 和 SqlSugar 框架快速搭建 Api 多层架构模板。</description>
<authors>百小僧</authors>
<packageTypes>

View File

@@ -12,9 +12,9 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.216" />
<PackageReference Include="Furion.Pure" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.217" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.217" />
<PackageReference Include="Furion.Pure" Version="4.9.7.217" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.210" />
</ItemGroup>

View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Furion.SqlSugar.Template.App</id>
<version>4.9.7.216</version>
<version>4.9.7.217</version>
<description>基于 Furion 和 SqlSugar 框架快速搭建 Mvc/Api 多层架构模板。</description>
<authors>百小僧</authors>
<packageTypes>

View File

@@ -12,9 +12,9 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.216" />
<PackageReference Include="Furion.Pure" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.217" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.217" />
<PackageReference Include="Furion.Pure" Version="4.9.7.217" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.210" />
</ItemGroup>

View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Furion.SqlSugar.Template.Blazor.App</id>
<version>4.9.7.216</version>
<version>4.9.7.217</version>
<description>基于 Furion 和 SqlSugar 框架快速搭建 Blazor App 多层架构模板。</description>
<authors>百小僧</authors>
<packageTypes>

View File

@@ -7,9 +7,9 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Furion.Pure" Version="4.9.7.216" />
<PackageReference Include="Furion.Pure" Version="4.9.7.217" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.210" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.217" />
</ItemGroup>
</Project>

View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Furion.SqlSugar.Template.Blazor</id>
<version>4.9.7.216</version>
<version>4.9.7.217</version>
<description>基于 Furion 和 SqlSugar 框架快速搭建 Blazor 多层架构模板。</description>
<authors>百小僧</authors>
<packageTypes>

View File

@@ -7,8 +7,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.216" />
<PackageReference Include="Furion.Pure" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.217" />
<PackageReference Include="Furion.Pure" Version="4.9.7.217" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.210" />
</ItemGroup>

View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Furion.SqlSugar.Template.BlazorWithWebApi</id>
<version>4.9.7.216</version>
<version>4.9.7.217</version>
<description>基于 Furion 和 SqlSugar 框架快速搭建 Blazor和WebApi 多层架构模板。</description>
<authors>百小僧</authors>
<packageTypes>

View File

@@ -12,9 +12,9 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.216" />
<PackageReference Include="Furion.Pure" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.217" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.217" />
<PackageReference Include="Furion.Pure" Version="4.9.7.217" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.210" />
</ItemGroup>

View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Furion.SqlSugar.Template.Mvc</id>
<version>4.9.7.216</version>
<version>4.9.7.217</version>
<description>基于 Furion 和 SqlSugar 框架快速搭建 Mvc 多层架构模板。</description>
<authors>百小僧</authors>
<packageTypes>

View File

@@ -7,8 +7,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.216" />
<PackageReference Include="Furion.Pure" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.217" />
<PackageReference Include="Furion.Pure" Version="4.9.7.217" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.210" />
</ItemGroup>

View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Furion.SqlSugar.Template.Razor</id>
<version>4.9.7.216</version>
<version>4.9.7.217</version>
<description>基于 Furion 和 SqlSugar 框架快速搭建 Razor Pages 多层架构模板。</description>
<authors>百小僧</authors>
<packageTypes>

View File

@@ -7,8 +7,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.216" />
<PackageReference Include="Furion.Pure" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.217" />
<PackageReference Include="Furion.Pure" Version="4.9.7.217" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.210" />
</ItemGroup>

View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Furion.SqlSugar.Template.RazorWithWebApi</id>
<version>4.9.7.216</version>
<version>4.9.7.217</version>
<description>基于 Furion 和 SqlSugar 框架快速搭建 RazorPages和WebApi 多层架构模板。</description>
<authors>百小僧</authors>
<packageTypes>

View File

@@ -12,9 +12,9 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.216" />
<PackageReference Include="Furion.Pure" Version="4.9.7.216" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.217" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.217" />
<PackageReference Include="Furion.Pure" Version="4.9.7.217" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.210" />
</ItemGroup>

View File

@@ -2,7 +2,7 @@
<PropertyGroup>
<LangVersion>preview</LangVersion>
<TargetFrameworks>net8.0;net9.0;net10.0</TargetFrameworks>
<Version>4.9.7.216</Version>
<Version>4.9.7.217</Version>
<ImplicitUsings>enable</ImplicitUsings>
<!--<Nullable>enable</Nullable>-->
<Authors>百小僧</Authors>

View File

@@ -7,7 +7,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Furion.Tools.CommandLine" Version="4.9.7.216" />
<PackageReference Include="Furion.Tools.CommandLine" Version="4.9.7.217" />
</ItemGroup>
</Project>

View File

@@ -96,7 +96,7 @@ function AddXmlCommentsToProperties($content, $commentsDictionary) {
return $modifiedContent
}
$FurTools = "Furion Tools v4.9.7.216";
$FurTools = "Furion Tools v4.9.7.217";
#
$copyright = @"