Как определить сборку решения или проекта из пакета Visual Studio (VSIX)?

Как определить сборку решения или проекта из пакета Visual Studio (VSIX)?


person Simon    schedule 27.04.2011    source источник


Ответы (2)


Если у вас есть класс Package в вашей сборке, вы можете сделать:

DTE2 = Package.GetGlobalService(typeof(SDTE)) as DTE2;

Затем посмотрите на свойство IsOpen, чтобы узнать, открыто ли решение... посмотрите на свойство Projects, чтобы найти проекты.

Однако, если вы имеете в виду, как мне получить событие при открытии решения... тогда решения, например:

public sealed class MyPackage : Package
{
  private DTE m_dte;

  protected override void Initialize()
  {
    IServiceContainer serviceContainer = this as IServiceContainer;
    m_dte = serviceContainer.GetService(typeof(SDTE)) as DTE;
    var m_solutionEvents = m_dte.Events.SolutionEvents;
    m_solutionEvents.Opened += SolutionOpened;
    ...

  }

  void SolutionOpened()
  {
     .... away you go...
  }
}

ссылка: VSIX: получение объекта DTE ссылка: http://msdn.microsoft.com/en-us/library/envdte.solution.aspx

ссылка: http://msdn.microsoft.com/en-us/library/envdte._solution.projects.aspx

person Stephen Gennard    schedule 10.11.2011
comment
Глядя на эту страницу в MSDN: msdn.microsoft.com/en-us/library/; все события помечены как Инфраструктура. Только для внутреннего использования Майкрософт. Означает ли это, что их нельзя использовать в пакете VS? - person Aaron Campbell; 04.10.2014
comment
Я не думаю, что это отвечает на вопрос ОП (и у меня тот же вопрос), как можно обнаружить событие BUILD? Вы показали, как обнаружить событие SolutionOpened. - person Rob B; 04.07.2016
comment
как мне получить доступ к скомпилированным dll (проектам)? Я пишу расширение, которое зависит от скомпилированных проектов, то есть расширение будет читать метаданные из сборок - person JobaDiniz; 21.09.2019

Взгляните на DTE.Events.BuildEvents, там есть события для OnBuildBegin и OnBuildDone.

person Daniel Fisher lennybacon    schedule 29.03.2019