Tim*_*mwi 144 .net c# culture resources manifest
情况:
RT.Servers
包含一些资源(类型byte[]
,但我不认为这很重要)我收到MissingManifestResourceException
以下消息:
找不到适合指定文化或中性文化的资源.确保"Servers.Resources.resources"在编译时正确嵌入或链接到程序集"RT.Servers",或者所有所需的附属程序集都是可加载和完全签名的.
我从来没有玩过文化,也没有集会签约,所以我不知道这里发生了什么.此外,这适用于使用相同库的另一个项目.有任何想法吗?
Tim*_*mwi 229
解决此问题我需要做的就是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;
}
}
Run Code Online (Sandbox Code Playgroud)
必须将文字字符串"Servers.Resources"
更改为"RT.Servers.Resources"
.我是手动完成的,但是运行自定义工具也可以做得很好.
Mar*_*off 34
我今天刚遇到这个问题,我发现这个Microsoft帮助和支持页面实际上解决了这个问题.
我在我的文件顶部,在全局命名空间中有几个代表,突然间我MissingManifestResourceException
在运行程序时得到了一个代码:
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
Run Code Online (Sandbox Code Playgroud)
然后我将代理移动到命名空间,得到了同样的错误.最后,我将委托放在该文件中唯一的类中,错误消失了,但我不希望该类或命名空间中的委托.
然后我发现上面的链接,说
若要解决此问题,请移动所有其他类定义,以便它们出现在窗体的类定义之后.
我把代理(我不会考虑"类定义")放在该文件的底部,在本地命名空间之外,程序不再得到它MissingManifestResourceException
.真是个恼人的错误.但是,这似乎比修改自动生成的代码更强大的解决方案:)
Mot*_*tti 29
我遇到了类似的问题,虽然我知道它不是OP的原因,但我会在这里发布,以便如果其他人在将来遇到这个问题,我们将会提供答案.
如果在设计器类之前添加一个类,则会MissingManifestResourceException
在运行时获得异常(无编译时错误或警告),因为
Visual Studio要求设计人员使用文件中的第一个类.
有关(稍微)更多信息,请参阅此帖子.
Bla*_*laM 15
我有同样的问题,但使用Timwi建议的运行自定义工具命令对我的情况没有帮助.
然而,它带领我进入正确的方向,因为我在结束了属性的中的.resx文件.在这里,我注意到另一个.resx文件的区别,没有引起任何问题.
在我的情况下,我不得不将属性"Build Action"从"Resource"更改为"Embedded Resource".
我最好的猜测是,我在另一个应用程序中使用的库中有.resx.我的应用程序没有自己的.resx文件,因此它必须使用库中的文件 - 只有当它嵌入库中时才可用,而不是"独立".
Sta*_*opo 11
当我在类似的问题中运行时,在Vs 2012中,结果是resx文件的"自定义工具命名空间"属性是错误的(在我的情况下,实际上,它是未设置的,因此生成的代码在运行时发出此异常) .我对resx文件的最后一组属性是这样的:
另请参阅:使用 MSBuild 构建后运行测试时出现 MissingManifestResourceException(.mresource 在清单中具有路径)
为了完整起见,我在这里重复答案:
看来将 LogicalName 添加到项目文件中可以解决此问题:
<LogicalName>$(RootNamespace).Properties.Resources.resources</LogicalName>
Run Code Online (Sandbox Code Playgroud)
即项目文件中的嵌入资源条目如下所示:
<ItemGroup>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<LogicalName>$(RootNamespace).Properties.Resources.resources</LogicalName>
</EmbeddedResource>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
请注意,我们使用的是 .resx 文件,但该错误似乎仍然出现。
更新:资源(包括 XAML)的问题似乎与输出路径以及正斜杠或反斜杠的使用有关,详细信息请参阅: Why does修改项目输出目录导致:IOException was unhandled“无法找到资源'app.xaml' ”。
我遇到了这个问题的另一个原因,它与 resx 文件无关。我有一个类库,其中 AssemblyInfo.cs 包含以下内容:
[assembly: ThemeInfo(
ResourceDictionaryLocation.SourceAssembly,
ResourceDictionaryLocation.SourceAssembly)]
Run Code Online (Sandbox Code Playgroud)
该程序集不包含任何 WPF 代码、主题或资源字典。我通过删除 ThemeInfo 属性摆脱了异常。
我没有得到真正的异常,只是
“System.Resources.MissingManifestResourceException”类型的第一次机会异常。
查看异常详细信息,系统正在请求 MyAssembly.g.resources
归档时间: |
|
查看次数: |
107062 次 |
最近记录: |