Visual studio Visual Studio创建无效的Resx文件

Visual studio Visual Studio创建无效的Resx文件,visual-studio,winforms,visual-studio-2010,localization,resx,Visual Studio,Winforms,Visual Studio 2010,Localization,Resx,我有一个非常简单的表单,我想本地化(我在这个项目中有很多表单,它们都有相同的问题)。当我将表单属性Localizable设置为true时,VisualStudio将生成一个带有表单名称的.resx文件(如您所料)。但问题是它向.resx文件中添加了其他任何东西都无法打开的所有内容(例如WinRes、ResEx、Simple resx Editor、resx Editor等) 我得到的错误是: ResX文件类型System.Drawing.Point,System.Drawing,版本=4.0.0

我有一个非常简单的表单,我想本地化(我在这个项目中有很多表单,它们都有相同的问题)。当我将表单属性
Localizable
设置为true时,VisualStudio将生成一个带有表单名称的
.resx
文件(如您所料)。但问题是它向.resx文件中添加了其他任何东西都无法打开的所有内容(例如WinRes、ResEx、Simple resx Editor、resx Editor等)

我得到的错误是:

ResX文件类型System.Drawing.Point,System.Drawing,版本=4.0.0.0,区域性=neutral,PublicKeyToken=b03f5f7f11d50a3a无法定位第125行位置4处的数据。 第127行,位置5。无法分析

第124至127行为:

<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="lblUsername.Location" type="System.Drawing.Point, System.Drawing">
  <value>26, 24</value>
</data>

然后我就可以用WinRes.exe 4.0编辑.resx文件了

Visual Studio创建了正确的*.resx文件。问题是,您尝试使用的工具是为规范的早期版本创建的。这就是为什么你的变通方法有效


请检查您正在使用的本地化工具是否没有更新版本或补丁。

在.resx中,找到base64编码字符串的第一行。结尾应该是“j00LjAuMC4w”(意思是.NET4.0)。尝试将其更改为“j0yLjAuMC4w”(意思是.NET2.0)。为我工作。感谢Luis Mack at

有时在特定情况下,windows窗体设计器会在使用*.resx文件验证窗体时崩溃

连接数据源的控件受此行为影响。在我的例子中,我得到了一些数据集作为网格、组合的数据源

所以我打开了设计器,它并没有告诉我它无法打开,因为名为:blabla的控件出现了问题

检查设计器文件后,我发现控件没有问题,只是*.resx文件指向错误的源,因为我重构了数据集。因此,*.resx由于此重构而未更新


我打开*.resx文件,只需搜索控件的标识符,就找到了一个Base64编码的代码在不删除环绕标记的情况下删除块内的值将解决此控件的问题,因为windows窗体设计器将自动刷新并将丢失的内容读取到*.resx文件。

当编译器丢失某个对象的引用或当您更改了此对象的重要属性,例如,如果您在form all设置中有一个网格(这意味着您正在使用一个数据集作为数据源来实现网格),并且您更改了数据集的名称而丢失了此链接,则他将向您显示此消息。

我刚刚删除了.RESX文件中的ase行

<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken="" />

您是否执行了“PublicKeyToken=REMOVED”操作,或者这就是确切的错误消息?还有,那个幅画拼错了,是我在打字。我将编辑它并将其添加回。我想公钥在那里没有什么害处。@Blair McMillan:反正不是你的:)@Blair McMillan:我怀疑这两个数字之间的
导致了某些区域性的问题。@leppie:我不明白为什么VS会生成无效代码。我甚至不想要那个选项,反正我只想要文本字符串。真的。但是我找不到WinRes.exe的4.0版本(微软的工具,它是VS附带的)。WinRes.exe 4.0安装了.NET Framework SDK,可以从@PawełDyda下载:它创建正确的*.resx文件,但读取错误。例如,它保存Ctrl+O,但如果操作系统是德语,则仅当值为“Strg+O”时,它才能读取键。我认为最终的事实是,一个正确的源代码只能以一个有问题的方法编译在一个英语操作系统上……这不是我所做的实际改变,但它让我意识到问题是一个错误版本的库。