重命名命名空间后无效的.resx文件

时间:2012-11-27 14:57:29

标签: c# winforms visual-studio-2010 namespaces resx

考虑以下情况:

  • 在我的Windows窗体应用程序中,我有一个表单。
  • 该表单有一个.resx文件。
  • 表单使用来自另一个程序集(“Other.dll”)的类(“OtherClass”)。
  • “Other.dll”与主应用程序在同一VisualStudio 2010解决方案中构建 (在同一解决方案中只是一个单独的项目)。
  • 在主项目(Windows窗体应用程序)中,我已经正确使用了 添加了对“Other.dll”项目的引用。

一切运作良好(如预期的那样)。

现在我需要将“Other.dll”中包含的类型的命名空间从“Old.Namespace”更改为“New.Namespace”:

  1. 在VS2010中,我打开了“Other.dll”的“属性”窗口 项目
  2. 我将“默认命名空间”文本框中的命名空间从“Old.Namespace”更改为 “New.Namespace”
  3. 我相应更改相关.cs文件中的名称空间
  4. 我重建了修改后的“Other.dll”项目。没有错误。修改后的“Other.dll”即可生成。
  5. 现在出现了问题:

    当我重建整个解决方案后,编译器停止并报告表单的.resx文件无效:


    “无效的Resx文件。无法加载类型 Old.Namespace.OtherType ,其他,版本1.0.0.0,Culture = neutral,PublicKeyToken = null在.RESX文件中使用确保已将必要的参考文献添加到您的项目中。第1521行,第5位“


    显然,.resx文件仍然从某处引用带有命名空间的类型。那个“某处”似乎来自.resx文件的二进制部分!

    问题: 如何使.resx明白它现在必须引用新类型(使用更改的命名空间)?

    请帮助,我真的不知道如何继续...

4 个答案:

答案 0 :(得分:10)

我遇到了同样的问题,解决方法是从resx文件中删除数据部分

答案 1 :(得分:2)

我也遇到了同样的问题,在尝试了其他几个选项后,我跟随了Stefania Mereut的advice并删除了resx文件中的数据部分。当我重新添加资源时,它显然正确地重写了数据部分。

答案 2 :(得分:1)

当我更新对dll新版本的引用时遇到了这个问题。在我的情况下,引用具有选项“特定版本” = true。在那种情况下,不可能在res文件中反序列化一个旧版本的类,因为它包含旧版本的版本。 我将我的裁判“特定版本”上的选项从“ true”更改为“ false”,然后一切又恢复了。

答案 3 :(得分:0)

您需要手动打开resx文件,并将此二进制资源的类型名称更改为新的正确类型名称。我猜这是一个非标准的(即不是字符串或图像)资源,直接手动添加到resx文件。

我相信这些只能在ResX编辑器的“其他”部分中查看 - 它们无法通过它添加。