2009-01-28 8 views
4

Je génère un assemblage à la volée en utilisant Reflection.Emit, puis en l'enregistrant. Il contient un type et une méthode Main() statique dans celui-ci.Recherche de toutes les dépendances d'assemblage, style Réflecteur

.NET est assez aimable pour référencer automatiquement un ensemble requis. Cependant, dans Main(), il y a un appel à une méthode d'un autre assembly et il n'est pas référencé de la manière standard. Lorsque l'assembly est exécuté, l'exécution recherche cet assembly et ne le trouve pas, ce qui constitue un problème. Le réflecteur peut le détecter et montre cet assemblage supplémentaire sous la liste "dépend". Comment puis-je récupérer ces dépendances implicites à l'aide de l'API Reflection?

Merci

Répondre

10

Merci pour les réponses les gars, j'ai réussi à résoudre le problème.

Voici ce qui se passe:

constructeur AssemblyBuilder = ... // générer l'ensemble

builder.GetReferencedAssemblies(); => Il ne renverra PAS une référence à l'assembly utilisé dans le corps de la méthode même si j'ai déjà appelé Save() - il semble retourner uniquement les assemblys chargés en mémoire.

Assembly.ReflectionOnlyLoadFrom (nom de fichier) .GetReferencedAssemblies() => fonctionne très bien

+0

je suggère que vous appelez GetReferencedAssemblies d'une instance de l'Assemblée qui représente l'ensemble de la plie grise que vous voulez connaître les références (: P). GetReferencedAssemblies renvoie un ensemble d'instances AssemblyName. Il contient uniquement le nom complet de l'assembly, qu'il soit chargé ou non. – Megacan

7

Avez-vous essayé Assembly.GetReferencedAssemblies? Il renvoie le AssemblyName des assemblys référencés.

0

Hm ... La propriété Assembly de System.Type renvoie l'assembly qui définit le type, évidemment.

Si vous n'avez absolument aucun contrôle/connaissance sur l'IL dans cette méthode Main(), vous devrez analyser l'IL que vous venez de générer et vérifier si tous les types mentionnés sont présents. Beaucoup plus réaliste, est de s'assurer manuellement tous les types impliqués dans l'émission de call et callvirt sont référencés.

Questions connexes