我收到以下警告: “ CA1824 使用NeutralResourcesLanguageAttribute标记程序集”
根据MSDN,原因是: 程序集包含基于ResX的资源,但没有应用System.Resources.NeutralResourcesLanguageAttribute。
有人可以解释一下这意味着什么吗? 我不想定义具体的文化背景。我希望它们可以自定义。
答案 0 :(得分:25)
NeutralResourcesLanguageAttribute向资源管理器通知用于显示主程序集中包含的资源的语言。例如。如果您对程序集进行编码以使其包含英语资源,那么请在AssemblyInfo.cs中包含以下行
[assembly: NeutralResourcesLanguage("en")]
这样,当用英语查找资源时,资源管理器不会查找英文文化附属程序集,而只是使用主程序集中包含的资源。这纯粹是一种性能优化。
答案 1 :(得分:4)
NeutralResourcesLanguage attribute告诉资源管理器中性资源中使用的语言(文件名没有文化代码后缀的资源,例如YourModule.resx
)。该信息可在resource fallback process期间使用。
答案 2 :(得分:1)
如上所述,在AssemblyInfo.cs中添加(如果尚未添加)
using System.Resources;
然后
[assembly: NeutralResourcesLanguage("en")]
答案 3 :(得分:0)
先前的答案说明了如何修复AssemblyInfo.cs文件,但如果没有此文件,则可以直接在CSPROJ文件(在.NET或.NET Core中)上进行修复:
<PropertyGroup>
<NeutralLanguage>en</NeutralLanguage>
</PropertyGroup>
答案 4 :(得分:0)
说明
我认为documentation很好地解释了这一点
<块引用>NeutralResourcesLanguageAttribute
属性将应用的默认文化告知资源管理器。
如果默认文化的资源嵌入在应用程序的主程序集中,并且 ResourceManager 必须检索与默认文化属于同一文化的资源,则 ResourceManager 会自动使用位于主程序集中的资源,而不是搜索卫星大会。
这绕过了通常的程序集探测,提高了您加载的第一个资源的查找性能,并可以减少您的工作集。
解决方案
在其他答案中提到过,但总结一下
使用 AssemblyInfo.cs
文件
[assembly: NeutralResourcesLanguage("en")]
或在 .csproj 文件中
<PropertyGroup>
<NeutralLanguage>en</NeutralLanguage>
</PropertyGroup>