Я читаю файлы в .Net, предназначенные для мобильных платформ, поэтому я использую PCL. Я заметил, что если я добавляю/изменяю свои целевые платформы, варианты сборки сильно различаются. В общем, как лучше всего получить максимальное количество сборок в PCL?
Вот что-то более конкретное: я хотел бы использовать System.Reflection.Assembly.GetExecutingAssembly();
И System.IO.Path
Пока мне удалось получить только одно или другое. Кто-нибудь нашел способ получить оба?
Вот класс, который я хочу реализовать:
public class ContentProviderImplementation : IContentProvider
{
private static Assembly _CurrentAssembly;
private Assembly CurrentAssembly
{
get
{
if (_CurrentAssembly == null)
{
_CurrentAssembly = Assembly.GetExecutingAssembly();
}
return _CurrentAssembly;
}
}
public StreamReader LoadContent(string relativePath)
{
string localXMLUrl = Path.Combine(Path.GetDirectoryName(CurrentAssembly.GetName().CodeBase), relativePath);
return new StreamReader(File.OpenRead(new Uri(localXMLUrl).LocalPath));
}
}
Каков наилучший концептуальный способ (со спецификой кода все в порядке, но мне не нужны прямые решения, если только он не получает область действия для правильных сборок PCL) для реализации этого для нескольких мобильных платформ? В частности: IOS, Android, Windows 8.1 и Windows Phone.
Это ответ на наиболее связанный вопрос SO:
Переносимые библиотеки классов позволяют работать с пространствами имен и классами, существующими на всех платформах, на которые вы ориентируетесь. .Net 4.5 (при условии, что вы имеете в виду полный рабочий стол WinForms/WPF), Windows 8 и Windows Phone 8 очень по-разному обращаются к файлам и имеют разные файлы, доступные для них. Доступ к файлам также сильно различается: встроенный контент; встроенные ресурсы; изолированное хранение; общие папки; полная файловая система. Не все они доступны на всех упомянутых вами платформах.
Краткий ответ. Вы, вероятно, не можете делать то, что вам нужно. Доступ к файловой системе сильно различается на разных платформах и обычно должен выполняться по-разному для каждой платформы. Что вы можете сделать, так это определить интерфейс для доступа к файлам (открыть, прочитать, сохранить и т. д.), который может использовать ваш PCL, а затем создать специфичные для платформы экземпляры, которые вы передаете в PCL по мере необходимости.
URL-адрес связанного вопроса SO: C# PCL Reading from File
Кроме того, мне нравится иметь в виду то, что я говорю. Пожалуйста, скажите мне, если я неправильно использую какую-либо терминологию программирования. Я довольно новичок на сцене программного обеспечения! Спасибо, парни!