Fluent Validation 未在用于本地化的 ResourceManager class 上找到属性
Fluent Validation not finding properties on a ResourceManager class used for localization
我在 NancyFX 应用程序中使用 Fluent Validation。
使用 nuget 包安装:Nancy.Validation.FluentValidation
我写了自己的 属性 验证器 class 并完成了错误消息的本地化,可以通过 Strings.invalid_ip
属性.
所有其他本地化在我的项目中工作正常,Fluent Validation 除外,它在 Strings
资源管理器 class.
上找不到任何属性
namespace LmsNg.Validators
{
public class IsIpAddressValidator : PropertyValidator
{
public IsIpAddressValidator()
: base(() => Strings.invalid_ip)
//also tried another overload, but the same exception happens
//base("invalid_ip", typeof(Strings))
{
}
protected override bool IsValid(PropertyValidatorContext context)
{
var ip = context.PropertyValue as string;
IPAddress address;
if (ip != null && IPAddress.TryParse(ip, out address))
{
return true;
}
return false;
}
}
}
一旦 IsIpAddressValidator
被使用并且验证 returns false 我得到一个异常。
'System.InvalidOperationException' 类型的异常发生在 FluentValidation.dll 中,但未在用户代码中处理
System.InvalidOperationExcepction: Could not find a property named 'invalid_ip' on type 'LmsNg.Resources.Strings'.
堆栈跟踪:
at FluentValidation.Resources.StaticResourceAccessorBuilder.GetResourceAccessor(Type resourceType, String resourceName) in c:\Projects\FluentValidation\src\FluentValidation\Resources\IResourceAccessorBuilder.cs:line 29
at FluentValidation.Resources.LocalizedStringSource..ctor(Type resourceType, String resourceName, IResourceAccessorBuilder resourceAccessorBuilder) in c:\Projects\FluentValidation\src\FluentValidation\Resources\LocalizedStringSource.cs:line 42
at FluentValidation.Resources.LocalizedStringSource.CreateFromExpression(Expression`1 expression, IResourceAccessorBuilder resourceProviderSelectionStrategy) in c:\Projects\FluentValidation\src\FluentValidation\Resources\LocalizedStringSource.cs:line 66
at FluentValidation.Validators.PropertyValidator..ctor(Expression`1 errorMessageResourceSelector) in c:\Projects\FluentValidation\src\FluentValidation\Validators\PropertyValidator.cs:line 54
at LmsNg.Validators.IsIpAddressValidator..ctor() in d:\WorkSpace\VisualStudio\LmsNg\LmsNg\Validators\IsIpAddressValidator.cs:line 16
at LmsNg.Modules.Networks.NetworkValidator..ctor() in d:\WorkSpace\VisualStudio\LmsNg\LmsNg\Modules\Networks\NetworkValidator.cs:line 16
at lambda_method(Closure , Object[] )
at Nancy.TinyIoc.TinyIoCContainer.ConstructType(Type requestedType, Type implementationType, ConstructorInfo constructor, NamedParameterOverloads parameters, ResolveOptions options)
我的 .resx
文件的 Build Action
不正确吗?我尝试了几个组合,但仍然发生相同的错误。
谢谢。
因此,默认情况下 .resx
文件生成 .cs
文件,其中包含 classes/fields 上的 internal
修饰符。
这意味着这些不能从不同的程序集访问,在这种情况下 FluentValidation.dll
。
更改属性窗格中每个 .resx
文件的 Custom Tool
来自:ResXFileCodeGenerator
至:PublicResXFileCodeGenerator
帮助解决了这个问题,因为现在生成的代码包含一个 public
修饰符而不是 internal
。
我在 NancyFX 应用程序中使用 Fluent Validation。
使用 nuget 包安装:Nancy.Validation.FluentValidation
我写了自己的 属性 验证器 class 并完成了错误消息的本地化,可以通过 Strings.invalid_ip
属性.
所有其他本地化在我的项目中工作正常,Fluent Validation 除外,它在 Strings
资源管理器 class.
namespace LmsNg.Validators
{
public class IsIpAddressValidator : PropertyValidator
{
public IsIpAddressValidator()
: base(() => Strings.invalid_ip)
//also tried another overload, but the same exception happens
//base("invalid_ip", typeof(Strings))
{
}
protected override bool IsValid(PropertyValidatorContext context)
{
var ip = context.PropertyValue as string;
IPAddress address;
if (ip != null && IPAddress.TryParse(ip, out address))
{
return true;
}
return false;
}
}
}
一旦 IsIpAddressValidator
被使用并且验证 returns false 我得到一个异常。
'System.InvalidOperationException' 类型的异常发生在 FluentValidation.dll 中,但未在用户代码中处理
System.InvalidOperationExcepction: Could not find a property named 'invalid_ip' on type 'LmsNg.Resources.Strings'.
堆栈跟踪:
at FluentValidation.Resources.StaticResourceAccessorBuilder.GetResourceAccessor(Type resourceType, String resourceName) in c:\Projects\FluentValidation\src\FluentValidation\Resources\IResourceAccessorBuilder.cs:line 29
at FluentValidation.Resources.LocalizedStringSource..ctor(Type resourceType, String resourceName, IResourceAccessorBuilder resourceAccessorBuilder) in c:\Projects\FluentValidation\src\FluentValidation\Resources\LocalizedStringSource.cs:line 42
at FluentValidation.Resources.LocalizedStringSource.CreateFromExpression(Expression`1 expression, IResourceAccessorBuilder resourceProviderSelectionStrategy) in c:\Projects\FluentValidation\src\FluentValidation\Resources\LocalizedStringSource.cs:line 66
at FluentValidation.Validators.PropertyValidator..ctor(Expression`1 errorMessageResourceSelector) in c:\Projects\FluentValidation\src\FluentValidation\Validators\PropertyValidator.cs:line 54
at LmsNg.Validators.IsIpAddressValidator..ctor() in d:\WorkSpace\VisualStudio\LmsNg\LmsNg\Validators\IsIpAddressValidator.cs:line 16
at LmsNg.Modules.Networks.NetworkValidator..ctor() in d:\WorkSpace\VisualStudio\LmsNg\LmsNg\Modules\Networks\NetworkValidator.cs:line 16
at lambda_method(Closure , Object[] )
at Nancy.TinyIoc.TinyIoCContainer.ConstructType(Type requestedType, Type implementationType, ConstructorInfo constructor, NamedParameterOverloads parameters, ResolveOptions options)
我的 .resx
文件的 Build Action
不正确吗?我尝试了几个组合,但仍然发生相同的错误。
谢谢。
因此,默认情况下 .resx
文件生成 .cs
文件,其中包含 classes/fields 上的 internal
修饰符。
这意味着这些不能从不同的程序集访问,在这种情况下 FluentValidation.dll
。
更改属性窗格中每个 .resx
文件的 Custom Tool
来自:ResXFileCodeGenerator
至:PublicResXFileCodeGenerator
帮助解决了这个问题,因为现在生成的代码包含一个 public
修饰符而不是 internal
。