0

Я пишу плагин для Visual Studio, я могу видеть все свойства всех ссылок для проекта, за исключением одного свойства.Доступ к свойствам «Вставить типы Interop» в проектную ссылку программно

Как я могу получить доступ к свойствам «Вставить типы вторжений» в программном обеспечении?

В настоящее время я использую класс VSLangProj80.Reference3 для получения свойств, но он не включает свойство «Вставить типы взаимодействия».

Я нашел ссылку на перечисление внутреннего использования Microsoft, VsProjReferencePropId100.DISPID_Reference_EmbedInteropTypes, но не знаю, как использовать его для поиска информации, которую я ищу.

ответ

1

После долгих проб и ошибок я, наконец, получил его работу. Этот url указал мне в правильном направлении.

Вкратце. VsLangProj100.dll не включает интерфейс Reference4, новый интерфейс, который должен содержать свойство EmbedInteropTypes. Решение состоит в том, чтобы сделать интерфейс самостоятельно. Для этого вам нужно знать GUID интерфейса, свойств, спецификаторов доступа и идентификаторов отправки. Вы можете проверить это, используя OLE/COM Object Viewer.

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

[Guid("F71B6036-80F1-4F08-BC59-B5D92865F629")] 
public interface Reference4 
{   
    // Reference   
    [DispId(1)] DTE DTE { get; }   
    [DispId(2)] References Collection { get; }   
    [DispId(3)] Project ContainingProject { get; }   
    [DispId(4)] void Remove();   
    [DispId(5)] string Name { get; }   
    [DispId(6)] prjReferenceType Type { get; }   
    [DispId(7)] string Identity { get; }   
    [DispId(8)] string Path { get; }   
    [DispId(9)] string Description { get; }   
    [DispId(10)] string Culture { get; }   
    [DispId(11)] int MajorVersion { get; }   
    [DispId(12)] int MinorVersion { get; }   
    [DispId(13)] int RevisionNumber { get; }   
    [DispId(14)] int BuildNumber { get; }   
    [DispId(15)] bool StrongName { get; }  
    [DispId(16)] Project SourceProject { get; }   
    [DispId(17)] bool CopyLocal { get; set; }   
    [DispId(18), TypeLibFunc(1088)] dynamic get_Extender(string ExtenderName);   
    [DispId(19)] dynamic ExtenderNames { get; }   
    [DispId(20)] string ExtenderCATID { get; }   
    [DispId(21)] string PublicKeyToken { get; }   
    [DispId(22)] string Version { get; }   
    // Reference2   
    [DispId(100)]string RuntimeVersion { get; }   
    // Reference3  
    [DispId(120)] bool SpecificVersion { get; set; }   
    [DispId(121)] string SubType { get; set; }   
    [DispId(122)] bool Isolated { get; set; }  
    [DispId(123)] string Aliases { get; set; }   
    [DispId(124)] uint RefType { get; }  
    [DispId(125)] bool AutoReferenced { get; }  
    [DispId(126)] bool Resolved { get; }   
    // Reference4  
    [DispId(127)] bool EmbedInteropTypes { get; set; }  
} 

Gr

Мартейн B