2

Я пишу фреймворк Windows Phone с Windows 8 в виду. Это означает, что я создаю Portable Class Library (PCL), который будет использоваться на обеих платформах.Отсутствует свойство .net 4.5 в коде PortableLibrary

Прямо сейчас мой PCL предназначен для приложений .NET 4.5, Windows Phone 8 и Windows Store, как вы можете видеть в свойствах проекта.

PCL Target Frameworks

В этом проекте мне нужно использовать Path.DirectorySeparatorChar, но я получаю следующее сообщение об ошибке компилятора:
System.IO.Path' does not contain a definition for 'DirectorySeparatorChar'

Я понимаю, что этот конкретный символ может отличаться в различных целенаправленных ОСАХ (I действительно не знаю, если они есть), но почему компилятор жалуется на это? Я имею в виду, что в документе help doc говорится, что он поддерживается .NET Framework 4.5, я нацелен на правильную структуру? Действительно ли PCL нацелен на полную .net framework 4.5?

+1

Согласен, что загадка, почему «Path.DirectorySeparatorChar» не входит в состав PCL, поскольку он * доступен * на всех платформах, на которые вы нацеливаетесь, а несколько методов «Путь» - это PCL. ** Но **, для чего вам нужно свойство? Возможно, вы можете обойти его, используя 'Path.Combine (string [])' непосредственно, который * * * доступен в PCL. –

+0

Я знаю, мне просто интересно, почему он не был там? Я чувствую, что я иду по воздуху здесь :( – sebagomez

+0

Возможно, причина заключалась в том, чтобы запретить разработчикам писать свои собственные функции, которые управляют путями, и поощрять их вместо этого использовать класс Path? – Soonts

ответ

4

В отношении к Path.DirectorySeparatorChar:

Насколько я помню, мы удалили его из Windows Store, чтобы препятствовать ручному анализу путей. В общем, вы должны использовать Path.Combine() для сборки путей и Path.GetDirectoryName() для их расщепления. Чтобы проверить наличие недопустимых символов, существует другой метод, который позволяет получить их.

Практически говоря, для чего вам нужно имущество?

Обновление: Чтобы ответить на ваш первоначальный вопрос о понимании профилей: Профили представляют собой пересечения API между платформами, которые вы выбрали в диалоге PCL. Вообще говоря, чем меньше платформ вы нацеливаете, так и более свежие версии, тем больше API вы получаете. Проверка всех платформ в самой старой версии в основном дает вам самый низкий общий знаменатель.

Поскольку вы нацелились на .NET 4.5 и .NET Windows Store, вы не можете получить доступ к Path.DirectorySeparatorChar, потому что это свойство не включено в Windows Store.

+0

Мне это действительно не нужно. Мне было интересно, почему я не видел его, если я нацелился на .net 4.5, и это свойство является частью .net 4.5. Я думаю, что эти «профили», о которых я упоминал ранее, являются причиной. Я бы хотел больше узнать об этих 'профилях' – sebagomez

+1

Обновленный ответ. –

1

Итак, вот реальный ответ на этот вопрос, взятый из MSDN forum.

Когда вы создаете PCL, вы можете иметь только подмножество API-интерфейсов, определенных в этом конкретном профиле. Профиль - это список API-интерфейсов, видимый во всех платформах.

Теперь, даже если некоторый API существует на обеих отдельных платформах, это не означает, что он будет автоматически находиться в профиле PCL. Почему это отсутствует, так это догадываться, но вы не можете сами вывести эти причины.

Если вы посмотрите официальную документацию по MSDN (кросс-платформенная разработка с .NET Framework), вы заметите, что существует несколько ограничений на то, что можно использовать. Я предполагаю, что это конкретное свойство не удовлетворяет этим ограничениям.

И хороший способ узнать, является конкретный метод поддерживается основан на иконах документации

Ваш PCL можно использовать методы .NET, которые доступны для всех своих целей. Поскольку PathDirectorySeparator недоступен для приложений Windows Store, он недоступен в PCL, предназначенных для приложений Windows Store. Вы можете видеть, что он не имеет зеленый хозяйственная сумка маркер для поддержки магазина на http://msdn.microsoft.com/en-us/library/system.io.path.aspx