MissingManifestResourceException意味着什么以及如何解决它?

情况:

  • 我有一个名为RT.Servers ,包含一些资源(types为byte[] ,但我不认为这很重要)
  • 相同的类库包含返回其中一个资源的方法
  • 我有一个简单的程序(引用该库),只调用单一的方法

我得到一个MissingManifestResourceException以下消息:

找不到适合特定文化或中性文化的资源。 确保在编译时“Servers.Resources.resources”已正确embedded或链接到程序集“RT.Servers”中,或者所有需要的附属程序集均可加载并完全签名。

我从来没有玩过文化,也没有大会签名,所以我不知道这里发生了什么。 另外,这在另一个使用相同库的项目中工作。 有任何想法吗?

我所需要解决的问题是右键单击解决scheme资源pipe理器中的Resources.resx文件,然后单击运行自定义工具 。 这将重新生成自动生成的Resources.Designer.cs文件。

如果手动将.resx文件添加到项目中,则文件的“自定义工具”属性必须设置为“ResXFileCodeGenerator”。

问题是由于命名空间不匹配,如果在项目设置中更改程序集的“默认命名空间”,则会发生这种情况。 (我把它从(以前) "Servers"改为(现在) "RT.Servers" 。)

Resources.Designer.cs自动生成的代码中,有以下代码:

 internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Servers.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } 

文字string"RT.Servers.Resources"必须改为"RT.Servers.Resources" 。 我手动做了这个,但是运行这个自定义工具也可以完成它。

我刚刚遇到了这个问题,我发现这个Microsoft帮助和支持页面实际上确实解决了这个问题。

我在我的文件顶部有一些代表,在全局命名空间中,突然间,我在运行该程序时遇到了MissingManifestResourceException

 this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 

然后我把委托移动到命名空间中,得到了同样的错误。 最后,我把代表放在那个文件中的唯一类中,并且错误消失了,但是我不想让那个类或者名字空间中的委托。

然后,我碰到上面的链接,这说

要解决此问题,请移动所有其他类定义,以便它们出现在窗体的类定义之后。

我把代表(我不认为是“类定义”)在该文件的底部,在本地命名空间之外,程序没有得到MissingManifestResourceException了。 多恼人的错误 但是,这似乎是比修改自动生成的代码更强大的解决scheme:)

我遇到了类似的问题,尽pipe我知道这不是OP的原因,但我会在这里发布,以便在其他人遇到这个问题时将来可以得到答案。

如果您在devise器类之前添加一个类,您将在运行时(无编译时错误或警告)得到一个MissingManifestResourceExceptionexception,因为

Visual Studio要求devise人员使用文件中的第一个类。

对于(稍)更多的信息看到这个职位 。

我有同样的问题,但使用Timwibuild议的运行自定义工具命令没有帮助我的情况。

然而,它导致我走向正确的方向,因为我最终在.resx文件的属性 。 在这里,我注意到另一个.resx文件的差异导致没有问题。

在我的情况下,我不得不将“Build Action”属性从“Resource”更改为“Embedded Resource”。

我最好的猜测是,我从另一个应用程序中使用了库中的.resx 。 我的应用程序没有自己的.resx文件,所以它必须使用库中的一个 – 只有在库中embedded时才可用,而不是“独立”。

当我运行一个类似的问题时,在Vs 2012中,事实certificateresx文件的“自定义工具名称空间”属性是错误的(在我的情况下,实际上它是未设置的,所以生成的代码在运行时产生这个exception) 。 我为resx文件的最后一组属性是这样的:

  • 构build操作: embedded式资源
  • 复制到输出目录: 不要复制
  • 自定义工具: ResXFileCodeGenerator
  • 自定义工具命名空间: My.Project.S.Proper.Namespace

我遇到了这个问题的一个不同的原因,这与resx文件无关。 我有一个类库,其中AssemblyInfo.cs包含以下内容:

 [assembly: ThemeInfo( ResourceDictionaryLocation.SourceAssembly, ResourceDictionaryLocation.SourceAssembly)] 

该程序集不包含任何WPF代码,主题或资源字典。 我通过删除ThemeInfo属性摆脱了exception。

