我们在Visual Studio 2008的项目中有一些自动生成的资源文件,其中有一些本地化版本,在其中一个本地化版本中,有一个字符串为空。
更明确地说,我们有一个核心的资源文件,其中包含许多字符串资源。然后我们有另外4个本地化版本的文件,在其中一个其他本地化文件中,有一个字符串被赋予了一个空值。
问题是表单设计器非常高兴找到了字符串的资源,并且将不遗余力地重用此资源,以便为生成的表单设计器代码中分配属性的任何空字符串。
例如,如果某个控件上的属性由于某种原因未指定默认值(因此即使为空也将序列化为代码),则它将引用我们的资源,而不是在C#代码中写出空字符串文字。
问题是它引用了本地化版本,而这些版本并没有编译成代码。
下面是一个简化的代码示例:
在这种情况下,
这是否可以避免?我们已经厌倦了每次更改表单文件时进行搜索/替换,并且我们相当确定我们做了一些愚蠢的事情导致了这种情况,但显然我们自己无法找到原因。
如果我们删除了该资源,则上述代码将变成这样:
更明确地说,我们有一个核心的资源文件,其中包含许多字符串资源。然后我们有另外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 = "";