#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». 🙂