访问resx文件时出现MissingManifestResourceException

问题描述 投票:0回答:1

好的,我在尝试访问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文件的属性(Works Fine):

enter image description here

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

enter image description here

问题1:为什么Lang.en-US不生成任何.CS文件,即使那时IT工作也是如此

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

链接我调查:SO LINK

图1:

enter image description here

图2:

enter image description here

c# .net resx
1个回答
1
投票

您的工作示例如下。

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

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

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

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

  • Lang.resx:非现有文化文件的默认值
  • Lang.en-US.resx:en-US文化
  • Lang.he.resx:他的文化
  • 你可以看到要点

码:

var rm = new ResourceManager("ConsoleApp1.App_GlobalResources.Lang", Assembly.GetExecutingAssembly());
© www.soinside.com 2019 - 2024. All rights reserved.