Как получить содержимое файла общего проекта UNO в виде строки

#c# #webassembly #uno-platform

#c# #webassembly #uno-платформа

Вопрос:

В обычном C # / UWP можно без каких-либо (больших) проблем прочитать содержимое файла (или ресурса) в строковую переменную. Как это делается с целью сборки WebAssembly платформы UNO?

Что я уже пробовал: согласно консоли отладки браузера, выполнение моего кода останавливается (без каких-либо исключений), как только я пытаюсь использовать отражение, например. Прежде чем углубляться в дебри JavaScript, я решил спросить специалистов здесь. (В качестве последнего обходного пути я думал об использовании реализации HTTP-клиента, но я сделаю это, только если действительно нет полезной альтернативы.)

Ответ №1:

Цель WebAssembly для Uno на данный момент не поддерживает чтение файлов содержимого как часть System.IO.File api (и, вероятно, не будет в ближайшем будущем из-за своего синхронного API).

Самый простой способ, который работает на разных платформах, — использовать встроенные ресурсы:

 <ItemGroup>
  <EmbeddedResource Include="myfile.txt" />
</ItemGroup>
  

Затем в коде используйте что-то вроде этого:

 static string ReadResource(string fileName)
{
    var assembly = typeof(Program).Assembly;
    var resourceName = assembly.GetManifestResourceNames()
        .FirstOrDefault(f => f.Contains(fileName));

    if (!string.IsNullOrEmpty(resourceName))
    {
        using (var s = new StreamReader(assembly .GetManifestResourceStream(resourceName)))
        {
            return s.ReadToEnd();
        }
    }
    else
    {
        throw new InvalidOperationException(
            $"Unable to find resource {fileName} in {typeof(Program).Assembly}");
    }
}
  

Комментарии:

1. Почти: Вам нужно вставить «!» перед «string. IsNullOrEmpty». 🙂