我们在Visual Studio 2008项目中有一些自动生成的资源文件,其中包含一些本地化版本,在其中一个本地化版本中,有一个字符串,在这种情况下为空。VS2008中的项目文件中的资源由窗体设计器创造性地“重用”,可以避免?
更明确。我们有一个核心资源文件,有很多字符串资源。然后,我们有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 = "";
资源项具有原始语言的值,但不在另一个中,因此为空字符串。如果我删除资源条目,它将默认恢复为原来的语言,这也是错误的。 – 2009-01-27 20:58:19
你是否自己使用了空字符串(例如作为UI元素的文本),还是与其他字符串连接形成短语?如果是后者,我只会分散纯粹主义者一秒钟的时间,并将不规则资源硬编码为区域感知属性。 – Ishmaeel 2009-01-28 07:16:33