Portable Class Library не поддерживает System.IO, почему?

Я создал переносимую библиотеку классов, которая будет использоваться в моем проекте Monodroid. Но проблема в том, что мне нужна библиотека System.IO, но, к сожалению, я не смог ее добавить.

Я даже попытался добавить его опцией "Добавить ссылку", но это было напрасно.

Почему это произошло? Как мне это сделать?

Ответ 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, которые являются асинхронными.

Создание абстракции позволяет портативным библиотекам звонить не переносимый код, и этот шаблон применим почти в любое время, когда вы необходимо получить доступ к непереносимым функциям из портативной библиотеки. из Конечно, вам нужно каким-то образом переносить код, чтобы получить ссылку на реализация абстракции. Как вы это можете, зависит от будь вы пишете кросс-платформенное приложение или общую цель библиотека повторного использования.