访问resx文件时缺少MissingManifestResourceException

时间:2018-09-07 21:06:24

标签: c# .net resx

好的,尝试访问resx文件时出现MissingManifestResourceException异常。

我有一个工作正常的代码片段,而我有另一个无效的代码片段。我不确定这是怎么回事。

工作摘要

static void Main(string[] args)
{
    //Keep an Eye on the first parameter I have passed, it has ".Lang" in it 
    var rm = new ResourceManager("ConsoleApp1.App_GlobalResources.Lang", Assembly.GetExecutingAssembly());
    var ci = Thread.CurrentThread.CurrentCulture;
    var a = rm.GetString("Name", ci);
    Console.WriteLine("Hello World!");
}

无效片段:

static void Main(string[] args)
{
    // Keep an eye on first parameter no ".Lang" here.
    var rm = new ResourceManager("ConsoleApp1.App_GlobalResources", Assembly.GetExecutingAssembly());
    var ci = Thread.CurrentThread.CurrentCulture;
    var a = rm.GetString("Name", ci);
    Console.WriteLine("Hello World!");
}

我的解决方案结构:

enter image description here

Lang.en-US文件的属性(正常工作):

enter image description here

美国文件的属性(无效):

enter image description here

问题1:为什么Lang.en-US即使生成IT也无法生成任何.CS文件

问题2:为什么基本的裸en-US.resx会​​创建一个.CS文件,但仍然无法正常工作。

我调查过的链接:SO LINK

图片1:

enter image description here

图片2:

enter image description here

1 个答案:

答案 0 :(得分:1)

您的工作示例如下。

  1. ResourceManager加载“ Lang”作为他的虚拟文件前缀集。
  2. GetString(Key,Culture)-尝试查找正确的区域性,如果找不到正确的区域性,则它将回退到无区域性文件。例如:对于“ en-US”,它将尝试找到Lang.en-US.resx,并且默认为Lang.resx

您的“非工作”示例不起作用,因为您没有给它提供虚拟文件前缀,而是一个文件夹路径。

解决方案: 一种理想的情况是使用您的以下多种语言文件。

语言文件夹(即App_GlobalResources [坏名])

  • Lang.resx:不存在的区域性文件的默认值
  • Lang.en-US.resx:美国文化
  • Lang.he.resx:他的文化
  • 你可以看到要点

代码:

var rm = new ResourceManager("ConsoleApp1.App_GlobalResources.Lang", Assembly.GetExecutingAssembly());