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

Что фактически разрешает переносная библиотека классов?

Мне было интересно, что фактически решает PCL? Если все, что он делает, ограничивает меня тем, какие типы являются кросс-платформенными, то почему Microsoft не просто сделала это как функцию в стандартной библиотеке .NET через IDE?

В принципе, я могу легко скомпилировать библиотеку .NET, содержащую некоторые объекты POCO, и ссылаться на эту DLL в моем приложении Silverlight, WPF и Windows Store без необходимости перекомпилировать или иметь какие-либо проблемы. Есть ли какие-нибудь жесткие примеры кода, который работает в PCL, который не будет работать в стандартной библиотеке .NET?


О, и я знаю, что, очевидно, есть некоторые вещи, которые будут работать в стандартной библиотеке .NET, я не беспокоюсь об этом... Полагаю, мой вопрос таков:

Есть ли какой-нибудь код, который будет компилироваться в библиотеке переносимых классов, который не будет функционировать, если этот точный код был в библиотеке .NET?

4b9b3361

Ответ 1

Две вещи:

Во-первых, если вы намерены создать библиотеку, которая работает на нескольких платформах, вы не хотите узнать во время выполнения, что вы случайно использовали API, который не был доступен на всех платформах (через исключение TypeLoadException или MissingMethodException или что-то). Таким образом, Portable Class Libraries предоставит вам intellisense для API, которые поддерживаются на всех платформах, на которые настроены таргетинг, и вы получите ошибки сборки для чего-либо вне этого набора.

Во-вторых, если вы создаете библиотеку .NET Framework, которая использует только API-интерфейсы, доступные на всех платформах, DLL, созданная еще , не будет работать на других платформах (например, Windows Phone и Silverlight) без компиляции это как библиотека для этих платформ. Похоже, вы ожидаете, что это произойдет, и это разумное ожидание, но в прошлом это было не так. Портальные библиотеки классов - это то, как мы делаем эту работу (и на самом деле это так, если вы создаете библиотеку классов для приложений Windows Store и используете только API-интерфейсы, доступные для .NET Framework и WP8, результирующий двоичный работают на обеих этих платформах без изменений).

Ответ 2

Я бы не стал слишком беспокоиться о самом коде, но просто попробуйте следующее и посмотрите, почему Portable Class Libraries полезны.

  • Создайте стандартную библиотеку классов .NET 4.5 (она может быть пуста/не содержать классов).
  • Создайте приложение Silverlight 5.
  • Попытка ссылаться на библиотеку классов .NET 4.5 из вашего приложения Silverlight 5.

Появится следующее сообщение об ошибке:

Вы не можете добавить ссылку на Demo.Utils.dll, поскольку она не была создана против времени выполнения Silverlight. Проекты Silverlight будут работать только с сборками Silverlight.

Это само по себе является просто вкусом в отношении почему Портальные библиотеки классов настолько замечательны. Жесткая часть пытается адаптировать код к агностике платформы, что звучит просто, но не так просто, как вы думаете. Поверьте мне, когда вы сначала попытаетесь прочитать файл из папки и поймете, что PCL не разрешает FileInfo, вы будете разочарованы, но руководство от Microsoft должно отвлечь от зависимостей платформы и ввести класс, который реализует интерфейс, который фактически позаботится об этом. Фактически, здесь есть хорошая статья.


Еще одна полезная статья, на которую нужно обратить внимание, немного перевернула внутреннюю работу способа создания PCL. Эта статья поможет вам понять, что почему PCL могут настраивать таргетинг на несколько платформ. https://www.simple-talk.com/blogs/2013/04/19/inside-portable-class-libraries/

Ответ 3

Я создал простое видео youtube о том, что такое портативная библиотека классов, вы можете увидеть его здесь http://www.youtube.com/watch?v=DcBfjdDHlxo

Но позвольте мне более подробно ответить на этот вопрос. Весь смысл создания проекта библиотеки классов является повторным использованием. Теперь мы хотим, чтобы это повторное использование не только в .NET-приложении, но не в .NET-приложениях, а в разных типах приложений .NET. Теперь различные типы приложений .NET - это WPF, Windows, Silverlight, Windows-телефон и т.д. enter image description here

Теперь у каждого из этих типов приложений разные бит-бит .NET framework.

Например, если приложение Silverlight используется, если вы попытаетесь ссылаться на простой "проект класса", вы закончите с ошибкой ниже. То, где переносные библиотеки классов полезны. Создавая переносимый класс, мы можем ссылаться на него в любых типах проектов .NET.

Ответ 4

Что фактически разрешает переносимая библиотека классов?

В конце концов он решит LOT! (Как Java, но в этом столетии)

Есть ли какой-нибудь код, который будет компилироваться в Portable Class Library, что не будет корректно работать, если этот точный код был в .NET. Библиотека?

По принципу, я думаю, что нет, не наоборот?

Но я думаю, будет все должное уважение, на самом деле вы можете потерять точку

Подумайте о коде для копирования/вставки, а также к клонированию проекта, ссылке кода, условных директивах компилятора (даже шаблоны T4?), а конечным результатом является ссылка DLL Hell и ненужная сложность, шаблон, многословие (не очень элегантный?)

Разве это не обходные пути к двоичной несовместимости?

Его очень рано. Но я думаю, что это потрясающее направление, в основном, когда вы видите, что Xamarin и Mono работают в поддержке pcl (они уже частично), я думаю, что это единственное, что он мог бы сохранить, как все, начиная с Html и Javascript frenzy или Генераторы кода. (давно вживую TypeSafe!)

PCL также может освободить армию С# из окон Windows

(но все это только мое мнение)

Ответ 5

В Visual Studio 2012 существуют некоторые отличия API в библиотеке портативных классов, которые относятся к .NET Framework 4. В первую очередь это касается нескольких свойств и методов в пространствах имен System.Net и System.Xml. Для получения подробной информации см. это страница MSDN.