2012-08-29 23 views
2

如何更改用C#编写的DLL的语言属性?文件“详细信息”选项卡中的“语言无关”属性

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

我建立后/重建项目/解决方案,在DLL当我右键单击并转到详细信息标签,语言属性总是说:Language Neutral.

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

回答

4

此属性在AssemblyInfo.cs文件中设置[AssemblyCulture]属性。 MSDN库文章在备注部分有这个重要注释:

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

另一个重要的限制是GAC可以通过程序集名称,版本,体系结构和公钥关键词来区分程序集,但不能通过文化来区分程序集。卫星组件必须始终保存在本地。

长话短说,从不在包含代码的项目中选择除中性以外的任何内容。卫星组件几乎总是从项目中的资源中自动生成,并自动获得适当的[AssemblyCulture]属性。

+0

感谢您的回答,但是无论如何可以在文件的“详细信息选项卡”中更改“语言属性”(不管为什么,想象我有强烈的理由)。我的DLL没有任何需要本地化的字符串资源,我只是想更改'Language property',我们可以通过资源管理器在Details选项卡中看到。 – Apokal

+0

从我的回答中应该很清楚为什么你不能这样做。对不起,如果你不告诉我们为什么这对你很重要,我不能“想象”一种选择。 –

+0

我已经清楚地明白了您的答案,但想知道是否有任何方法(包括肮脏)来更改该财产,尽管GAC和其他人使用了相应规则。虽然我已经找到了myselt的解决方案,但您的回答很明显地解释了[AssemblyCulture]属性的用法,所以我会将其标记为已接受,谢谢! – Apokal

1

(添加这个答案作为补充the answer by @Hans Passant

在汇编信息(通过项目属性访问),当你改变中性语言为“英语(美国)”,导致该线要添加到AssemblyInfo.cs

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

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

[assembly: AssemblyCulture("")] 

由此可见,“中性语言”设置与“大会文化”设置截然不同。

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