Причина, по которой сборка Silverlight не двоично совместима с «нормальными» сборками .NET - PullRequest
6 голосов
/ 16 ноября 2009

Сборки Silverlight не совместимы в двоичном формате с «обычными» сборками .NET. Как это может быть, учитывая тот факт, что один и тот же компилятор используется для создания обоих типов сборок (даже если mscorlib.dll не указан для Silverlight)?

Ответы [ 3 ]

9 голосов
/ 16 ноября 2009

Хорошо, хороший вопрос. В этой области много заблуждений, и важно отделять факты от вымысла.

Художественная литература: Сборки Silverlight скомпилированы волшебными гномами Microsoft, что делает их несовместимыми с CLR для настольных компьютеров .Net.

Факт: CLR имеет эту прекрасно сформулированную систему под названием " Fusion ".
Каждая сборка имеет манифест сборки, встроенный как часть DLL / EXE.
Манифест сборки содержит несколько компонентов (имена встроенных ресурсов, информацию о системе типов и т. Д.), А также какие другие сборки требуются для этой сборки.

Fusion является частью CLR, ответственной за получение этой зависимости Сборочный манифест и поиск соответствующего физического файла.

Fusion для сборок Silverlight на рабочем столе .Net CLR - просто работает. (при условии наличия всех зависимостей)

Fusion на Silverlight CLR для настольных сборок - не будет работать.
Главным образом потому, что .Net BCL (библиотеки базовых классов) просто не существует. Как уже упоминалось, это разные mscorlib.dll, agcorlib.dll, System.dll, System.Windows.dll и т. Д.
Причина, по которой эти библиотеки отличаются, заключается в в основном безопасности. Обычный BCL делает все виды неприятных вещей с указателями, специфичными для платформы р / вызовами, файлами, реестром и чем-то еще. И мы не можем просто запустить браузер.

Итак, подведем итог:
Silverlight Asemblies -> Запуск на рабочем столе CLR == Работает
Сборки рабочего стола -> Запуск на Silverlight CLR == Не работает

Если вам нужен реальный пример сборок Silverlight, работающих на настольном компьютере, посмотрите мою статью год назад @ DLL-библиотеки SILVERLIGHT на настольном компьютере

0 голосов
/ 16 ноября 2009

Они не совместимы, потому что Silverlight использует облегченную версию mscorlib.dll. Однако вы можете использовать свой код, написанный для «нормального» .NET на Silverlight, с некоторыми хитростями.

0 голосов
/ 16 ноября 2009

Код IL такой же. Однако основные библиотеки отличаются, поэтому даже самая простая операция в библиотеке, скомпилированной для .NET, не будет работать в Silverlight, поскольку библиотека будет ссылаться на внешние библиотеки, отсутствующие в Silverlight.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...