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

问题描述 投票:4回答:4

考虑以下情况。

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

一切都很好(如预期的那样)。

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

  1. 在VS2010中,我打开 "Other.dll "项目的属性窗口。
  2. 我将 "Default namespace "文本框中的名称空间从 "Old.Namespace "改为 "New.Namespace"
  3. 我相应地改变了相关.cs文件中的命名空间
  4. 我重建了修改后的 "Other.dll "项目。没有错误。修改后的 "Other.dll "制作正常。

现在问题来了。

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


"Invalid Resx file. 无法加载类型的 "Invalid Resx file. Old.Namespace.OtherType其他,版本1.0.0.0,文化=中性,PublicKeyToken=null,它在.RESX文件中使用。确保必要的引用已被添加到您的项目中。第1521行,位置5"


很明显,.resx文件仍然以 旧的 命名空间的某个地方。这个 "地方 "似乎是来自.resx文件的二进制部分。

问题:如何让.resx明白,它现在必须引用新的类型(改变了命名空间)?我怎样才能让.resx理解它现在必须引用新的类型(改变了命名空间)?

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

c# winforms visual-studio-2010 namespaces resx
4个回答
10
投票

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


2
投票

我也有同样的问题,在尝试了其他几个选项后,我按照Stefania Mereut的建议进行了改进。忠告 并删除了resx文件中的数据部分。 当我重新添加资源时,它显然正确地重写了数据部分。


1
投票

当我更新一个dll的新版本的引用时,我遇到了这个问题。在我的例子中,引用有 "特定版本"=true的选项。在这种情况下,不可能在res文件中反序列化一个旧版本的类,因为它包含了旧版本的类。我把引用的 "特定版本 "选项从 "true "改成了 "false",一切都恢复了正常。


0
投票

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

我相信这些资源只能在ResX编辑器的 "其他 "部分查看--不能通过它添加。

© www.soinside.com 2019 - 2024. All rights reserved.