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"的属性
fir*_*986 13
听起来与我们遇到的问题类似.资源文件的设计器中的命名空间不正确.我通过在resx文件上手动重新运行自定义工具来修复它.
右键单击your.resx,然后单击"运行自定义工具".
小智 10
我相信你已经得到了答案,但以防万一:
您可以通过调用查看ManifestResourceName
System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames()
Run Code Online (Sandbox Code Playgroud)
检查GetString()调用中的Manifest名称和名称是否相同.
另外,请确保在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)打开resx文件属性:"Build Action"应为"Embedded Resource"
| 归档时间: |
|
| 查看次数: |
62487 次 |
| 最近记录: |