Различные профили Visual Studio и установка расширений к ним

Создание и запуск окружений

В большинстве случаев разработчикам не требуется работа Visual Studio в «песочнице». При этом песочница может быть достаточно большая и стабильная. Обычно все окружение и дополнения к студии находятся в единственном экземпляре. То, что студия запускается в нескольких инстансах не в счет. Окружение и настройки для них применяются одни и те же.

Однако, существует ряд задач, когда требуется получить «студию, которая словно только что установилась». Что это за задачи?

  • Тестирование дополнений для Visual Studio. Вы можете делать обзоры на дополнения, или хотите посмотреть стабильность дополнения не устанавливая его в свой рабочий экземпляр студии.
  • Разработка дополнений для Visual Studio. В этом случае все еще опаснее для разработки, так как дополнение с ошибками может надолго вывести студию из строя. Но в данном случае вы будете подстрахованы, так как для дебага студия будет запущена в «песочнице».
  • Работа с сильно различающимися настройками для нескольких проектов. Это может быть различные плагины, настройки окон, хоткеи и вообще все, что может быть настроено в студии.

Мне это понадобилось в свете тестирования дополнения к студии, которое надо устанавливать на отдельные окружения\профили. Некоторые детали о специфике задачи: Есть фреймворк, который ставится в виде VSIX пакета. Нюанс в том, что фреймворк одновременно развивается\поддерживается для нескольких номерных версий, которые не могут сосуществовать параллельно в рамках одного профиля Visual Studio.

Подробнее

Теневое копирование библиотек

сложность 200

Меня периодически занимают вопросы о разных мелких трюках со сборками, как скрыть одну в другой, или как делается система плагинов. Так же очень давно меня занимает вопрос как загружать и использовать библиотеки так, чтобы код работал, а сам файл библиотеки можно было бы удалить. Честно сказать к вопросу этому я подходил раза 4 в течении года и все как-то безрезультатно, наверно плохо хотел получить результат, так как другого объяснения я не вижу, но наконец все получилось хорошо и быстро, о чем я и хочу рассказать.

Теневое копирование (Shadow Copy) – позволяет работать с заблокированными файлами. Приложение может блокировать и обычно блокирует все библиотеки которые были использованы/используются в процессе работы приложения, файлы с которыми ведется работа. Под работой может подразумеваться изменение, перезапись, удаление, переименование и так далее.

Зачем оно надо?

Теневое копирование позволяет приложению не зависеть от библиотеки расположенной в директории загрузки все время работы, так как она копируется в приватную директорию в профайле пользователя. Таким образом, например, работает IIS с ASP.NET приложениями.

На мой взгляд, данная технология может быть полезна в следующих случаях:

  • Система обновления приложения, когда надо обновлять библиотеки приложения и при полной загрузке их нельзя переписать.
  • Система плагинов для приложения.
  • Фокусы =)

После того, как определились что такое «теневое копирование» и зачем оно нужно, можно собственно перейти к обсуждению реализации.

Подробнее

Теневое копирование библиотек

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

MEF

Сегодня я хочу рассказать о системе постороения динамического, модульного приложения с использованием Managed Extensibility Framework (MEF).  Вообще это уже достаточно старая технология, которая вылилась из системы Add-On от компании Микрософт. МEF стала дружелюбной оболочкой над монструозной системой предложенной ранее. Результат оказался настолько хорош, что MEF включили в поставку .Net Framework 4 по умолчанию, так что не потребуется искать и загружать библиотеки отдельно, беспокоится, есть ли данная библиотека у пользователя.

Так же уже понятно, что данную технологию можно использовать в Enterprise разработке, так как она в основной поставке фреймворка, а это такой аргумент, против которого менеджеры проектов не попрут. Обычно, менеджеры проектов очень неохотно идут на использование технологий и продуктов которые не упомянуты в пресс-релизах MS, даже если данная технология широко и успешно используется сообществом. Хотя их можно понять, это будет первый пункт, по которому их будут пинать в случае любых накладок.

Итак, MEF легко позволяет сделать приложение модульным, и подключение новых библиотек может быть осуществленно на лету, без использования сложных приемов. Весь код остается прозрачным и легким для понимания.

 

MEF можно использовать начиная с версии .Net 3.5, взяв необходимые библиотеки с CodePlex. Как вы уже догадались, оттуда же можно взять исходный код и посмотреть как все это работает.

Основные возможности MEF:

  • Предоставляет стандартизированный способ для организации мастер-приложения и для дополнений к нему. В общем случае дополнения не привязаны к конкретному приложению и при реализации общего интерфейса могут быть использованы разными программами, что в целом не отменяет и жесткой привязки к мастер-приложения. Дополнения могут быть зависимы друг от друга и MEF самостоятельно подключит их в нужном порядке.
  • Предоставляет возможности поиска и загрузки дополнений силами самого MEF
  • Позволяет помечать дополнения метаданными, для дополнительных возможностей по подключению и фильтрации дополнений.

Подробнее