Ресурсы Xamarin.Forms + .resx - System.IO.FileNotFoundException: недопустимое изображение - PullRequest
0 голосов
/ 31 января 2019

Я создаю приложение Xamarin.Forms на основе проекта общего кода на C # и еще двух проектов для реального приложения Android + iOS.

Теперь я хочу реализовать локализацию строк, как это задокументировано здесь .Поэтому в своем решении для файла .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 не может загружать строковые ресурсы из этой сборки?

Visual Studio 2017 (15.9.6) с Xamarin.Forms v3.4

1 Ответ

0 голосов
/ 12 июня 2019

Поскольку реального ответа пока нет, я хочу представить временное решение в качестве предварительного ответа, пока кто-нибудь не найдет что-то лучшее.

Во-первых, проблема все еще существует в Visual Studio 2019 (16.1.2) с Xamarin.Forms v3.6

Я обнаружил, что это происходит потому, что в настройках исключений Visual Studio я установил флажок для всех «Общих исключений времени выполнения».Когда я отключаю этот параметр, приложение может быть без проблем отлажено, и строки ресурсов загружаются правильно.

Затем я обнаружил, что это, по-видимому, внутреннее исключение ResourceManager, которое по какой-либо причине всплыло.в мой собственный код.Просто нажмите F5, чтобы продолжить отладку, когда возникает это исключение (должно быть сделано дважды, но только при первом обращении к вашим ресурсам), и приложение продолжает работать в обычном режиме.

Таким образом, есть три возможных обходных пути:

  1. Отключить разбиение «Общих исключений времени выполнения» в настройках исключений Screenshot
  2. В настройках исключений установите «Общее время выполнения языка»Исключения "отмечены, но отключены только разрыв" System.IO.FileNotFoundException ".Screenshot 2
  3. Просто продолжайте отладку с помощью F5, когда выдается это исключение
...