Visual Studio创建无效的Resx文件

时间:2010-11-09 09:58:32

标签: visual-studio winforms visual-studio-2010 localization resx

我有一个非常简单的形式,我想要本地化(我实际上在这个项目中有很多,他们都有相同的问题)。当我将表单属性Localizable设置为true时,Visual Studio会生成一个带有表单名称的.resx文件(正如您所期望的那样)。但问题是,它正在向.resx文件中添加各种其他东西才能打开(例如WinRes,ResEx,Simple Resx Editor,RESX Editor等)。

我得到的错误是:

  

ResX文件类型System.Drawing.Point,System.Drawing,Version = 4.0.0.0,Culture = 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>

现在我假设Visual Studio正在添加这个,以便我可以根据语言移动按钮等(我不需要或不需要此功能)。但是,它会在每个编辑器其他中抛出上述错误,而不是Visual Studio。

我安装的唯一扩展(根据Extension Manager)是:

  • 突出显示所有出现的所选单词
  • 用于WPF的Microsoft功能区(我在此项目中不使用)

加载项管理器不显示加载项。

修改

在挖掘并手动编辑.resx文件后,问题实际上是第124行<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />专门针对Version=4.0.0.0

如果我将其设置为Version=2.0.0.0,那么在Visual Studio和所有外部程序中一切正常。但问题是,如果我在Visual Studio中编辑任何内容,它会将其重置为Version=4.0.0.0

目前我将将Target Framework设置为.NET Framework 3.5 Client Profile ,以便Visual Studio不会覆盖该版本。这是一种解决方法,意味着我无法使用.NET 4.0功能。

我是否正确地猜测.NET Framework中存在错误,或者每个.resx编辑器都存在错误(包括Microsoft)。

编辑2: 事实证明,当我尝试使用Microsoft的WinRes.exe工具时,我实际上是在启动.NET Framework 3.5版本,因为.NET Framework 4.0版本没有安装。

我必须从http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/winsdk_web.exe安装.NET Framework 4.0 SDK,然后我才能使用WinRes.exe 4.0编辑.resx文件

5 个答案:

答案 0 :(得分:6)

Visual Studio会创建正确的* .resx文件。问题是,您尝试使用的工具是为规范的早期版本创建的。这就是你的解决方法有效的原因。

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

答案 1 :(得分:5)

有时在特定情况下,Windows在使用* .resx文件验证表单时会形成设计器崩溃。

控制附加数据源的位置受此行为的影响。在我的例子中,我得到了一些DataSet作为Grids,Combos的DataSource ......

所以我已经打开了设计师并且没有告诉我由于名为的控件出现问题而无法打开:blabla

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

我打开了* .resx文件,只是搜索控件的标识符,找到了Base64编码的代码。 删除块内的值而不删除环绕标记将解决此控件的问题,因为Windows窗体设计器将自动刷新并将缺少的内容读取到* .resx文件。

答案 2 :(得分:3)

在.resx中,找到base64编码字符串的第一行。结尾应该是“j00LjAuMC4w”(意思是.net 4.0)。尝试将其更改为“j0yLjAuMC4w”(意思是.net 2.0)。为我工作。感谢Luis Mack在http://connect.microsoft.com/VisualStudio/feedback/details/532584/error-when-compiling-resx-file-seems-related-to-beta2-bug-5252020#

答案 3 :(得分:0)

当编译器丢失了某个对象的引用或者您已经更改了该对象的重要属性时,会出现此错误,例如,如果您在表单上有一个Grid所有设置(这意味着您正在使用DataSet)作为实现网格的数据源,并且您更改了DataSet VS的名称丢失此链接,他将为您带来此消息。

答案 4 :(得分:0)

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

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