Silverlight: как работать со стандартными сборками (часть 2)

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

После того как я включил «Уменьшить размер XAP с помощью кеширования библиотеки приложений» размер моего xap-файла уменьшился вдвое, следующие сборки были перенесены в отдельные zip-файлы:

  • System.ComponentModel.DataAnnotations;
  • System.Windows.Controls,
  • System.Windows.Controls.Data,
  • System.Windows.Controls.Data.Input,
  • System.Windows.Controls.Input,
  • System.Windows.Controls.Navigation,
  • System.Windows.Controls.Toolkit;
  • System.Windows.Data.

Но все же есть несколько других, которые кажутся хорошими кандидатами на перенос в отдельные файлы:

  • GalaSoft.MvvmLight.SL4,
  • Microsoft.Practices.ServiceLocation,
  • Microsoft.Practices.Unity.Silverlight,
  • System.Windows.Controls.Toolkit.Internals.

На все эти сборки имеются ссылки из приложения Silverlight (а также из проектов Silverlight, которые используют эти сборки).

Не могли бы вы объяснить:

  • Q1. В чем разница между этими сборками?
  • Q2. Как эти 4 сборки тоже переместить в отдельные zip файлы?

Большое тебе спасибо!

P.S. Наверное, ответ на мой вопрос в тексте:

Добавьте ссылку на сборку библиотеки в Silverlight SDK или на любую сборку, сопровождаемую допустимым файлом сопоставления assemblyShortName.extmap.xml.

Но я не понимаю, что это значит. Если я правильно понимаю, мне нужно добавить ссылку на эти сборки (которые я хочу переместить) в Silverlight SDK. Но как это сделать? Спасибо.


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


Ответы (1)


A1) Разница между двумя списками заключается в том, что первый набор сборок уже определил необходимые файлы * .extmap.xml, которые используются Visual Studio для автоматической упаковки каждой сборки в zip-файл, который затем кэшируется независимо от клиент (через веб-браузер).

Если вы посмотрите в эту папку (при необходимости измените расположение установочного диска):

C: \ Program Files (x86) \ Microsoft SDK \ Silverlight \ v4.0 \ Libraries \ Client

Вы увидите, что есть файлы * .extmap.dll почти для каждой распространенной сборки Silverlight (если не для всех). Например, вот содержимое System.Windows.Data.extmap.dll:

<?xml version="1.0"?>
<manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <assembly>
    <name>System.Windows.Data</name>
    <version>2.0.5.0</version>
    <publickeytoken>31bf3856ad364e35</publickeytoken>
    <relpath>System.Windows.Data.dll</relpath>
    <extension downloadUri="System.Windows.Data.zip" />
  </assembly>

</manifest>

Если вы следуете документации, расположенной здесь, вы Посмотрим, как это устроено. Большинство частей должно быть очевидным, и единственным необычным аспектом потенциально может быть элемент расширения. Если указать имя файла в атрибуте downloadUri, сборка автоматически упаковывается в этот файл (это zip-файл, но расширение может быть любым по вашему желанию).

Когда вы ссылаетесь на сборку, например System.Windows.Data, она обнаруживает этот файл и использует его во время сборки для создания zip-файла System.Windows.Data.zip. Если две или несколько ссылочных сборок имеют одно и то же имя файла назначения downloadUri, они будут автоматически объединены в один файл во время сборки.

A2) Вы можете следовать этому шаблону и создавать файлы * .extmap.dll для каждой сборки, которая есть во втором списке.

XML-файл должен находиться в той же папке, что и сборка, которую вы создадите.

Для GalaSoft.MvvmLight.SL4 (например, у меня не установлен этот компонент, и я не знаю, подписан ли он). Файл будет называться:

GalaSoft.MvvmLight.SL4.extmap.xml

Его содержимое будет выглядеть примерно так:

<?xml version="1.0"?>
<manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <assembly>
    <name>GalaSoft.MvvmLight.SL4</name>
    <version>#.#.#.#</version> <!-- needs the version number -->
    <!-- if there's a public key token, put it in this element, and
        uncomment it -->
    <!-- <publickeytoken></publickeytoken> -->
    <relpath>GalaSoft.MvvmLight.SL4.dll</relpath>
    <extension downloadUri="GalaSoft.MvvmLight.SL4.zip" />
  </assembly>
</manifest>

Когда этот файл существует, Visual Studio будет использовать его для создания zip-файла с именем GalaSoft.MvvmLight.SL4.zip. Все это происходит автоматически после ссылки на dll (если файл extmap.xll находится рядом с исходной сборкой).

person WiredPrairie    schedule 31.07.2010
comment
Отлично! Большое тебе спасибо! - person Budda; 31.07.2010