Xamarin.Forms + .resx字符串资源-System.IO.FileNotFoundException:无效的图像

时间:2019-01-31 17:00:51

标签: .net xamarin.forms resourcemanager

我正在基于C#共享代码项目和用于实际Android + iOS应用程序的另外两个项目创建Xamarin.Forms应用程序。

我现在想实现字符串本地化,如here所述。因此,我在解决方案中为.resx文件创建了.net标准2.0库项目,并在我的两个主要项目中引用了该项目,当然,我完成了链接文章中介绍的所有其他步骤。

当我现在想从我的一个应用程序项目中访问任何字符串资源时,ResourceManager.GetString会引发以下异常:System.IO.FileNotFoundException: Invalid Image

示例代码将是该行,但也可以是任何其他字符串资源。

public static string global_copyright {
    get {
        return ResourceManager.GetString("global_copyright", resourceCulture);
    }
}

由于可以创建该项目中定义的其他类的实例,因此我可以确认已正确找到并加载了该库项目的程序集。

现在,我将这段代码直接放在App()构造函数的开头,就像该文章中描述的那样,以调试此类问题:

var assembly = typeof(AppResources).GetTypeInfo().Assembly;
foreach (var res in assembly.GetManifestResourceNames())
{
    System.Diagnostics.Debug.WriteLine("found resource: " + res);
}

var test = AppResources.global_copyright;

第一行执行得很好,它表明在该程序集中找到了一个资源文件。它的名字也是正确的。但是在最后一行,它因该异常而崩溃。 我怎么了为什么ResourceManager无法从该程序集中加载字符串资源?

带有Xamarin.Forms v3.4的Visual Studio 2017(15.9.6)

1 个答案:

答案 0 :(得分:2)

由于还没有真正的答案,因此我想提出一个替代方法作为初步答案,直到有人找到更好的答案为止。

首先,使用Xamarin.Forms v3.6的Visual Studio 2019(16.1.2)中仍然存在问题

我发现发生这种情况是因为在Visual Studio异常设置中,我检查了所有“公共语言运行时异常”的中断。当我禁用该设置时,可以调试该应用程序而不会出现任何问题,并且资源字符串已正确加载。

接下来,我发现这似乎是ResourceManager的内部异常,无论出于何种原因,该异常都会涌入我自己的代码中。引发此异常时(只需执行两次,但这仅是您第一次访问资源),只需按F5键即可继续调试,并且该应用程序继续正常运行。

因此,有三种可能的解决方法:

  1. 在异常设置Screenshot中禁用“公共语言运行时异常”功能
  2. 在“异常设置”中,选中“公共语言运行时异常”,但仅禁用“ System.IO.FileNotFoundException”中断。 Screenshot 2
  3. 在抛出该异常时只需继续使用F5进行调试