我创建了一个程序集,后来重命名了它。
然后我在调用时开始收到运行时错误:
toolsMenuName = resourceManager.GetString(resourceName);
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
我可以看到项目中包含的CommandBar.resx文件,我可以打开它并在那里看到“enTools”字符串。似乎任何资源都没有包含在程序集或资源中,但.NET无法解析名称。
答案 0 :(得分:29)
我认为更简单的解决方案是为每种语言创建单独的资源文件。
就此情况而言,检查包含资源的程序集是否将默认名称空间设置为相同的文本(Project-> Properties-> Default namespace;在VS中)
检查resx文件是否将属性BuildAction设置为“Embedded resource”
答案 1 :(得分:10)
我相信你已经得到了答案,但以防万一:
您可以通过调用
来查看ManifestResourceNameSystem.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames()
检查GetString()调用中的清单名称和名称是否相同。
另外,请确保在designer.resx文件中有正确的命名空间:
namespace Jfc.TFSAddIn {
...
global::System.Resources.ResourceManager temp =
new global::System.Resources.ResourceManager(
"Jfc.TFSAddIn.CommandBar", typeof(CommandBar).Assembly);
...
}
打开resx文件属性:“Build Action”应为“Embedded Resource”
答案 2 :(得分:1)
对我来说,问题的根源是命名以数字开头的rex文件:
20160216_tranlation.resx
调用StringBuilder sb = new StringBuilder();
// fill StringBuilder
using (StreamWriter sw = new StreamWriter(@"c:\file.txt"))
{
for (int i = 0; i < sb.Length; i++)
{
sw.Write(sb[i]);
}
}
时,我必须在resx文件名前添加下划线_
:
GetGlobalResourceObject
答案 3 :(得分:0)
我更正了ResourceManager静态属性&amp;中设计器文件(Resources.Designer.cs)中的命名空间。它对我有用。
请参阅以下代码:
array_walk($array, function(&$arr) {usort($arr, function($a,$b){return ($a["time"] < $b["time"]) ? -1 : ($a["time"] > $b["time"] ? 1 : 0);});});
答案 4 :(得分:0)
我在Form.cs中添加了一个临时类,同时(测试||调试)导致抛出此异常。 Form.resx文件(名称||资源ID)已修改为临时类名而不是Form类名。这给我带来了问题。通过在项目中为我的临时类创建一个单独的文件,我(更正了||缓解了这个)。
答案 5 :(得分:0)
一个解决方案是将resx文件的属性从内容更改为嵌入式资源并构建它。这次你可以获取
答案 6 :(得分:0)
我在Xamarin.Forms中遇到过这个问题,当我尝试重命名项目时,无法再使用相同的错误文本加载资源。
要解决此问题,我必须通过文本编辑器修改.csproj,并更改嵌入资源的逻辑名称。
<EmbeddedResource Include="Localization\TextResources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>TextResources.Designer.cs</LastGenOutput>
<LogicalName>YourNewNamespaceName.TextResources.resources</LogicalName>
<SubType>Designer</SubType>
</EmbeddedResource>
在重建时,请注意自动生成的类,其中所述的命名空间可能会发生变化。
希望它可以帮助那些陷入同样情况的人。
答案 7 :(得分:0)
当我在Windows窗体应用程序中的局部窗体类上方添加一个类时,遇到了此错误。
当我将班级移至部分形式课以下时,它消失了。
答案 8 :(得分:-1)
这answer解决了我的问题! GetGlobalResourceObject