29 votes

Comment obtenir l'assembly (System.Reflection.Assembly) pour un type donné dans .Net?

Dans .Net, étant donné un nom de type, existe-t-il une méthode qui me dit dans quel assembly (instance de System.Reflection.Assembly) ce type est défini?

Je suppose que mon projet a déjà une référence à cet assemblage, juste besoin de savoir de quel il s'agit.

31voto

jpj625 Points 651

Assembly.GetAssembly suppose que vous avez une instance du type et Type.GetType suppose que vous avez le nom de type complet qui inclut le nom de l'assembly.

Si vous n'avez que le nom du type de base, vous devez faire quelque chose de plus comme ceci:

 public static String GetAssemblyNameContainingType(String typeName) 
{
	foreach (Assembly currentassembly in AppDomain.CurrentDomain.GetAssemblies()) 
	{
		Type t = currentassembly.GetType(typeName, false, true);
		if (t != null) {return currentassembly.FullName;}
	}

	return "not found";
}
 

Cela suppose également que votre type est déclaré à la racine. Vous devez fournir l'espace de noms ou les types englobants dans le nom, ou effectuer une itération de la même manière.

23voto

Matthew Scharley Points 43262
 Assembly.GetAssembly(typeof(System.Int32))
 

Remplacez System.Int32 par le type dont vous avez besoin. Parce qu'il accepte un paramètre Type , vous pouvez faire à peu près n'importe quoi de cette façon, par exemple:

 string GetAssemblyLocationOfObject(object o) {
    return Assembly.GetAssembly(o.GetType()).Location;
}
 

2voto

MCattle Points 1178

J'ai adapté la réponse acceptée à mes propres fins (en renvoyant l'objet d'assembly au lieu du nom de l'assembly) et refactorisé le code pour VB.NET et LINQ:

 Public Function GetAssemblyForType(typeName As String) As Assembly
    Return AppDomain.CurrentDomain.GetAssemblies.FirstOrDefault(Function(a) a.GetType(typeName, False, True) IsNot Nothing)
End Function
 

Je partage juste ici si quelqu'un d'autre voudrait une solution LINQy à la réponse acceptée.

1voto

John Saunders Points 118808
Type.GetType(typeNameString).Assembly

-2voto

280Z28 Points 49515

Si vous pouvez l'utiliser, cette syntaxe est la plus courte / la plus propre:

 typeof(int).Assembly
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X