VS调试错误 “未能找到任何适合于指定的区域性或非特定区域性的资源”“System.Resources.MissingManifestResourceException” - dhualai

时间:2024-04-15 07:59:49

VS2010调试错误 “未能找到任何适合于指定的区域性或非特定区域性的资源”“System.Resources.MissingManifestResourceException”

2011-12-14 21:36  dhualai  阅读(3739)  评论(0编辑  收藏  举报

VS2010调试时错误症状:

System.Resources.MissingManifestResourceException”类型的未经处理的异常出现在 mscorlib.dll 中。

其他信息: 未能找到任何适合于指定的区域性或非特定区域性的资源。请确保在编译时已将“mvd.MainForm.resources”正确嵌入或链

接到程序集“mvd04”,或者确保所有需要的附属程序集都可加载并已进行了完全签名。

 

网络解答:
1.主窗口文件不在项目资源管理器的最前面;
2.项目中误加入了.obj文件;
3.网页开发中的ResourcesManager类的某一方法调用参数错误,需加入命名空间之类;
4.主窗口文件名称和主窗口类名称不一样(来自于support.microsoft.com)。

 

真实成因(windows软件开发中VS2010):

修改了主窗口类、或其对应文件名、或其所在的命名空间的名称。
当新建一个项目时,此命名空间的名称(比如下面例子中的namespace mvd)和项目(或解决方案)的名称是一样的。
namespace mvd04 {

 /// <summary>
 /// Form1 摘要
 /// </summary>
 public ref class MainForm : public System::Windows::Forms::Form
 {
 public:
  MainForm(void)
  {
   InitializeComponent();
如果修改了这个命名空间的名称(比如把mvd04改为mvd),同时,又在程序中使用了.resx资源,比如ToolSrip容器中有一个控件

ToolSripButton,它对应有Image属性,会产生这样的代码:
System::ComponentModel::ComponentResourceManager^  resources = (gcnew

System::ComponentModel::ComponentResourceManager(MainForm::typeid));

this->toolStripButton1->Image = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject

(L"toolStripButton1.Image")));
这时就会出现这样的错误。

仔细看出错信息,其中mvd.MainForm.resources这个资源文件是代码中用到的,它的名称是由 命名空间名称+.主窗口类名+.resources

组成的,而真正的资源文件一般位于Debug目录下,由解决方案名称+.主窗口文件名称+.resources组成的,所以必须满足以下两个条件


1、命名空间名称=解决方案名称
2、主窗口类名=主窗口文件名称
下面微软官方的解释主要说明在VS2005中必须满足第2个条件,而在VS2010中还必须满足第1个条件,并且在VS2010中托管资源文件名是

无法修改的,只有一般资源文件名可以修改,所以只能修改命名空间名称使之与解决方案名称一致。
另外说明一下,修改解决方案名称是没有用的,因为生成的资源文件名称是由最初新建一个项目时的名称所决定的。

 

附:微软官方解释(http://support.microsoft.com/kb/318603/zh-cn

文章编号: 318603 - 最后修改: 2007年5月11日 - 修订: 4.3
当您在运行时访问窗体的.resources 文件时,您可能会收到一条"System.Resources.MissingManifestResourceException"错误消息

本页症状原因
当您运行您的 Visual Basic.net 或 Visual Basic 2005,Visual C#.net 或 Visual J#.net Window...当您运行您的 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 类不是窗体的代码模块中第一个类,则会出现此问题。注意此文章文档一个特定于导致此问题。可能有其他情况下,可

能会导致类似的结果。...因为 Form 类不是窗体的代码模块中第一个类,则会出现此问题。

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

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

本框,以使其显示在窗体的类定义后。

替代方法若要变通解决此问题,更改.resX 文件,该项目的 资源文件名称 属性。若要这样做,请按照下列步骤操作: 启动 Visual

Studio.net 2003 或...若要变通解决此问题,更改.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 知识库中相应的文章:
824495  (http://support.microsoft.com/kb/824495/ ) FIX: 您可以收到一条"MissingManifestResourceException"错误消息在

Visual Studio.net 2003年中添加链接的资源时
8.按 f5 键运行该应用程序。在应用程序运行和窗体显示在 Form1。

此行为是设计使然。

更多信息窗体的代码模块可以包含多个类。当项目生成时生成系统必须确定它应创建.resources 文件使用的类。项目生成系统的设计

指定代码模块中的第一个类的.resour...窗体的代码模块可以包含多个类。当项目生成时生成系统必须确定它应创建.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 (http://msdn2.microsoft.com/en-us/library/ms379584

(vs.80).aspx) 有关分部类和 Windows 窗体设计器的详细信息请访问下面的 MSDN 网站:
http://msdn2.microsoft.com/en-us/library/ms171843.aspx (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.运行该项目。请注意您将收到"症状"部分中提到的错误消息。
回到顶端

--------------------------------------------------------------------------------
这篇文章中的信息适用于:
•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