我们在 Visual Studio 2008 中的项目中有一些自动生成的资源文件,其中包含一些本地化版本,在其中一个本地化版本中,有一个字符串在这种情况下为空。
更明确。我们有一个核心资源文件,里面有很多字符串资源。然后,我们有此文件的 4 个其他本地化版本,并且在这些其他本地化文件之一中,字符串之一被赋予一个空值。
现在的问题是表单设计者很高兴找到了一个字符串的资源,并且显然会不择手段地为任何空字符串重用该资源,它将在生成的设计器代码中为表单分配一个属性。
例如,如果由于某种原因没有为控件上的属性指定默认值(因此即使它是空的,它也会被序列化为代码),那么它将引用我们的资源,而不是在C# 代码。
问题是它引用了本地化版本,并且这些版本没有编译为代码。
这是一个简短的代码示例:
this.rpAllFields.KeyTip =
global::namespaces.SystemMessagesResources_sv_SE.
dash_red_shift_info_description;
在这种情况下,dash_red_shift_info_description
sv-SE 语言环境没有值,因此设计人员在看到代码中的空字符串时,将尝试链接到该资源。但是 SystemMessagesResources_sv_SE 不是现有的类,而是似乎为 SystemMessagesResources 资源文件的瑞典本地化版本生成的类名,该文件被编译为一个类。
这可以避免吗?每次我们更改表单文件中的某些内容时,我们都会对搜索/替换感到厌倦,而且我们很确定我们已经做了一个让这种情况发生的事情,但我们是显然我们自己无法找到原因。
如果我们删除资源,上面的代码将如下所示:
this.rpAllFields.KeyTip = "";