找不到适合指定文化或中性文化的资源

Cap*_*mic 16 .net c# resources localization exception-handling

我创建了一个程序集,后来重命名了它.

然后我在调用时开始收到运行时错误:

toolsMenuName = resourceManager.GetString(resourceName);
Run Code Online (Sandbox Code Playgroud)

resourceName变量是"enTools"在运行时.

找不到适合指定文化或中性文化的资源.确保在编译时将"Jfc.TFSAddIn.CommandBar.resources"正确嵌入或链接到程序集"Jfc.TFSAddIn"中,或者所有所需的附属程序集都是可加载和完全签名的.

代码:

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
Run Code Online (Sandbox Code Playgroud)

我可以看到项目中包含的CommandBar.resx文件,我可以打开它并在那里看到"enTools"字符串.似乎任何资源都不包含在程序集或资源中,但.NET无法解析名称.

dze*_*ras 29

我认为更简单的解决方案是为每种语言创建单独的资源文件.

就此情况而言,检查包含资源的程序集是否将默认名称空间设置为相同的文本(Project-> Properties-> Default namespace;在VS中)

检查resx文件是否具有将BuildAction属性设置为"Embedded resource"的属性

  • "检查包含资源的程序集是否将默认名称空间设置为相同的文本(Project-> Properties-> Default namespace;在VS中)" - 同一文本是什么? (7认同)
  • 如果resx文件的属性BuildAction设置为"Embedded resource"'= Facepalm,请检查+1 (6认同)

fir*_*986 13

听起来与我们遇到的问题类似.资源文件的设计器中的命名空间不正确.我通过在resx文件上手动重新运行自定义工具来修复它.

右键单击your.resx,然后单击"运行自定义工具".


小智 10

我相信你已经得到了答案,但以防万一:

  1. 您可以通过调用查看ManifestResourceName

    System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames() 
    
    Run Code Online (Sandbox Code Playgroud)

    检查GetString()调用中的Manifest名称和名称是否相同.

  2. 另外,请确保在designer.resx文件中具有正确的命名空间:

    namespace Jfc.TFSAddIn {
    ...
    global::System.Resources.ResourceManager temp = 
                 new global::System.Resources.ResourceManager(
                 "Jfc.TFSAddIn.CommandBar", typeof(CommandBar).Assembly);
    ... 
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 打开resx文件属性:"Build Action"应为"Embedded Resource"