我正在基于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)
答案 0 :(得分:2)
由于还没有真正的答案,因此我想提出一个替代方法作为初步答案,直到有人找到更好的答案为止。
首先,使用Xamarin.Forms v3.6的Visual Studio 2019(16.1.2)中仍然存在问题
我发现发生这种情况是因为在Visual Studio异常设置中,我检查了所有“公共语言运行时异常”的中断。当我禁用该设置时,可以调试该应用程序而不会出现任何问题,并且资源字符串已正确加载。
接下来,我发现这似乎是ResourceManager的内部异常,无论出于何种原因,该异常都会涌入我自己的代码中。引发此异常时(只需执行两次,但这仅是您第一次访问资源),只需按F5键即可继续调试,并且该应用程序继续正常运行。
因此,有三种可能的解决方法: