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器类之前添加一个类,您将在运行时(无编译时错误或警告)得到一个MissingManifestResourceException
exception,因为
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.xaml
的StartupUri
。
BlaM给出的解决scheme也适用于我。
我是VS 2013用户。 经过许多修复,但没有运气,我试过这个:
- 如果是多个文件,请一个一个地右键单击资源文件。
- 确保将“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