如何解决“无效的 Resx 文件...找不到 ResX 读取器和写入器类型名称的有效“resheader”标签。” 编译器错误?

B. *_*non 6 whitespace resx resource-files visual-studio-2008 winforms

我收到十几个“无效的 Resx 文件。ResX 输入无效。无法找到 ResX 读取器和写入器类型名称的有效“resheader”标签。” 尝试编译时出现错误消息。

我以前遇到过这个问题,如下所示

但这一次,它的表现略有不同。

首先,这是我所做的:我在项目中的几个文件上选择了上下文菜单项“撤消挂起的更改”。对于他们每个人来说,其相关的 *.resx 文件显然已损坏。

2 单击错误列表中的第一个 err 消息会将我带到 .resx 文件中:

  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
Run Code Online (Sandbox Code Playgroud)

2-单击下一个错误将我带到 .resx 文件中的此处:

<resheader name="resmimetype">text/microsoft-resx</resheader>
Run Code Online (Sandbox Code Playgroud)

这是注释掉的解释部分;在一些上下文中:

<!-- 
    Microsoft ResX Schema 

    Version 1.3

    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.

    Example:

    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">1.3</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1">this is my long string</data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        [base64 mime encoded serialized .NET Framework object]
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        [base64 mime encoded string representing a byte array form of the .NET Framework object]
    </data>
  . . .
Run Code Online (Sandbox Code Playgroud)

所有其他 10 次双击都将我带到 .resx 文件中的第一行,即:

<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)

汉斯·帕桑特 (Hans Passant)对另一只猫对同一问题的回答表明,需要删除多余的空白;不过,我在 .resx 文件中没有看到这样额外的空白...

我需要做什么来修复这些损坏的 .resx 文件?

更新

err msg 似乎指向的前两个位置可能是虚假/误导性的;它们可能只是我之前放置光标的文件中的位置(奇怪的是,错误消息会去那里而不是问题的假定位置,但是......)

更新2

根据错误消息,失败的 *.resx 文件缺少有效的 resheader 读取器/写入器标签。然而,这些标签/声明确实存在于失败的 *.resx 文件中。这些看起来像这样:

  <resheader name="reader">
    <value>System.Windows.Forms.Design.CFResXResourceReader, System.CF.Design, 
    Version=7.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
  </resheader>
  <resheader name="writer">
    <value>System.Windows.Forms.Design.CFResXResourceWriter, System.CF.Design, 
    Version=7.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
  </resheader>
Run Code Online (Sandbox Code Playgroud)

....但是,有趣的是(如果你是一个 uebergeek,无论如何)这些确实不同于其他(编译)形式的 RESX 读取器和写入器声明,如下所示:

<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, 
    Culture=neutral,PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, 
    Culture=neutral,PublicKeyToken=b77a5c561934e089</value>
</resheader>
Run Code Online (Sandbox Code Playgroud)

如果我将非编译表单中的 RESX 读取器/写入器声明替换为其他格式(IOW,我将“ System.Windows.Forms.Design.CFResXResourceReader, System.CF.Design, Version=7.0.5000.0 ”替换为“ System. Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0 "(并使用不同的公钥令牌),它可以编译!

但是(这是一个很大的但是[t](想想 Bertha)),编译该项目的机器是 PC(当然),但是 .exe 将运行的目标机器是 Compact Framework(手持设备。那么,一旦 .exe 从点 PC 移动到点手持 Windows CE 设备后,用更通用的 RESX 措辞替换“CF”是否会出现问题?