Assembly.GetAssembly suppose que vous avez une instance du type, et Type.GetType suppose que le nom complet du type qui comprend le nom de l'assembly.
Si vous avez seulement le nom du type de base, vous devez faire quelque chose 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é dans la racine. Vous devez fournir l'espace de noms ou les types englobants dans le nom, ou itérer de la même manière.
Je lancerais probablement une ArgumentException dans le cas où il ne trouverait pas ce que vous cherchez. Vraisemblablement ce serait le cas exceptionnel, et alors vous pourriez aussi supposer que vous l'avez trouvé (ou mettre le code de gestion des erreurs dans une instruction catch) –
MAIS, Assembly.GetAssembly n'a pas besoin d'une instance du type, il a seulement besoin du type, donc si vous cherchez quelque chose dont vous connaissez le type à la compilation, vous pouvez utiliser typeof (Type) comme dans mon premier exemple. –
Merci pour les réponses, ça fonctionne comme un charme pour moi. Je n'avais pas le type, juste le nom du type et je savais qu'une référence à un assemblage le contenant était disponible. –