2010-07-30 3 views
2

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

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

  • 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. Но как это сделать? Благодарю.

ответ

8

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

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

C: \ Program Files (x86) \ Microsoft SDKs \ Silverlight \ v4.0 \ Библиотеки \ Client

You 'Посмотрим, что есть файлы * .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> 

Если следовать документации, расположенной here, вы увидите, как это построено. Большинство частей должны быть очевидными, и единственным необычным аспектом может быть элемент расширения. Поместив имя файла в атрибут 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 бок о бок с исходной сборкой).

+0

Отличный! Большое спасибо! – Budda

Смежные вопросы