【问题标题】:"Language neutral" property in file's Details tab文件详细信息选项卡中的“语言中性”属性
【发布时间】:2012-08-29 08:00:09
【问题描述】:

如何更改用 C# 编写的 DLL 的语言属性?

我尝试进入Project Properties -> Assembly Information -> Neutral Language ComboBox 并将其设置为English (United States)

在我构建/重建项目/解决方案后,当我右键单击 DLL 并转到详细信息选项卡时,语言属性始终显示Language Neutral.

编辑: 我找到的解决方案是使用外部*.res文件(由Visual Studio简单生成),然后在对话框Project Propertie->Application Tab-> Resource File中选择它

【问题讨论】:

    标签: c# dll localization assemblies


    【解决方案1】:

    此属性设置 AssemblyInfo.cs 文件中的 [AssemblyCulture] 属性。 MSDN 库文章的备注部分中有此重要说明:

    编译器使用该属性来区分主程序集和附属程序集。主程序集包含代码和中立文化的资源。附属程序集仅包含特定文化的资源,如 [assembly:AssemblyCultureAttribute("de")]。将此属性放在程序集上并使用空字符串 ("") 以外的其他内容作为区域性名称将使该程序集看起来像附属程序集,而不是包含可执行代码的主程序集。使用此属性标记传统代码库会破坏它,因为在运行时没有其他代码能够找到库的入口点。

    另一个重要限制是 GAC 可以通过程序集名称、版本、体系结构和公钥令牌区分程序集,但不能通过文化区分。附属程序集必须始终存储在本地。

    长话短说,从不在包含代码的项目中选择除了 Neutral 之外的任何东西。附属程序集几乎总是从项目中的资源自动生成并自动获取正确的 [AssemblyCulture] 属性。

    【讨论】:

    • 感谢您的回答,但无论如何都可以更改文件Details Tab 中的Language property(无论如何,想象我有充分的理由)。我的 DLL 将没有任何需要本地化的字符串资源,我只想更改 Language property,我们可以通过资源管理器在 Details tab 中看到。
    • 从我的回答中应该很清楚为什么你不能这样做。抱歉,如果您不告诉我们为什么这对您很重要,我无法“想象”另一种选择。
    • 我已经清楚地理解了您的答案,但想知道是否有任何方法(包括肮脏)来更改该属性,尽管 GAC 和其他人使用了规则。虽然我自己找到了解决方案,但您的回答清楚地解释了 [AssemblyCulture] 属性的用法,所以我将其标记为已接受,谢谢!
    【解决方案2】:

    (添加此答案作为the answer by @Hans Passant 的补充。)

    在您的程序集信息(通过项目属性访问)中,当您将中性语言更改为“英语(美国)”时,这会导致此行添加到 AssemblyInfo.cs

    [assembly: NeutralResourcesLanguageAttribute("en-US")]
    

    但是,请注意AssemblyInfo.cs 中的以下行保持不变:

    [assembly: AssemblyCulture("")]
    

    由此可见,中性语言设置与汇编文化设置不同。

    如果您正在本地化您的应用程序,您应该将NeutralResourcesLanguageAttribute 设置为您在中性资源文件中使用的文化。 (更多信息请参见this answer。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多