当您在运行时访问窗体的.resources 文件时,您可能会收到一条"System.Resources.MissingManifestResourceException"错误消息

文章翻译 文章翻译
文章编号: 318603 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

症状

当您运行您的 Visual Basic.net 或 Visual Basic 2005,Visual C#.net 或 Visual J#.net Windows 应用程序时,可能会收到以下错误消息或类似的一个加载窗体时:
mscorlib.dll 中发生未处理的异常的类型 System.Resources.MissingManifestResourceException

其他信息: 找不到适用于指定的区域性 (或非特定区域性) 的任何资源在给定的程序集。请确保"Form1.resources"正确的嵌入或链接到程序集"myApplication"。

baseName: Form1 locationInfo: WindowsApplication4.Form1 资源文件的名称: Form1.resources 程序集: myApplication,版本 = 1.0.781.33026,Culture = 非 PublicKeyToken 的特定,于 = 空值
如果单击错误对话框中的 断开,并且如果您运行该代码在集成的开发环境 (IDE) 中,您将发现的一行 InitializeComponent 语句内的代码会导致此问题。例如对于如果从"更多信息"部分创建示例,与 ImageList 控件一起将发生此错误。尽管错误消息可能会引用不同的控件,请注意该 resources.GetObject 会出现该错误消息中的代码行上:
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))) ;

原因

因为 Form 类不是窗体的代码模块中第一个类,则会出现此问题。

注意此文章文档一个特定于导致此问题。可能有其他情况下,可能会导致类似的结果。

解决方案

若要解决此问题,移动其他类定义的所有文本框,以使其显示在窗体的类定义后。

替代方法

若要变通解决此问题,更改.resX 文件,该项目的 资源文件名称 属性。若要这样做,请按照下列步骤操作:
  1. 启动 Visual Studio.net 2003 或 Visual Studio 2005 。
  2. 打开包含本地化的窗体类收到"症状"部分中提到的错误消息的项目。
  3. 在解决方案资源管理器中,展开所有文件夹。
  4. 用鼠标右键单击 Form1.resX,然后单击 属性
  5. Form1.resX 属性页 对话框中展开 配置属性,然后单击 托管资源 下的 常规
  6. 更改 $(IntDir)/ <placeholder> Form1.resources(IntDir) / <placeholder>。MyForm.resources,然后单击 确定

    注意MyForm 为您本地化的窗体类的类名称的占位符。
  7. 请按 CTRL + SHIFT + S 以保存该项目。请按 CTRL + SHIFT + B 来构建解决方案。有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    824495FIX: 您可以收到一条"MissingManifestResourceException"错误消息在 Visual Studio.net 2003年中添加链接的资源时
  8. 按 f5 键运行该应用程序。在应用程序运行和窗体显示在 Form1。
.

状态

此行为是设计使然。

更多信息

窗体的代码模块可以包含多个类。当项目生成时生成系统必须确定它应创建.resources 文件使用的类。项目生成系统的设计指定代码模块中的第一个类的.resources 文件所基于的类。.resources 文件被命名为根据到该类中为不在窗体的名称。在大多数的情况中这两个名称都是相同。但是,如果这些名称不同,您将收到"症状"部分中提到的错误消息。

当您在运行时加载该窗体时,InitializeComponent 方法可能为了.resources 文件中的对象。InitializeComponent 搜索 Form_Name.resources 文件在程序集中。由于初始 Form_Name.resources 文件永远不会创建或链接到程序集,尝试检索.resources 文件无法正常工作。

重现行为的步骤

  1. 在 Visual Basic.net 中或 Visual Basic 2005、 Visual C#.net,或 Visual J#.net 中,请创建 Windows 应用程序项目。Form1 将创建由,您将收到以下警告消息: 默认。 Visual Studio 2005 中的 笔记
    在本地化模式下不能添加组件。选择要返回到默认窗体并添加组件语言属性中的 (默认)。
    注意您必须更改该代码在 Visual Basic 2005 中。默认状态下,Visual Basic 创建项目的两个文件,当您创建一个 Windows 窗体项目时。如果窗体名为 Form1,Form1.vb 和 Form1.Designer.vb,被命名为表示窗体的两个文件。在 Form1.vb 文件中编写代码。Windows 窗体设计器在 Form1.Designer.vb 文件中写入代码。Windows 窗体设计器使用 partial 关键字将 Form1 的实现划分为两个单独的文件。此行为可防止该设计器生成的代码正在与您的代码交错。

    有关新的 Visual Basic 2005 语言增强功能的详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:
    http://msdn2.microsoft.com/en-us/library/ms379584(vs.80).aspx
    有关分部类和 Windows 窗体设计器的详细信息请访问下面的 MSDN 网站:
    http://msdn2.microsoft.com/en-us/library/ms171843.aspx
  2. 向 Form1 中添加一个 ImageList 控件。
  3. 将一个图标文件添加到 ImageList 控件。
  4. 在 Form1 的代码模块中添加下面的代码在 Form1 定义之前: Visual Basic.net:
    Public Class someClass
    End Class
    					
    Visual C#.net 和 Visual J#.net:
    public class someClass
    {
    }
    					
  5. 生成项目。请注意,项目成功生成。
  6. 运行该项目。请注意您将收到"症状"部分中提到的错误消息。

属性

文章编号: 318603 - 最后修改: 2007年5月11日 - 修订: 4.3
这篇文章中的信息适用于:
  • Microsoft Visual .NET 2002 标准版
  • Microsoft Visual C# .NET 2002 标准版
  • Microsoft Visual J# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2003 标准版
  • Microsoft Visual Basic .NET 2003 标准版
关键字:?
kbmt kbvs2005applies kbvs2005swept kbprb KB318603 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 318603
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com