c#warning - 使用NeutralResourcesLanguageAttribute标记程序集

时间:2010-11-01 11:13:54

标签: c# warnings fxcop

我收到以下警告: CA1824 使用NeutralResourcesLanguageAttribute标记程序集”

根据MSDN,原因是: 程序集包含基于ResX的资源,但没有应用System.Resources.NeutralResourcesLanguageAttribute。

有人可以解释一下这意味着什么吗? 我不想定义具体的文化背景。我希望它们可以自定义。

5 个答案:

答案 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 会自动使用位于主程序集中的资源,而不是搜索卫星大会。
这绕过了通常的程序集探测,提高了您加载的第一个资源的查找性能,并可以减少您的工作集。

解决方案

在其他答案中提到过,但总结一下

  1. 使用 AssemblyInfo.cs 文件

    [assembly: NeutralResourcesLanguage("en")]
    
  2. 或在 .csproj 文件中

    <PropertyGroup>
       <NeutralLanguage>en</NeutralLanguage>
    </PropertyGroup>