Предотвращение включения dll в xap? - PullRequest
2 голосов
/ 10 февраля 2011

Я использую MEF в silverlight для динамической загрузки некоторых плагинов из вторичного файла xap. Этот вторичный файл XAP построен из проекта, который ссылается на различные проекты плагинов, все из которых построены на dll, которые уже находятся в первичном файле xap.

Как таковой, я хочу довольно явный контроль над тем, какие DLL попадают в этот вторичный xap. Включение любых dll из основного файла xap является излишним (а также вызывает проблемы с перекомпоновкой MEF). Но Visual Studio, похоже, настаивает на включении различных зависимых библиотек, даже если для свойства CopyLocal установлено значение True только для ссылок на проекты плагинов.

Пока единственное, что я нашел, что работает, - это добавить явные ссылки на пробелматические всегда включаемые dll в проекте верхнего уровня, который создает вторичный xap, и установить CopyLocal в False в ссылочных свойствах. Но это хрупко, так как зависимости меняются.

Думаю ли я об этом неправильно? Должен ли я просто создать отдельный xap для каждого dll плагина (в этом случае установка CopyLocal в false для всех ссылок, кажется, работает)?

Ответы [ 2 ]

1 голос
/ 10 февраля 2011

Помимо настройки Кэширование библиотеки приложений в проекте Silverlight, выбрав в настройках проекта параметр «Уменьшить размер XAP с помощью кэширования библиотеки приложений» ( source ), у вас есть файл extmap.xml в том же месте, что и ваш общий dll.

Так что, если ваш dll был Microsoft.Expression.Effects.dll, вам нужно создать (или скопировать) Microsoft.Expression.Effects.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>Microsoft.Expression.Effects</name>
    <version>2.0.20525.0</version>
    <publickeytoken>31bf3856ad364e35</publickeytoken>
    <relpath>Microsoft.Expression.Effects.dll</relpath>
    <extension downloadUri="Microsoft.Expression.Effects.zip" />
  </assembly>
</manifest>

Номер версии должен совпадать с номером версии DLL.

Если у вас нет токена открытого ключа, вы можете заменить его на null.

Это скопирует dll-файл в отдельный zip-файл, который затем может быть совместно использован несколькими xap-файлами или загружен только один раз, если он не изменится при изменении xap-файла.

0 голосов
/ 10 февраля 2011

Посмотрите здесь: http://msdn.microsoft.com/en-us/library/dd833069(VS.95).aspx

В частности, обратите внимание на раздел, озаглавленный «Настройка сборки для использования с кэшированием библиотеки приложений».В нем описан метод выполнения чего-то, что, по крайней мере, довольно близко к тому, что вы ищете.

...