访问 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
图一:
图二:
您的工作示例如下。
- ResourceManager 加载 "Lang" 作为他的虚拟文件前缀集。
- 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());
我在尝试访问 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
图一:
图二:
您的工作示例如下。
- ResourceManager 加载 "Lang" 作为他的虚拟文件前缀集。
- 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());