Я использую метод IVsObjectList2.GetCategoryField2
для извлечения различной информации типа.
Теперь мне интересно, как я могу получить C# конкретную c информацию, такую как abstract
или internal
модификатор типа? Браузер объектов может отображать эту информацию.
Обновление 1:
Я предпринял еще одну попытку получить эту информацию. Через DynamicTypeService
и IVsHierarchy
(проекта) я могу получить TypeResolutionService
. Это может затем вернуть Type
, который я ищу, и сформировать Тип, который я получаю (внутренний, абстрактный и т. Д. c.)
К сожалению, это работает только с. NET Рамочные проекты. . NET Основные проекты не работают. Предполагается, что. NET основные проекты вызывают проблемы при разрешении, потому что надстройка VS (или Visual Studio SDK) работает под. NET Framework.
var dte = Package.GetGlobalService(typeof(DTE)) as DTE2;
var serviceProvider = new ServiceProvider((Microsoft.VisualStudio.OLE.Interop.IServiceProvider)dte);
IVsSimpleObjectList2 objectList;
....
objectList.CountSourceItems(index, out var vsHierarchy, out var itemid, out var pcItems);
DynamicTypeService dynamicTypeService = (DynamicTypeService)serviceProvider.GetService(typeof(DynamicTypeService));
var typeResolutionService = dynamicTypeService.GetTypeResolutionService(hier);
var type = typeResolutionService.GetType("ObjectBuilder.ObjectBrowserTestTypes.AbstractTestClass");
Больше информации здесь : Visual Studio Extension получает все классы и интерфейсы метаданных
Я все еще ищу решение. У кого-нибудь есть другая идея?