2009-01-10 15 views

Répondre

0

Ceci est la preuve de concept que j'ai finalement trouvé pour cette question. Ce n'est pas sans défauts mais je crois qu'avec un peu de travail cela fonctionnera correctement.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.ComponentModel.Design; 
using System.Reflection; 
using System.Windows.Forms; 

namespace ReferencedAssemblies 
{ 
    public partial class GetReferencedComponents : Component, ISupportInitialize 
    { 
     private Control hostingControl; 

     public GetReferencedComponents(IContainer container) : this() 
     { 
      container.Add(this); 
     } 

     public GetReferencedComponents() 
     { 
      InitializeComponent(); 
      Assemblies = new List<string>(); 
      GetAssemblies(); 
     } 

     public List<string> Assemblies { get; private set; } 

     [Browsable(false)] 
     public Control HostingControl 
     { 
      get 
      { 
       if (hostingControl == null && this.DesignMode) 
       { 
        IDesignerHost designer = this.GetService(typeof(IDesignerHost)) as IDesignerHost; 
        if (designer != null) 
         hostingControl = designer.RootComponent as Control; 
       } 
       return hostingControl; 
      } 
      set 
      { 
       if (!this.DesignMode && hostingControl != null && hostingControl != value) 
        throw new InvalidOperationException("Cannot set at runtime."); 
       else 
        hostingControl = value; 
      } 
     } 

     public void BeginInit() 
     { 
     } 

     public void EndInit() 
     { 
      // use ISupportInitialize.EndInit() to trigger loading assemblies at design-time. 
      GetAssemblies(); 
     } 

     private void GetAssemblies() 
     { 
      if (HostingControl != null) 
      { 
       if (this.DesignMode) 
        MessageBox.Show(String.Format("Getting Referenced Assemblies from {0}", HostingControl.Name)); 
       Assemblies.Clear(); 
       AssemblyName[] assemblyNames = HostingControl.GetType().Assembly.GetReferencedAssemblies(); 
       foreach (AssemblyName item in assemblyNames) 
        Assemblies.Add(item.Name); 
      } 
     } 
    } 

}

Merci pour vos réponses!

Mike

0

Avez-vous essayé d'utiliser Assembly.GetReferencedAssemblies?

EDIT: J'ai annulé ce post car vous n'avez pas reçu d'autres réponses. Quand j'ai répondu à l'origine, je n'avais pas bien lu la question, donc je n'avais pas vu la partie "au moment du design". D'un autre côté, peut-être que cela n'a pas d'importance - cela vous donne au moins quelque chose à essayer. Bonne chance et excuses si c'est une chasse aux oies sauvage.