小智 4

如果程序集中有 Package 类,您可以执行以下操作:

DTE2 = Package.GetGlobalService(typeof(SDTE)) as DTE2;
Run Code Online (Sandbox Code Playgroud)

然后查看 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...
  }
}
Run Code Online (Sandbox Code Playgroud)

参考:VSIX:获取 DTE 对象参考:http ://msdn.microsoft.com/en-us/library/envdte.solution.aspx

参考:http://msdn.microsoft.com/en-us/library/envdte._solution.projects.aspx