Je voudrais analyser un nom qualifié d'assembly dans .NET 3.5. En particulier, l'ensemble lui-même n'est pas disponible, c'est juste le nom. Je peux penser à plusieurs façons de le faire à la main mais je suppose que je pourrais manquer quelque fonctionnalité pour le faire dans les bibliothèques du système. Toute suggestion?Nom qualifié de l'assembly d'analyse?
Répondre
La classe AssemblyName peut analyser le nom de l'assembly pour vous, il suffit de transmettre la chaîne à son constructeur. Si vous avez un nom de type qualifié pour l'assemblage, je pense que vous devrez d'abord enlever la partie type de la chaîne (c'est-à-dire tout jusqu'à la première virgule).
Enlever le nom est généralement très complexe. Considérez même simple Tuple
Le constructeur AssemblyName lève FileLoadException à moins qu'il ne soit en mesure de charger l'assembly –
Consultez la classe Path. Il a un tas de fonctions d'analyse pour les noms de fichiers. Ou vous pouvez essayer:
string qualType = @"System.String, mscorlib, Version=2.0.0.0, Culture=neutral, publicKeyToken=b77a5c561934e089";
Type t = Type.GetType(qualType, false);
if (t == null)
{
Console.WriteLine("Invalid qualified type string.");
return;
}
Console.WriteLine(t.FullName);
Vous avez donc quelque chose comme ça?
Assembly assem = Assembly.LoadFile("PathToTheAssembly.dll");
Type t = assem.GetType("Namespace.And.Type.Name");
t.FullName
Si vous cherchez à analyser la forme BNF, l'exemple ci-dessus à l'aide GetType devrait travailler pour vous.
EDIT: Ok, cela devrait faire ce que vous voulez en supposant que vous avez le nom:
Assembly assem = Assembly.GetAssembly(Type.GetType(assembly_qualified_name, false));
if(assem != null)
{
byte[] pkt = assem.GetName().GetPublicKeyToken();
Version ver = assem.GetName().Version;
CultureInfo ci = assem.GetName().CultureInfo();
}
L'assembly lui-même n'est pas disponible, donc je ne peux pas opter pour un Type.GetType. –
Donc, juste le nom de l'ensemble de la chaîne? Pouvez-vous poster ce que vous avez réellement? – SwDevMan81
Si le montage est chargée, vous pouvez utiliser quelque chose comme ça:
Assembly assembly = Assembly.GetExecutingAssembly();
string assemblyName = assembly.GetName().Name;
Dans l'exemple ci-dessus je un assembly en cours d'exécution mais vous faites une boucle dans votre assembly chargé.
Mise à jour: Vous pouvez toujours charger un assemblage dans un séparé AppDomain obtenir le nom d'assemblage et une fois que vous avez terminé, décharger. Dites-moi si vous avez besoin d'un échantillon.
Eh bien, précisément, je n'ai pas l'assemblage à portée de main. Je voudrais analyser la chaîne représentant son nom. –
@Joannes, voir la partie mise à jour dans la réponse. – Vadim
Il est une implémentation de l'analyseur en Mono et BNF grammar on MSDN
De .Net 4 et vous avez une nouvelle dérogation pour Type.GetType:
public static Type GetType(
string typeName,
Func<AssemblyName, Assembly> assemblyResolver,
Func<Assembly, string, bool, Type> typeResolver,
bool throwOnError,
bool ignoreCase
)
Voir http://msdn.microsoft.com/en-us/library/ee332784%28v=vs.100%29.aspx
Ce que vous devez faire est dans l'exemple de la documentation ci-dessus:
Type t2 = Type.GetType(test,
(aName) => aName.Name == "MyAssembly" ?
Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") :
Assembly.Load(aName),
(assem, name, ignore) => assem == null ?
Type.GetType(name, false, ignore) :
assem.GetType(name, false, ignore), true
);
Vous pouvez remplacer les lambdas ci-dessus par des fonctions plus complexes.
- 1. Obtenir le nom d'hôte non qualifié dans .NET
- 2. Ignorer la version en un nom qualifié d'assembly passé à Type.GetType()
- 3. Rendre Java EE InitialContext trouver un nom d'hôte qualifié? (par rapport au serveur JBoss EJB)
- 4. Le passage d'une fonction membre non statique qualifié comme un pointeur de fonction
- 5. Comment obtenir un chemin qualifié complet vers MS Explorer dans .NET?
- 6. Comment définir la propriété FrameworkElement.Width à la valeur d'un doublon qualifié, dans le code-behind?
- 7. Conversion de nom de domaine en nom de société?
- 8. Hibernate: Parse/Translate HQL FROM partie pour obtenir l'alias de classe paires, nom de classe
- 9. Nom du fournisseur de données/nom de l'utilisateur personnalisé
- 10. Comment transformer un nom UPN en nom de connexion?
- 11. mod_rewrite - ancien nom de paramètre à nouveau nom
- 12. Extraire le nom de domaine à partir d'un nom d'hôte
- 13. Demande de nom de ville
- 14. définition du nom de fichier?
- 15. Enum Nom chaîne de valeur
- 16. Réécriture Nom de la page
- 17. Nom de fichier séquentiel BizTalk
- 18. Modifier le nom de connexion
- 19. Chargement du nom de l'imprimante
- 20. Nom de l'action/délégué Func
- 21. conventions de nom pour xibs
- 22. nom de fichier comme argument
- 23. Charger le nom de l'imprimante
- 24. Suppression de contraintes sans nom
- 25. Get nom de XSL URL
- 26. retourner un nom de méthode
- 27. Modification du nom de viewstate
- 28. Changement de cookie Nom JSESSIONID
- 29. C# type de nom complet
- 30. NoClassDefFoundError sans nom de classe
Qu'est-ce qu'un assemblage? – Kieveli
Je fais référence aux assemblages .NET ici. –