Ответ 1
Вы не можете использовать System.IO
, потому что это не переносная библиотека классов. System.IO
выполняет вызовы, специфичные для ОС, на которых он работает (Windows), в то время как переносная библиотека классов является кросс-платформенной.
Решение того, что вы ищете, можно найти здесь:
Что вы должны делать, когда пытаетесь написать переносную библиотеку, но вам нужна некоторая функциональность, которая не поддерживается? Вы не можете позвонить API напрямую, и вы не можете ссылаться на библиотеку, которая делает, потому что портативные библиотеки не могут ссылаться на непереносимые библиотеки. решение заключается в создании абстракции в вашей переносной библиотеке, которая обеспечивает необходимую функциональность и реализовать эту абстракцию для каждой платформы, на которую нацелена ваша портативная библиотека. Например, если вы необходимо сохранять и загружать текстовые файлы, вы можете использовать интерфейс, например это:
public interface IFileStorage
{
Task SaveFileAsync(string filename, string contents);
Task<String> LoadFileAsync(string filename);
}
Хорошая идея включить только те функции, которые вам нужны в абстракция. В этом примере интерфейс не абстрактный такие как потоки, папки или перечисляемые файлы. Это делает абстракцию более переносимой и более простой в использовании. методы возвращают задачи, так что реализация для приложений Windows Store может вызывать API-интерфейсы ввода-вывода WinRT, которые являются асинхронными.
Создание абстракции позволяет портативным библиотекам звонить не переносимый код, и этот шаблон применим почти в любое время, когда вы необходимо получить доступ к непереносимым функциям из портативной библиотеки. из Конечно, вам нужно каким-то образом переносить код, чтобы получить ссылку на реализация абстракции. Как вы это можете, зависит от будь вы пишете кросс-платформенное приложение или общую цель библиотека повторного использования.