显然,在正确地创建资源管理器时,我的(桌面)程序无法识别资源。我读过question 6567964,该书提供了一些见解,但并未解决此问题。
我在Debian 9上使用MonoDevelop 7.8.2,Mono 5.18.1.3,未安装.NET Core。我认为那不重要吗?
我已经创建了一些文本文件资源,如此MSDN页面上所述:some-filename.en-US.txt和some-filename.es-ES.txt:
基于我在MSDN上以及其他地方所读的内容,我将它们添加到了项目中,并将它们的属性设置为“嵌入式资源”。他们的ResourceID会自动设置为“ some-filename.txt”
我已经在AssemblyInfo.cs中添加了[[assembly:NeutralResourcesLanguageAttribute(“ en”)]]“。
构建项目时,它会在Satellite文件夹中生成“ my-namespace.resource.DLL”,在我的情况下,这些文件夹位于../myapp/bin/Debug下。 DLLs权限允许任何人读取和执行。我期待“ app-name.resource.dll”。 “我的命名空间”正确吗?
因为这是在Linux中,所以我没有使用MS提到的程序集链接器,也没有使用MonoDevelop以外的任何工具。我不需要在Global Assembly Cache中安装任何东西,因此大概不需要关心签名。这是正确的吗?
在我的程序中,代码是从MSDN中的示例复制的99%:
CultureInfo newCulture = new CultureInfo("es-ES");
Thread.CurrentThread.CurrentCulture = newCulture;
ResourceManager rm = new ResourceManager("resource-id but without the extension", typeof("main-assembly-class-name").Assembly);
string str = String.Format("The current culture is {0}.\n{1}",
Thread.CurrentThread.CurrentCulture.Name,
rm.GetString("one-of-the-names-in-the-original-text-file"));
Console.Write(str);
当我运行程序并尝试访问这些资源时,它会抛出:
“找不到适合于指定区域性或中性区域性的任何资源。请确保在编译时已将blahblah.resources \正确嵌入或链接到程序集” -name-main-class”中,或者所有所需的卫星组件都可装载并经过完全签名。”
我还尝试仅使用基名称和与资源同名的内部类来构造ResourceManager,如下所述:
https://docs.microsoft.com/en-us/dotnet/api/system.resources.resourcemanager?view=netframework-4.8
我尝试仅使用NameSpace构造ResourceManager,如下所述:
我已将该页面上给出的示例程序用作独立程序,通过仅使用en-US和es-ES文件并显式选择es-ES而不是随机选择来进一步简化了该程序。
所有这些变体都会引发相同的异常。请注意,这不是“未找到文化例外”。
调试器显示正在创建ResourceManager,并且正在设置Thread.CurrentThread.CurrentCulture。问题似乎是正在创建一个能够正确引用资源的ResourceManager。
我想念什么?