Практическое руководство. Изменение система проекта так как активируется в нескольких версий Visual Studio

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

Примечание

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

Пометить проект как несовместимый

Проект можно пометить как несовместимый с более ранними версиями Visual Studio. Например, предположим, создается в Visual Studio 2012 проект, использующий функцию платформы .NET Framework 5. Поскольку этот проект не могут быть встроены в Visual Studio 2010 SP1, можно пометить его как несовместимый с Visual Studio 2010 SP1, так как эта версия не будет пытаться загрузить ее.

Компонент, который добавляет несовместимой функция отвечает за пометить проект как несовместимый. Компонент должен иметь доступ к интерфейсу IVsHierarchy, представляющий проекты.

Пометить проект как несовместимый

  1. Когда Visual Studio определяет проект как несовместимый отображается диалоговое окно с запросом разрешение пометить все заданные проекты как несовместимый. В случае помечая проекты как несовместимый, то AskForUserConsentToBreakAssetCompat возвращает значение S_OK в компонент. в противном случае он возвращает OLE_E_PROMPTSAVECANCELLED.

    Предупреждение

    В большинстве общих сценариях, массив IVsHierarchy будет содержать только один элемент.

  2. Если AskForUserConsentToBreakAssetCompat возвращает S_OK, компонент делает или принимает изменения, которые нарушают совместимость.

Важно!

Необходимо реализовать свойство VSHPROPID_MinimumDesignTimeCompatVersion для пометки проект как совместимостью или несовместимый.Например, если система использует файл проекта msbuild, добавьте в файл проекта свойство построения <MinimumVisualStudioVersion> со значением, равным соответствующему значению свойства VSHPROPID_MinimumDesignTimeCompatVersion.

Определить, является ли проект несовместим

Проекты, которые несовместимы с текущей версией Visual Studio должен храниться от загрузки. Кроме того, проект несовместим не может быть обновлено или восстановления. Следовательно, проект должен быть проверки совместимости дважды: во-первых, когда рассматривается для обновления или исправления, а во-вторых, прежде чем он будет загружен.

Чтобы включить обнаружение несовместимости проекта, необходимо реализовать UpgradeProject_CheckOnly и методы CreateProject. Если проект является несовместимым, то UpgradeProject_CheckOnly должен вернуть код VS_S_INCOMPATIBLEPROJECT об успешном завершении и CreateProject должно возвращать код ошибки VS_E_INCOMPATIBLEPROJECT.

Примечание

Можно кэшировать результаты в кэше проверки совместимости с методом UpgradeProject_CheckOnly таким образом, чтобы он мог также использоваться последующим вызовом CreateProject.

Например, если методы UpgradeProject_CheckOnly и CreateProject, написанных для системы проектов Visual Studio 2010 SP1 проверяет файл проекта и найти, что свойство построения <MinimumVisualStudioVersion> «11,0», Visual Studio 2010 SP1 не удалось загрузить бы проект. Кроме того, Решения Навигатор бы указывает, что проект «несовместимый», а не удалось загрузить мере его.

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

Visual Studio 2010 SP1 может преобразовать большинство проектов, созданных в предыдущей версии Visual Studio. Не только может Visual Studio 2012 этого он также может изменить некоторые типы проектов, созданных в предыдущей версии, чтобы они могли загрузить в любой версии.

Перед построением проекта загрузки Visual Studio вызывает метод UpgradeProject_CheckOnly, чтобы определить, является ли проект можно обновить. Если проект может быть обновлен, метод UpgradeProject_CheckOnly устанавливает пометить более, вызвавшего последний вызов метода UpgradeProject обновить проект. Поскольку несовместимые проекты нельзя обновить, UpgradeProject_CheckOnly сначала проверять совместимости проекта, как описано в предыдущем разделе.

В Visual Studio 2012, можно реализовать UpgradeProject_CheckOnly, чтобы определить, является ли проект можно восстановить до его загрузке. Если проект можно исправить, UpgradeProject_CheckOnly должен вернуть код VS_S_PROJECTREPAIRONLYUPGRADEREQUIRED успешного завершения. Возможные требования к обновлению перечислены в VSPUVF_REPAIRFLAGS, и они включают следующие возможности:

  1. SPUVF_PROJECT_NOREPAIR: Не требует исправления.

  2. VSPUVF_PROJECT_SAFEREPAIR: Делает совместимого проекта с помощью Visual Studio 2010 без проблем, которые могут иметь встречу в предыдущих версиях продукта.

  3. VSPUVF_PROJECT_UNSAFEREPAIR: Делает совместимого проекта с Visual Studio 2010, но с определенным риском проблем, которые могут возникнуть в предыдущих версиях продукта. Например, проект не является совместимым, если он зависит от различных версиях пакета SDK между Visual Studio 2012 и Visual Studio 2010.

  4. VSPUVF_PROJECT_ONEWAYUPGRADE: Делает несовместимого проекта с помощью Visual Studio 2010.

  5. VSPUVF_PROJECT_INCOMPATIBLE: Указывает, что Visual Studio 2012 не поддерживает этот проект.

  6. VSPUVF_PROJECT_DEPRECATED: Указывает, что данный проект больше не поддерживается.

Если приправлена система проектов (например, система проектов Visual Basic или c# имеет Интернет office (VSTO), Silverlight и другие типы проектов, построенные поверх него), то эти версии проекта могут реализовывать функции UpgradeProjectFlavor_CheckOnly от интерфейса IVsProjectFlavorUpgradeViaFactory2. Сделать этот вызов сусла работы функции IVsProjectUpgradeViaFactory4. UpgradeProject_CheckOnly упомянутый реализацией ранее. (Обратите внимание, что это система уже реализован в проекте Visual Basic или c# базовая.) В силу этой функции позволяет версии проекта также для определения требований к обновлению проекта, кроме того, что базовая система проектов определяла. Диалоговое окно совместимости 2 указывает самый строгий требований.

Для управляемых реализаций, эти 2 интерфейса доступны в сборке [Microsoft.VisualStudio.Shell.Interop.11.0.dll].

Если проекты в решении необходимо обновить или преобразования, Visual Studio 2012 перечислены в диалоговом окне вместе с всеми несовместимыми проектами. Если выбрано внести предлагаемые изменения, то вызывается метод UpgradeProject и обновления и восстановление. Метод UpgradeProject определяет, является ли предотвратили изменения, он делает проект из загрузки в более ранней версии Visual Studio, и если да, то помечает проект как несовместимый. Например, можно создать проект в Visual Studio 2010 SP1, а затем открыть этот проект в Visual Studio 2012. Если обновления или исправление возможны, то откроется диалоговое окно запрашивает разрешение внести изменения. В случае принятия условий проекты изменяются и затем загружаются. Если закрыть решение, а затем вновь обнаружено в Visual Studio 2010 SP1, то обновленные проекты, считается несовместимым и загружают отремонтированные проектов правильно.