Подтвердить что ты не робот

Поиск лучшего профиля PCL для кросс-платформенной разработки

Я работаю над расширением числа поддерживаемых платформ для своего приложения, которое используется для поддержки .NET4/Windows Store/Windows Phone, но я надеюсь также охватить Mono для Android и iOS. Я поместил всю бизнес-логику, модели и модели представления в портативные библиотеки классов (PCL), но это большая дилемма, на какой подмножество платформ я должен настроить. Каждая комбинация приводит к сбою. Вот результаты для 4 платформ, которые я мог бы использовать:

Профиль 78 (NET45 + WP8 + Store): нет проблем с TPL, await/async и поддержкой атрибута CallerMemberName (используется в базовом классе модели представления BindableBase). Но проект Mono.Android, который ссылается на такую ​​библиотеку, не может создавать жалобы на несуществующий файл System.Runtime.dll, на который следует ссылаться.

Профиль 104 (NET45 + SL4 + WP75 + Store): await/async не работает, имя CallerMember не найдено, но если я удалю все ссылки на них, проект Android будет прекрасен.

Профиль 147 (NET403 + SL5 + WP8 + Store): await/async не работает, имя CallerMember не найдено, но если я удалю все ссылки на них, то проект Android будет прекрасен.

Профиль 158 (NET45 + SL5 + WP8 + Store): await/async не работает, имя CallerMember не найдено, но если я удалю все ссылки на них, то проект Android будет прекрасен.

Так что я не совсем уверен, что выбрать. Профили 78, 104, 147 ограничены, профиль 78 является единственным, который поддерживает как await/async, так и CallerMemberName, используемый BindableBase, но он не работает на Android, жалуясь на System.Runtime.dll. Поэтому, если у вас есть опыт работы с тем, какой профиль PCL подходит для PCL-таргетинга Mono, пожалуйста, поделитесь своими мыслями.

4b9b3361

Ответ 1

Думать о номерах профилей сложно - я предпочитаю думать о платформах.

В идеале мне бы хотелось, чтобы мои проекты поддерживали:

  • .Net 3.5 и выше
  • SL3 и выше
  • Телефон WP7.x и выше
  • MonoDroid 1.6 и выше
  • MonoTouch iOS6 и выше
  • (Mac Desktop OSX Lion)

Основным проектом PCL, который я поддерживаю, является MvvmCross, для которого требуются средства Mvvm, такие как ICommand. Эти средства доступны только на платформах для .Net 4.5 и выше... что жесткий предел - я ничего не могу с этим поделать - так меняет мои потребности:

  • .Net 3.5 и выше.Net 4.5
  • SL3 и выше SL4 и выше
  • Телефон WP7.x и выше
  • MonoDroid 1.6 и выше
  • MonoTouch iOS6 и выше
  • (Mac Desktop OSX Lion)

С этим выбором на месте, это приводит меня к номеру профиля - 104 (не знаю, как платформа решила это... перестала спрашивать давно!)

Итак, я нацелил MvvmCross на профиль 104 - и он останется там, пока поддержка WP7.x по-прежнему необходима.

Этот выбор означает, что MvvmCross не может поддерживать такие функции, как async/await и CallerMemberName - но это компромисс, который мы решили сделать - у нас есть пользователи, которые нужна WP7.


Однако некоторые люди спрашивают о ожидании/асинхронном...

Чтобы использовать эти новые функции, есть некоторые взломы BCL.Async Nuget, чтобы заставить их работать в профиле 104... или эти пользователи могут настроить таргетинг своих приложений на новый профиль (тот, который не поддерживает WP7.x и SL4 ) - это заставляет их создавать свои приложения в профиле 78, но добавлять ссылки на мои сборки профиля 104.

Ни один из этих наборов решений не работает очень хорошо с близнецами Хамарина в настоящее время - например, вы сталкиваетесь с такими проблемами, как недостающая сборка System.Runtime.dll. Однако я ожидаю, что, когда Xamarin официально поддержит PCL (и после некоторого альфа/бета-тестирования), эти проблемы будут решены. Эта официальная поддержка ожидается очень скоро - вот почему я не беспокоюсь о том, чтобы тратить слишком много времени на размышления об этих проблемах...


В среднесрочной перспективе я ожидаю, что MvvmCross откажется от поддержки WP7.x и SL4. Когда это произойдет, мы также можем переместить основные библиотеки в профиль 78.


Единственная другая большая платформа, которую я знаю, которая начала поддержку PCL, - это ReactiveUI. Я полагаю, что эта платформа должна использовать профиль 78, потому что версия PCL от Reactive от Microsoft нацелена на 78.