访问 resx 文件时出现 MissingManifestResourceException

MissingManifestResourceException while accessing resx file

我在尝试访问 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!");
}

我的解决方案结构:

属性 of Lang.en-美国文件(工作正常):

属性 of en-US 文件(不工作):

问题 1:为什么 Lang.en-US 不生成任何 .CS 文件,即使这样它也能工作

问题2:为什么一个基本的bare en-US.resx创建了一个.CS文件,但仍然不起作用。

Link 我调查了:SO LINK

图一:

图二:

您的工作示例如下。

  1. ResourceManager 加载 "Lang" 作为他的虚拟文件前缀集。
  2. GetString(Key, Culture) - 尝试寻找正确的文化,如果找不到,那么它将回退到 none 文化文件。例如:对于 'en-US' 它将尝试查找 Lang.en-US.resx 并将默认为 Lang.resx

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

解法: 一种理想情况是使用您的 Working with the following multiple language files.

语言文件夹(即:App_GlobalResources [错误名称])

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

代码:

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