Monotouch System.Resources.ResourceManager不工作

时间:2012-01-23 19:08:53

标签: c# xamarin.ios

我有两个资源文件
strings.resx和strings.fr-CA.resx
两者都作为资源嵌入Monodevelop

正确加载英文字符串。当我改变文化时,我在资源管理器中抛出异常。

System.Resources.ResourceManager mgr = new System.Resources.ResourceManager("Mobile.Res.strings",System.Reflection.Assembly.GetAssembly(typeof(RC)));
var str = mgr.GetString("PROJECTLIST", Thread.CurrentThread.CurrentCulture);

当应该加载资源时,在以下系统代码中抛出异常。这可以在System.Resources.ResourceManager中找到。

string filename = GetResourceFileName (resourceCulture);
if (!resourceCulture.Equals (CultureInfo.InvariantCulture)) 
{
    /* Try a satellite assembly */
    Version sat_version = GetSatelliteContractVersion(MainAssembly);
    try 
    {
        Assembly a = MainAssembly.GetSatelliteAssemblyNoThrow(
            resourceCulture, 
            sat_version);
        if (a != null)
        {
            stream = a.GetManifestResourceStream (filename);
            if (stream == null)
            {
                stream = GetManifestResourceStreamNoCase (a, filename);
            }
        }
    } 
    catch (Exception) 
    {
        // Ignored
    }

对于其他文化资源文件,程序集a始终为null并引发异常。

我是否缺少项目设置?
  当我在Visual Studio上使用普通的.net解决方案执行此操作时,这似乎有效。

当我在测试.net windows环境中创建它时,我会在输出目录中创建名为fr-CA的文件夹。

更新:
我在这方面取得了一些进展。我现在使用Windows和桌面项目创建了fr-CA文件夹。然后我将Visual Studio创建的文件夹复制到我的.app包中。执行此操作后,法语资源在模拟器中正确使用。我不确定这种方法是否适用于实际设备。

1 个答案:

答案 0 :(得分:1)

由于this bug,现在无法在设备上运行。你可以自己控制该bug,以便在修复后得到通知。

我会尽快修复它,但它需要一段时间才能达到发布版本(如果你联系支持,你可能会得到修补程序,虽然它实际上已经修复)。