我们在 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 = "";
最佳答案
您可以尝试创建一个字符串资源 empty_string,为每个语言环境定义为 ""。如果你把它作为第一个资源,表单设计者(希望)总是会选择那个作为值来散布在你的表单中。这样至少您将使用为此目的指定的字符串。
关于c# - VS2008中项目文件中的资源被窗体设计者创造性地得到 "reused",可以避免吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/435466/