Статьи

Как подготовить библиотеку классов для поддержки кэширования библиотеки приложений в Silverlight 4

Несколько дней назад я опубликовал одну статью « Кэширование библиотеки приложений в Silverlight 4 ». В этой статье мы подробно обсудили концепцию библиотечного кэширования с небольшой демонстрацией. Мы обсудили различные части AppManifest для поддержки этой функции для сторонних библиотек. Но иногда вам может понадобиться эта функция и для ваших собственных пользовательских библиотек, чтобы уменьшить размер файла XAP путем разделения внешних сборок в их собственный ZIP-файл, который будет загружаться приложением, когда это потребуется.

Давайте обсудим эту тему сегодня, используя небольшой пример, который поможет вам понять, как подготовить библиотеку dll для поддержки библиотечного кэширования вашим приложением. Узнайте больше, чтобы узнать об этом.

Что такое кэширование библиотеки приложений?

Прежде всего, давайте обсудим «Кэширование библиотеки приложений». Кэширование сборок не является новой вещью в Silverlight 4. Оно присутствует с Silverlight 3. Уже все мы знаем о загрузке XAP по требованию. Для этого нам нужно написать код для загрузки внешних файлов xap с помощью WebClient.

И это кэширование библиотеки приложений делает то же самое для вас. Предположим, что если у вас более крупное приложение и вы используете огромные внешние библиотеки, либо 3-й части, либо свои собственные, этот простой шаг поможет вам создать для них отдельный zip-файл, который можно загружать по требованию без написания дополнительного кода.

Подробнее об этой функции читайте в этом блоге: Кэширование библиотеки приложений в Silverlight 4 .

Подготовить проект

Прежде чем мы начнем, давайте создадим наше собственное решение для приложения Silverlight, где у нас также будет проект библиотеки классов. Не обязательно помещать проект библиотеки классов в то же решение, но для демонстрационных целей мы будем использовать то же решение здесь.

Ниже представлена ​​структура нашего проекта, в которой у нас есть собственная пользовательская библиотека с именем «ExtensionLibrary», одно приложение Silverlight с именем «LibraryCachingDemo» и веб-проект хостинга с именем «LibraryCachingDemo.Web»:

 

Демонстрация библиотечного кэширования - структура проекта

 

Как только мы закончим с созданием проекта, мы создадим проект, который сгенерирует файл dll для проекта библиотеки классов. Просто добавьте ссылку на сборку этой DLL в основной проект приложения и соберите ее еще раз. Это создаст приложение XAP с добавленной в него сборкой.

 

Демонстрация кэширования библиотеки - добавление ссылки на сборку библиотеки классов

 

Теперь пришло время выделить библиотеку из XAP и использовать функцию кэширования библиотеки приложений.

 

Подписание библиотеки классов

Прежде чем реализовать то же самое в нашем приложении, необходимо подписать сборку библиотеки. Для этого щелкните правой кнопкой мыши по проекту библиотеки и выберите Свойства из контекстного меню. Это откроет страницу свойств. Как показано ниже, перейдите на вкладку «Подписывание» и создайте файл ключа строгого имени и подпишите сборку так:

 

Демонстрация кэширования библиотеки - подписание библиотеки

 

После подписания сборки создайте проект, чтобы воссоздать сборку, подписанную надежным ключом. Теперь вам нужно извлечь «токен открытого ключа» из dll. Для этого проще всего установить dll в GAC, введя команду «gacutil -i <DLL_FILE_PATH>» из командной строки Visual Studio. Это зарегистрирует его в GAC. Обязательно откройте командную строку Visual Studio от имени администратора.

 

Вот скриншот того же самого:

 

Демонстрация кэширования библиотеки - добавьте библиотеку в GAC

 

После этого перейдите в GAC и извлеките маркер открытого ключа из установленной сборки. Запишите ключ, который потребуется на следующем шаге. После того, как вы получите ключ, вы можете удалить сборку из GAC, поскольку это не требуется на следующих шагах.

 

Генерация манифеста

Получив подписанную копию сборки с токеном открытого ключа, перейдите к исходному пути к файлу dll (в нашем случае, к папке Bin \ Debug) и создайте новый файл с именем «ExtensionLibrary.extmap.xml». Убедитесь, что этот файл имеет то же имя сборки dll.

 

Демонстрация кэширования библиотеки - создание файла манифеста сборки

 

 

Теперь откройте указанный файл и добавьте в него следующий XML-код:

 

Демонстрация кэширования библиотеки - создание определения манифеста сборки

 

 

Это на самом деле добавляет манифест для DLL. Убедитесь, что вы правильно ввели имя сборки, версию, токен открытого ключа, относительный путь и имя файла ZIP, как показано выше.

 

Вот полный код 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>ExtensionLibrary</name>

    <version>1.0.0.0</version>

    <publickeytoken>38955262d53ca29f</publickeytoken>

    <relpath>ExtensionLibrary.dll</relpath>

    <extension downloadUri="ExtensionLibrary.zip" />

  </assembly>

</manifest>

Этот шаг попросит компилятор не включать dll в XAP и создать отдельный ZIP-файл для указанной сборки, если для приложения установлено кэширование библиотеки приложения.

 

Добавление поддержки кеширования библиотеки приложений

Это последний шаг. Щелкните правой кнопкой мыши по проекту приложения Silverlight и перейдите на панель его свойств. На вкладке «Silverlight» просто установите флажок «Уменьшить размер XAP с помощью кэширования библиотеки приложений», как показано ниже:

 

Демонстрация кеширования библиотеки - включите кеширование библиотеки приложения

 

 

Теперь соберите приложение еще раз, и на этот раз вы заметите, что один ZIP-файл с именем «ExtensionLibrary.zip» был создан в папке «ClientBin» проекта приложения. Также откройте файл XAP, и на этот раз вы заметите, что файл DLL отсутствует в XAP.

 

Демонстрация кэширования библиотеки - вывод сборки в виде внешнего ZIP