Как создать расширение Visual Studio (VSIX), предназначенное для Visual Studio 2010-2017

Наша среда сборки - VS 2015 (в идеале), ориентированная на .net 4.0.

Мы только что переработали наши плагины Visual Studio на основе шаблона проекта расширяемости Visual Studio в VS 2015. В результате VSIX отлично работает в VS 2015 и 2017 RC1.

Однако я хотел бы нацелить VSIX на VS 2010 (а в идеале 2012). Вот тут и начинаются проблемы ....

  • VS 2010 использует .net 4.0.
  • Сбрасываю компилятор на .net 4.0
  • Сборки VS 2015 (4.5) не загружаются (например, Microsoft.VisualStudio.Shell.14.0).
  • Ничего страшного, я в них ничего не использую, поэтому я отбрасываю ссылки на них в пользу версий 10.0 (2010).
  • Отлично компилируется код.
  • Но пакет VSIX не

1> C: \ Program Files (x86) \ MSBuild \ 14.0 \ bin \ Microsoft.Common.CurrentVersion.targets (1820,5): предупреждение MSB3274: основная ссылка «Microsoft.VisualStudio.Imaging, Version = 14.0.0.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a, processorArchitecture = MSIL "не удалось разрешить, потому что он был создан на основе платформы .NETFramework, Version = v4.5". Это более поздняя версия, чем текущая целевая платформа .NETFramework, Version = v4.0.

Таким образом, проблема, похоже, в том, что если я нацелен на VS 2010, мне нужно, чтобы он создавался как .net 4.0, но для сценария сборки VS 2015 требуется .net 4.5.

Мне интересно, можно ли использовать инструменты сборки VS 2010 в проекте VS 2015? Или мне нужно преобразовать мой проект VS 2015 обратно в VS 2010?

ОБНОВЛЕНИЕ

Начинаю думать, что это невозможно по другим причинам ...

https://docs.microsoft.com/en-us/visualstudio/extensibility/faq-2017

Новый формат VSIX v3 обратно совместим с VSIX v2, поэтому вы по-прежнему сможете иметь один VSIX с одним идентификатором VSIX ID, который поддерживает Visual Studio 2012 и более поздних версий. Новый формат VSIX v3 не поддерживает Visual 2010 и более ранние версии. Для поддержки Visual Studio 2010 и более поздних версий вам потребуется создать отдельное расширение (с отдельным идентификатором VSIX).


comment
Было бы хорошо поддерживать отдельные проекты для каждой версии VS, чтобы избежать подобных проблем с совместимостью. У вас могут быть только отдельные файлы .csproj, .sln и manifest. Другие ресурсы, такие как файлы классов, изображения, xmls, могут использоваться во всех проектах.   -  person Mathivanan KP    schedule 16.02.2017
comment
Это начинает выглядеть как единственное работоспособное решение, я думаю, мне удастся обойтись одним для VS 2010 и другим для 2012+.   -  person Sprotty    schedule 16.02.2017


Ответы (3)


У меня возникла аналогичная проблема, поэтому я создал пакет Nuget под названием VsixUpdater, который может автоматически выполнять миграцию VSIX, если он добавлен в проект VSIX, он даже работает со старыми версиями Visual Studio (я тестировал его с 2012 года) после добавления пакет, созданные пакеты VSIX будут совместимы с V3 и 2017, см. https://github.com/axodox/VsixUpdater для подробностей.

person Péter Major    schedule 06.03.2017

Создайте отдельный проект и VSIX для VS 2010 и еще один для VS 2012 и новее. Вы можете посмотреть мой источник здесь: https://github.com/ErikEJ/SqlCeToolbox

Обратите внимание, что мне также требуется .NET 4.5.1 для моего расширения VS 2010 (просто требуется, чтобы .NET 4.5.1 присутствовал / установлен на ПК, и он встроен в Windows 8.1 и более поздние версии)

person ErikEJ    schedule 16.02.2017

В итоге у меня осталось 2 проекта

  • Проект, ориентированный на VS 2010, скомпилированный под .Net 4.0 с использованием манифеста версии 2.0 (построен с использованием VS 2015).
  • Проект, ориентированный на VS 2012 +, скомпилированный под .Net 4.5 с использованием манифеста версии 3.0 (построен с использованием VS 2015).

Было определенное количество возни со ссылками, но, похоже, все это работает. Наша единственная нерешенная проблема - это подпись кода, поскольку VS 2015 не будет принимать ничего ниже SHA256, а VS 2012 не будет принимать SHA256 ....

person Sprotty    schedule 07.03.2017