4

考虑以下情况:

  • 在我的 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”生成OK。

现在问题来了:

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


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


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

问题: 如何让 .resx 理解它现在必须引用新类型(具有更改的命名空间)?

请帮忙,我真的不知道如何在这里进行......

4

4 回答 4

10

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

于 2013-05-21T05:06:28.067 回答
2

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

于 2013-06-24T21:48:11.637 回答
1

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

于 2020-05-19T14:54:14.990 回答
0

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

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

于 2012-11-27T15:04:49.507 回答