2009-04-10 6 views

Répondre

7

Cela se ProgID plutôt que le ClassId et travailler même si l'ensemble est marqué visible:

 Assembly assembly = Assembly.LoadFile("someassembly.dll"); 

     bool defaultVisibility; 
     object[] assemblyAttributes = assembly.GetCustomAttributes(typeof(ComVisibleAttribute),false); 
     if (assemblyAttributes.Length == 0) 
      defaultVisibility = false; 
     else 
      defaultVisibility = (assemblyAttributes[0] as ComVisibleAttribute).Value; 

     foreach(Type type in assembly.GetTypes()) 
     { 
      bool isComVisible = defaultVisibility; 
      object []attributes = type.GetCustomAttributes(typeof(ComVisibleAttribute),true); 
      if (attributes.Length > 0) 
       isComVisible = (attributes[0] as ComVisibleAttribute).Value; 
      if (isComVisible) 
      { 
       attributes = type.GetCustomAttributes(typeof(ProgIdAttribute),true); 
       if (attributes.Length >0) 
       { 
        Console.WriteLine(String.Format("Type {0} has ProgID {1}",type.Name,(attributes[0] as ProgIdAttribute).Value)); 
       } 
      } 
     } 
+0

Comme elle; Je vais me supprimer la réponse par déférence ... –

+0

Merci, il me manquait le peu à propos de si l'ensemble de l'assemblée est marqué com visible –

Questions connexes