【问题标题】:Invalid .resx file after renamed namespace重命名命名空间后的 .resx 文件无效
【发布时间】:2012-11-27 14:57:29
【问题描述】:

考虑以下情况:

  • 在我的 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”更改为 “新命名空间”
  3. 我相应地更改了相关 .cs 文件中的命名空间
  4. 我重建了修改后的“Other.dll”项目。没有错误。修改后的“Other.dll”生成OK。

现在问题来了:

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


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


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

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

请帮忙,我真的不知道如何继续这里......

【问题讨论】:

  • 您是否尝试过您的 resx 上的“运行自定义工具选项”(右键单击)?
  • 您是否尝试删除对 Other.dll 的引用并重新添加?也许“复制本地=真”可能会导致问题..
  • 没有。但是当我在解决方案资源管理器中右键单击 .resx 文件时,我在弹出菜单中看不到任何“运行自定义工具”???能具体一点吗?
  • 对不起,我的评论越过了另一个。是的,我尝试删除引用并将其添加回来。同样的问题。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2011-08-28
          • 2023-03-25
          • 1970-01-01
          • 2017-04-23
          • 2013-06-17
          • 1970-01-01
          • 2019-02-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多