在Mono / MonoDevelop / Linux上使用本地化的资源文件

时间:2019-06-05 14:38:52

标签: c# .net mono monodevelop embedded-resource

显然,在正确地创建资源管理器时,我的(桌面)程序无法识别资源。我读过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:

https://docs.microsoft.com/en-us/dotnet/framework/resources/creating-resource-files-for-desktop-apps#TextFiles

基于我在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,如下所述:

https://docs.microsoft.com/en-us/dotnet/api/system.resources.resourcemanager?view=netframework-4.8#instantiating

我已将该页面上给出的示例程序用作独立程序,通过仅使用en-US和es-ES文件并显式选择es-ES而不是随机选择来进一步简化了该程序。

所有这些变体都会引发相同的异常。请注意,这不是“未找到文化例外”。

调试器显示正在创建ResourceManager,并且正在设置Thread.CurrentThread.CurrentCulture。问题似乎是正在创建一个能够正确引用资源的ResourceManager。

我想念什么?

0 个答案:

没有答案