Silverlight: как работать со стандартными сборками

Обычная задача Silverlight: уменьшить размер xap-файла. Существует множество горячих руководств, в которых объясняется, как сделать ваше приложение модульным. Но я не нашел никого, кто объяснял бы, как создавать «модульные» стандартные библиотеки.

Большую часть моего xap-файла (1,7 Мб при общем размере 1,8 Мб) занимают стандартные сборки: среди них System.Windows.Controls.dll - 370Kb, System.Windows.Controls.Data.dll - 464Kb и т. Д. ...

Подскажите (или дайте ссылку на мануал), как вынести эти сборки из xap файла? Я мог бы использовать призму / единство и загружать их динамически, но в этом случае мне нужно удалить ссылки на эти сборки из моих библиотек Silverlight ... и они станут некомпилируемыми ...

Детали: представьте, у меня есть проект "ModuleAView", который содержит страницы для моего приложения. Этот модуль находится в отдельной сборке ... но все же довольно большой (содержит все упомянутые библиотеки). Если я уберу библиотеки из проекта, мои XAML-файлы станут некомпилируемыми.

Пожалуйста, порекомендуйте. Спасибо.


person Budda    schedule 25.07.2010    source источник


Ответы (2)


Одно из предложений - использовать опцию кэширования файлов сборки Silverlight. Документацию и руководство можно найти здесь. Общий размер вашего приложения не изменится, но вполне вероятно, что взаимодействие с конечным пользователем для вернувшихся пользователей улучшится, поскольку браузер кэширует отдельные сборки.

person WiredPrairie    schedule 27.07.2010
comment
Я видел несколько подходов: управлять опцией кеширования и предоставлять разные имена xap-файлов (добавить параметр даты / времени в качестве параметра get. С моей точки зрения, второй вариант более правильный, но он не работает в моей среде. Проблема с 1-й подход - ... но, вероятно, вы правы: нам не нужно менять имя xap-файла, но нам нужно сообщить браузеру, что он должен проверить, был ли файл изменен на стороне сервера и его нужно перезагрузить. Спасибо. Это не совсем тот вопрос, но ваш комментарий полезен! :) - person Budda; 28.07.2010
comment
Что ты имеешь в виду? Думаю, я не понял, в чем на самом деле был ваш вопрос. Мой ответ и предоставленная ссылка показывают, как переместить стандартные сборки из файла XAP (и как создать свои собственные). - person WiredPrairie; 28.07.2010
comment
Извините, я не понял в комментарии. Для меня было непонятно, как использование опции кеширования сборочных файлов Silverlight уменьшит размер xap-файла. Я думал, вы говорите о кешировании веб-браузера :) Ваша ссылка просто идеальна (мне не все понятно, но это тема для другого вопроса, и это дало мне хорошую базу для стартапа). Спасибо. - person Budda; 31.07.2010

Как правило, для более крупных составных приложений вы загружаете хост-приложение, которое принимает на себя «попадание» библиотек DLL (т. Е. Если вы используете x, y и z, они будут включены в хост). Другой вариант - облегченный вводный XAP, а затем загрузить дополнительные в фоновом режиме.

В любом случае, главное - продумать, как связаны ваши проекты, чтобы вы включали библиотеки DLL только один раз. Если у вас есть файл XAP, содержащий необходимую DLL, любой другой XAP, загруженный в то же приложение, может установить ссылку на «copy-local = false». Это означает, что он по-прежнему будет ссылаться, например, на System.Windows.Controls.Data.dll, но на самом деле не будет сохранять копию в сгенерированном XAP.

Итак, опять же, если вы хотите уменьшить занимаемую площадь и время загрузки начального, у вас может быть: Application.xap, который запускается и предоставляет пользователю навигацию, экран-заставку и т. Д. Он будет мгновенно динамически загружать "Libraries.xap" который содержит зависимые библиотеки DLL (элементы управления и т. д.) в фоновом режиме, и, наконец, любые другие «Module1.xap» и «Module2.xap» будут просто ссылаться на библиотеки DLL, но для локального копирования установлено значение false.

У меня есть подробный пример с исходным кодом здесь: http://csharperimage.jeremylikness.com/2010/06/advanced-silverlight-applications-using.html

person Jeremy Likness    schedule 27.07.2010