.NET6 Blazor资源文件异常:GlobalResources无静态属性‘RequiredField’
问题成因分析
1. 资源类及属性的访问权限不足
尽管你将资源文件的自定义工具设为PublicResXFileCodeGenerator,但仍需确认生成的GlobalResources类及对应属性的访问修饰符:
- 打开V2.Resources项目中自动生成的
GlobalResources.Designer.cs文件,检查类是否为public class GlobalResources,同时RequiredField属性是否为public static string。 - 如果类或属性是
internal修饰,作为独立类库的V2.Models项目将无法通过反射访问到该静态属性,从而抛出异常。
2. 项目引用关系不明确
Blazor Server项目能正常访问资源,是因为它通过依赖注入的本地化上下文(如IStringLocalizer)加载资源,而DataAnnotations验证是通过反射直接查找资源类的静态属性,对访问逻辑的要求更严格:
- 需确保V2.Models项目直接引用V2.Resources项目,而非通过Blazor项目间接引用。间接引用会导致资源类在Models项目的编译上下文里不可见,反射无法找到目标属性。
3. 资源代码生成不完整或有误
- 检查
GlobalResources.resx文件中是否确实存在RequiredField这个资源键,避免拼写错误。 - 确认修改资源文件后重新编译了V2.Resources项目,若生成器未重新生成
Designer.cs文件,会导致静态属性未被正确创建,反射自然找不到对应属性。
内容的提问来源于stack exchange,提问作者PitAttack76
相关产品推荐
相关产品推荐

