Silverlight: как обращаться со стандартными сборками (часть 2) - PullRequest
2 голосов
/ 31 июля 2010

Необходимо удалить «стандартные» сборки из 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. Но как это сделать? Благодаря.

1 Ответ

8 голосов
/ 31 июля 2010

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 находится рядом с исходной сборкой).

...