Вот один из способов сделать это. Создайте два файла natvis для VS2012, а другой для VS2013 и VS2015.
Если вы хотите реализовать visualization service, выполните следующие действия, в противном случае перейдите к развертыванию.
Вам необходимо определить два интерфейса с различными GUID и реализациями. Используйте XML-элемент UIVisualizer в файлах natvis, чтобы назначить GUID интерфейса, который соответствует файлу natvis. Теперь в методе Initialize в VSPackage, включить этот фрагмент кода:
appObject = (DTE2)GetService(typeof(DTE));
if(appObject.Version == "11.0")
{
// Register the VS2012 visualization service using ((IServiceContainer)this).AddService().
}
else
{
// Register the VS2013/VS2015 visualization service.
}
Чтобы развернуть пакет, создать два VSIX контейнеров, которые идентичны во всех отношениях кроме того, что первый включает в себя один natvis файла, а другие включают в себя другой файл natvis. Чтобы включить файл natvis, добавить Asset
элемент в манифесте VSIX:
<PackageManifest ...>
.
.
.
<Assets>
<Asset Type="NativeVisualizer" Path="natvis.xml"/>
</Assets>
</PackageManifest>
Таким образом, вы будете иметь одно расширение, но два VSIX контейнеров.
Благодарим вас, но Visual Studio Gallery не позволяет загружать несколько файлов VSIX для одного расширения. Поэтому мне придется публиковать отдельное расширение для каждой версии VS. – KindDragon
@KindDragon Проблема заключается в том, как развернуть файлы natvis в соответствующую версию VS. Один из способов - создать различные контейнеры VSIX. Другим является включение этих файлов natvis в качестве ресурсов в установщик MSI и их копирование в соответствующую папку (% USERPROFILE% \ My Documents \ Visual Studio [2012 | 2013 | 2015] \ Visualizers \) при установке расширения. Еще один способ - создать файлы natvis, когда расширение будет загружено впервые в Visual Studio. Когда начинается сеанс отладки, VS автоматически подберет правильный natvis. –
Спасибо. Я попробую с установщиком MSI – KindDragon