我没有得到一个实际的例外,只有

types为“System.Resources.MissingManifestResourceException”的第一个机会exception。

查看exception详细信息,系统正在请求MyAssembly.g.resources

希望这可能对别人有帮助。

在将我的项目从VS2005移植到VS2010后,我收到了MissingManifestResourceException错误。 我没有在包含我的Form类的文件中定义的其他类。 我也有我的资源文件名设置正确。 没有工作。

所以我删除了resx文件并重新生成了它们。 现在一切都好。

不知道这会帮助人,但这个人为我工作:

所以我的问题是我收到以下消息:

找不到适合特定文化或中性文化的资源。 确保在编译时“My.Resources.Resources.resources”已正确embedded或链接到程序集“X”,或者确保所有需要的附属程序集均可加载并完全签名“

我试图从另一个类库中获取embedded到我的项目中的资源。

我所做的解决这个问题的方法是在选项卡Project-> Properties-> Resources from“Internal”(只能在同一个类库中访问)中将Access Modifier设置为“Public”(可从另一个类库访问)

然后运行,瞧,没有更多的错误,我…

另请参阅: 在使用MSBuild构build之后运行testing时,MissingManifestResourceException(.mresource在manifest中具有path)

为了完整起见,我在这里重复这个答案:

它似乎添加LogicalName到项目文件修复它:

 <LogicalName>$(RootNamespace).Properties.Resources.resources</LogicalName> 

即所以项目文件中的embedded式资源项如下所示:

 <ItemGroup> <EmbeddedResource Include="Properties\Resources.resx"> <Generator>ResXFileCodeGenerator</Generator> <LastGenOutput>Resources.Designer.cs</LastGenOutput> <LogicalName>$(RootNamespace).Properties.Resources.resources</LogicalName> </EmbeddedResource> </ItemGroup> 

详情请参阅: http : //blogs.msdn.com/b/msbuild/archive/2007/10/19/manifest-resource-names-changed-for-resources-files.aspx

请注意,我们正在使用.resx文件,但该错误仍然出现。

更新:资源问题(包括XAML)似乎与输出path以及正斜杠或反斜杠的使用有关,如下所示: 为什么修改项目输出目录会导致:IOException未处理“Can not locate resource'app.xaml' “。

最近遇到同样的问题,挣扎了一下,发现了这个话题,但没有答案对我来说是正确的。

我的问题是,当我从我的WPF项目(它没有一个主窗口)删除主窗口,我忘了从App.xaml删除StartupUri 。 我猜如果你在StartupUri有一个错误, StartupUri发生这种exception,所以如果有人正在为此StartupUri努力,请检查App.xamlStartupUri

BlaM给出的解决scheme也适用于我。

我是VS 2013用户。 经过许多修复,但没有运气,我试过这个:

  1. 如果是多个文件,请一个一个地右键单击资源文件。
  2. 确保将“Build Action”属性设置为“Embedded Resource”。

而已! 🙂

我有同样的问题,但在我的情况下,我把一个类的用户控件是这样的usercontrol相关的

 Public Class MyUserControlObject end Class Public Class MyUserCOntrol end Class 

解决方法是将MyUserControlObject移到Usercontrol类的末尾,就像这样

 Public Class MyUserCOntrol end Class Public Class MyUserControlObject end Class 

我希望这有帮助

因为我正在编译我的Web应用程序(使用VS2012发布function)。 我得到上面的错误。 我尝试了所有的build议,但奇怪地把“Build Action”改成了“Content”这个技巧!

从Microsoft支持页面 :

如果您使用具有不合适的文件名称的.resources文件创build的附属程序集中存在的本地化资源,则会出现此问题。 如果您手动创build一个卫星程序集通常会发生此问题。

要解决此问题,请在运行Resgen.exe时指定.resources文件的文件名。 在指定.resources文件的文件名时,请确保文件名以应用程序的名称空间名称开头。 例如,在Microsoft Visual Studio .NET命令提示符处运行以下命令,以在文件名开头创build具有应用程序名称空间名称的.resources文件:

 Resgen strings.CultureIdentifier.resx MyApp.strings.CultureIdentifier.resources