2010-08-08 7 views
21

J'ai le code suivant dans un formulaire et j'essaie de trouver un moyen de charger un assembly de projet référencé par le formulaire appelé DataObjects. En utilisant le code suivant, je n'ai que six assemblages listés. En regardant les références pour le projet, le formulaire est dedans, il y a treize références d'assemblage. Quel est le problème ici?GetReferencedAssemblies ne retourne pas tous les assemblages

private void ListReferencedAssemblies() 
{ 
    var assemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies(); 
    foreach (var assembly in assemblies) 
    { 
     referencesListBox.Items.Add(assembly.Name); 
    } 
} 

Répondre

28

Pourriez-vous s'il vous plaît vérifier le manifeste de l'assemblée pour voir ce qui est référencé ici?

Le compilateur C# a tendance à retirer les assemblages référencés du manifeste s'ils ne sont pas utilisés. Par conséquent, si vous ne faites référence à aucun type de l'assembly B ou si vous ne faites référence qu'aux constantes de l'assembly B (qui sont inline par complier), vous n'aurez pas ces références.

+6

Y a-t-il un moyen de forcer le chargement de l'assemblage 'inutilisé'? – ProfK

+0

Assembly.Load() si vous connaissez l'emplacement à charger dans le domaine actuel ou que vous écrivez un code fictif pour faire référence à des types d'assemblages 'inutilisés'. –

+2

Je vous crois (je suis en train de courir le même problème en ce moment), mais avez-vous une source? – edhedges

7

Le compilateur n'inclura pas les références d'assembly dans l'assembly de sortie qui ne sont pas réellement utilisées dans le code.

Seuls les assemblages utilisés à partir du code seront référencés dans l'assemblage de sortie.

+0

"qui ne sont pas réellement utilisés dans le code" - Je pense que cela devrait être écrit différemment. Quand je fais appel à quelque chose que j'appelle sur la présence de types découverts par réflexion (dans mon cas, via MEF), ces types * sont * utilisés. Autrement dit, ils seraient utilisés, si le compilateur n'avait pas supprimé la référence et donc fait planter mon application. –

Questions connexes