情况:
-
我有一个名为
RT.Servers
的类库,包含一些资源(类型为byte[]
,但重要的是't think that') -
同一个类库包含一个返回其中一个资源的方法
-
我有一个简单的程序(带有对该库的引用),只调用该单个方法
我收到一条带有以下消息的 MissingManifestResourceException
:
找不到适合指定文化或中性文化的资源 . 确保在编译时将“Servers.Resources.resources”正确嵌入或链接到程序集“RT.Servers”中,或者所有所需的附属程序集都是可加载和完全签名的 .
我从来没有玩过文化,也没有集会签约,所以我不知道这里发生了什么 . 此外,这适用于使用相同库的另一个项目 . 有任何想法吗?
17 回答
不确定它会帮助人们,但这个对我有用:
所以我遇到的问题是我收到以下消息:
我试图从另一个类库中获取嵌入在我的项目中的资源 .
我解决这个问题的方法是将选项卡Project-> Properties-> Resources中的Access Modifier从“Internal”(只能在同一个类库中访问)设置为“Public”(可以从另一个类库访问)
然后跑,瞧,我没有更多错误......
解决此问题我需要做的就是右键单击解决方案资源管理器中的
Resources.resx
文件,然后单击“运行自定义工具” . 这会重新生成自动生成的Resources.Designer.cs
文件 .如果.resx文件已手动添加到项目中,则必须将文件的“自定义工具”属性设置为“ResXFileCodeGenerator” .
问题是由于命名空间不匹配,如果更改项目设置中程序集的"default namespace",则会出现这种情况 . (我把它从(先前)
"Servers"
改为(现在)"RT.Servers"
. )在
Resources.Designer.cs
中自动生成的代码中,有以下代码:必须将文字字符串
"Servers.Resources"
更改为"RT.Servers.Resources"
. 我是手动完成的,但是运行自定义工具也可以做得很好 .我今天刚遇到这个问题,我发现this Microsoft Help and Support page实际上解决了这个问题 .
我在我的文件顶部,在全局命名空间中有几个代表,突然间我在运行程序时得到了
MissingManifestResourceException
,在这一行:然后我将代理移动到命名空间,得到了同样的错误 . 最后,我将委托放在该文件中唯一的类中,错误消失了,但我不希望该类或命名空间中的委托 .
然后我发现上面的链接,说
我把代理(我不会考虑"class definitions")放在该文件的底部,在本地命名空间之外,程序不再得到
MissingManifestResourceException
. 真是个恼人的错误 . 但是,这似乎比修改自动生成的代码更强大的解决方案:)我遇到了类似的问题,虽然我知道这不是OP的原因,但我会在这里发布,以便如果其他人在将来遇到这个问题,那么答案将可用 .
如果在设计器类之前添加一个类,则会在运行时获得
MissingManifestResourceException
异常(无编译时错误或警告),因为有关(稍微)更多信息,请参阅this post .
我有同样的问题,但使用运行自定义工具命令suggested by Timwi在我的情况下没有帮助 .
然而,它引导我进入正确的方向,因为我最终在.resx文件的属性 . 在这里,我注意到另一个.resx文件的区别,没有引起任何问题 .
在我的情况下,我不得不将属性“Build Action”从“Resource”更改为“Embedded Resource” .
我最好的猜测是,我在另一个应用程序中使用的库中有.resx . 我的应用程序没有自己的.resx文件,所以它必须使用库中的文件 - 只有当它嵌入库中时才可用,而不是"stand alone" .
当我在类似的问题中运行时,在Vs 2012中,结果是resx文件的“自定义工具命名空间”属性是错误的(在我的情况下,实际上,它是未设置的,因此生成的代码在运行时发出此异常) . 我对resx文件的最后一组属性是这样的:
构建动作: Embedded Resource
复制到输出目录: Do not copy
自定义工具: ResXFileCodeGenerator
自定义工具命名空间: My.Project.S.Proper.Namespace
我遇到了这个问题的另一个原因,这与resx文件无关 . 我有一个类库,其中AssemblyInfo.cs包含以下内容:
程序集不包含任何WPF代码,主题或资源字典 . 我摆脱了通过删除ThemeInfo属性的异常 .
我没有得到实际的例外
查看异常详细信息,系统正在请求MyAssembly.g.resources
希望这对其他人有帮助 .
另见:MissingManifestResourceException when running tests after building with MSBuild (.mresource has path in manifest)
我在这里重复一遍,只是为了完整:
似乎将LogicalName添加到项目文件中修复它:
即,项目文件中的嵌入资源条目如下所示:
详情请见:http://blogs.msdn.com/b/msbuild/archive/2007/10/19/manifest-resource-names-changed-for-resources-files.aspx
请注意,我们使用的是.resx文件,但仍然会出现错误 .
更新:资源问题(包括XAML)似乎与输出路径和前向或后向斜杠的使用有关,详见:Why does modifying project output directories cause: IOException was unhandled "Cannot locate resource 'app.xaml'."
BlaM给出的解决方案也适用于我 .
我是VS 2013用户 . 经过许多修复但没有运气后,我尝试了这个:
如果是多个文件,请逐个右键单击资源文件 .
确保,属性"Build Action"设置为"Embedded Resource" .
而已! :)
我有同样的问题,但在我的情况下,我将一个类放在usercontrol中,这与usercontrol相关
解决方案是将
MyUserControlObject
移动到Usercontrol类的末尾,就像这样我希望这有帮助
我将项目从VS2005移植到VS2010后,我收到了MissingManifestResourceException错误 . 我没有在包含我的Form类的文件中定义任何其他类 . 我还正确设置了resx资源文件名 . 没工作 .
所以我删除了resx文件并重新生成它们 . 一切都好 .
最近遇到了同样的问题,挣扎了一下,找到了这个话题,但没有答案对我来说是正确的 .
我的问题是,当我从我的WPF项目中删除主窗口(它没有主窗口)时,我忘了从
App.xaml
删除StartupUri
. 我想如果你在StartupUri
中有错误会发生这种异常,所以如果有人在努力解决这个问题 - 请检查App.xaml
中的StartupUri
.最近偶然发现了这个问题,在我的案例中我做了一些事情:
确保resx文件的Designer.cs文件中的名称空间一致
确保程序集的默认名称空间(右键单击项目并选择“属性”)设置为与资源文件所在的名称空间相同 .
一旦我做了第2步,例外就消失了 .
因为我正在预编译我的Web应用程序(使用VS2012发布功能) . 我收到了上面的错误 . 我尝试了所有的建议,但奇怪的是将“Build Action”改为“Content”就行了!
就我而言,我有一个带有资源的web api,我从中创建了一个nuget包 . 当我在其他项目中使用这个nuget时,我意识到当我用资源请求api时,我在经过一些研究后得到
MissingManifestResourceException
,我知道nuget packager没有自动打包资源 . 如果要使用资源文件,则必须手动执行此操作 . 因此,您需要在.nuspec文件中添加以下行:(访问https://github.com/NuGet/Home/issues/1482)但是,在添加文件之前,您需要确定您正在使用的.net版本 .
我有一个新创建的F#项目 . 解决方案是取消选中项目属性中的“使用标准资源名称” - >应用程序 - >资源/指定应用程序资源的管理方式 . 如果您没有看到该复选框,请更新您的Visual Studio!我安装了15.6.7 . 在15.3.2中,此复选框不存在 .
来自the Microsoft support page:
若要解决此问题,请在运行Resgen.exe时指定.resources文件的文件名 . 指定.resources文件的文件名时,请确保文件名以应用程序的命名空间名称开头 . 例如,在Microsoft Visual Studio .NET命令提示符处运行以下命令,以创建一个.resources文件,该文件在文件名的开头具有应用程序的命名空间名称: