我创建了一个程序集,然后将其重命名。
然后,我在调用时开始出现运行时错误:
toolsMenuName = resourceManager.GetString(resourceName);
resourceName
变量在运行时为“enTools” 。代码:
string resourceName;
ResourceManager resourceManager = new ResourceManager("Jfc.TFSAddIn.CommandBar", Assembly.GetExecutingAssembly());
CultureInfo cultureInfo = new CultureInfo(_applicationObject.LocaleID);
if(cultureInfo.TwoLetterISOLanguageName == "zh")
{
CultureInfo parentCultureInfo = cultureInfo.Parent;
resourceName = String.Concat(parentCultureInfo.Name, "Tools");
}
else
{
resourceName = String.Concat(cultureInfo.TwoLetterISOLanguageName, "Tools");
}
toolsMenuName = resourceManager.GetString(resourceName); // EXCEPTION IS HERE
我可以看到项目中包含的CommandBar.resx文件,可以打开它并在那里看到“enTools”字符串。似乎资源未包含在程序集中或资源已包含在内,但.NET无法解析名称。
最佳答案
我认为更简单的解决方案是为每种语言创建单独的资源文件。
就这种情况而言,检查包含资源的程序集是否将默认 namespace 设置为相同的文本(VS中的Project-> Properties-> Default namespace ;)
还要检查resx文件是否将属性BuildAction设置为“嵌入式资源”