VS Designer用资源标识符替换“空”字符串,指向空字符串。

8

出现了奇怪的问题,开始于迁移到Visual Studio 2010。

一些窗体在打开时,会将某些对象的属性设置为在资源文件中为空的字符串。最常见的是控件属性,例如ImageKeyToolTipText和UltraGrid中的某些列会将columnX.Header.Caption设置为该字符串。这显然会删除已设置的图像,并在其他语言环境中提供错误的列标题文本。此外,工具提示将出现在奇怪的位置(如选项卡面板正文)。

这个字符串(下面的strSaveInterestDetails8)在Strings.resx中为空(<value />),但在Strings.fi.resx中不为空。当我将此字符串更改为一个空格时,设计器开始使用Strings.resx中的另一个“空”字符串。

这些窗体都派生自共同的基类,但它没有任何特殊/可疑的内容。从另一个devenv实例调试这些窗体失败了,因为调试器从未在设置的断点上中断(内部VS代码中抛出的异常被捕获了)。

示例:

ultraGridColumn23.Header.Caption = global::Company.Module.Properties.Strings.strSaveInterestDetails8;
...
this._timespanCheck.ImageKey = global::Company.Module.Properties.Strings.strSaveInterestDetails8;
...
this.tabPage1.ImageKey = global::Company.Module.Properties.Strings.strSaveInterestDetails8;
this.tabPage1.ToolTipText = global::Company.Module.Properties.Strings.strSaveInterestDetails8;

有人遇到过类似的问题或者有更好的搜索技巧吗?

你好,Pasi!你找到这个问题的解决方案了吗?我也遇到了完全相同的麻烦。 - Igor Soloydenko
目前还没有解决方案。我们已手动删除了这些内容(使用搜索字符串并删除整行的宏)。此外,一些对话框在我通过设计师删除这些奇怪的值后似乎可以工作,我还没有查看这在差异中有什么区别。 - Pasi Savolainen
这种情况也发生在我身上,我的情况是我已经删除了空字符串(并强制VS识别更改)。你能否删除空字符串或使它们变为非空? - Asaf R
1
@AsafR:当我把它们改成非空时,Visual Studio只是选择了下一个为空的。没有去改变所有空字符串。如果不是每天就是每周,我们仍在与这种蠢事作斗争。有一个宏,可以删除所有引用该特定空字符串的行。 - Pasi Savolainen
如果您不需要字符串为空,可以使用RegExp进行搜索和替换来替换所有空字符串。Visual Studio仍然需要一点刷新帮助,但我可以指导您完成。您是否愿意摆脱所有空资源字符串呢? - Asaf R
显示剩余2条评论
4个回答

6

2
根据我们的经验,这通常是由于resx文件中xml文本字符串<value />的存在造成的错误。当您编辑并保存表单设计器时,设计器文件中所有空字符串""都会映射到与此自我终止节点相关联的键。
如果在资源编辑器仍然有闪烁光标显示在“新行”行中,并且没有与键关联的文本,则可能会出现这些虚假的<value />条目。
搜索项目中的<value />,并从resx文件中删除它们。然后清理并重建项目(将失败),之后通过替换空字符串""来修复编译错误。
希望这能有所帮助。

2

我遇到了同样的问题,但是是在使用VS2008的时候。然而,我的系统上也安装了VS2010 Web Developer Express版本(几个月前)。起初,我在一个使用多种语言资源的项目中进行开发,然后我打开了另一个VS解决方案来更改表单上的一些内容。窗体设计器用第一个项目中的字符串资源标识符替换了Designer.vb文件中的所有空字符串!
我通过关闭Visual Studio并重新打开解决方案来解决了这个问题。


0

我认为这个对你有用。请查看被接受的解决方案。

或者也可以考虑这个


1
在这种情况下,这并不相关。该应用程序有数百个表单。完全迁移到另一种本地化类型的可能性极小。 - Pasi Savolainen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接