.NET 中系统程序集的 CultureName
Posted
技术标签:
【中文标题】.NET 中系统程序集的 CultureName【英文标题】:CultureName of System assembly in .NET 【发布时间】:2015-04-29 07:46:59 【问题描述】:在用 C# 编写一些代码处理程序集时,我注意到 Assembly
对象的字段值不一致(System
程序集的示例):
> typeof(string).Assembly.FullName
"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
但是当直接访问AssemblyName
对象的CultureName
字段时,其值为空字符串:
> typeof(string).Assembly.GetName().CultureName
""
当我在 Linux (mono 3.99
) 上运行相同的测试时,我得到了另一个结果:
> typeof(string).Assembly.GetName().CultureName
"neutral"
.NET 为什么会这样?我在 msdn 上找不到有关 AssemblyName
类中 CultureName
字段的默认值或含义的任何信息
空字符串。空字符串是否总是指“中性”文化名称?
【问题讨论】:
【参考方案1】:CultureName
属性是在 .Net 4.5 中引入的,具有中性区域性的 Assembly
的该属性值必须等于空字符串,例如不变区域性的名称,因为 CultureName
使用CultureInfo
属性(source):
public String CultureName
get
return (_CultureInfo == null) ? null : _CultureInfo.Name;
但在 Mono 中,CultureName
属性有不同的实现 (source)。为什么不一样?我认为 Mono 的开发人员知道答案。
public string CultureName
get
if (cultureinfo == null)
return null;
if (cultureinfo.LCID == CultureInfo.InvariantCulture.LCID)
return "neutral";
return cultureinfo.Name;
因此,如果您想检查 AssemblyName
是否具有中性文化,请使用以下代码:
if (object.Equals(assemblyName.CultureInfo, CultureInfo.InvariantCulture))
/* neutral culture */
【讨论】:
来源永远是寻找答案的最佳场所,谢谢!实际上,当您深入(查看CultureInfo
)代码时,有一个片段,其中区域名称为null
时返回空字符串。以上是关于.NET 中系统程序集的 CultureName的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows Vista 和更高版本(Windows 7、2008)中查看 .NET 程序集的程序集版本?
获取 .NET 程序集的 AssemblyInformationalVersion 值?