Lors de l'itération à travers un ensemble d'assemblages, par ex. AppDomain.CurrentDomain.GetAssemblies(), les assemblys dynamiques lanceront une exception NotSuportedException si vous essayez d'accéder à des propriétés telles que CodeBase. Comment pouvez-vous dire qu'un assembly est dynamique sans déclencher et attraper le NotSupportedException?Comment savoir si un assembly .NET est dynamique?
Répondre
Pour vérifier si l'ensemble est dynamique:
if (assembly.ManifestModule is System.Reflection.Emit.ModuleBuilder)
Cela m'a pris un certain temps pour comprendre, si elle est ici de réponse.
Mise à jour:
Dans .NET 4.0, il est maintenant une propriété:
if (assembly.IsDynamic)
Dans .NET 4, vous pouvez également vérifier la propriété Assembly.IsDynamic.
Enfin Microsoft a fourni ceci :) C'est évidemment le chemin à parcourir à partir de maintenant. –
Avant .NET Framework 4, la solution la plus simple semble être de vérifier si l'assembly est de type System.Reflection.Emit.AssemblyBuilder. C'est la solution que nous utilisons dans notre équipe.
Si vous regardez l'implémentation de la propriété CodeBase de AssemblyBuilder, elle lève simplement une exception, indépendamment de quoi que ce soit d'autre. AssemblyBuilder est également une classe scellée, il est donc impossible pour une classe dérivée de modifier ce comportement. Donc, si vous avez un objet AssemblyBuilder, vous pouvez être certain que vous ne pouvez jamais appeler CodeBase ou GetManifestResourceStream ou un tas d'autres méthodes.
public override string CodeBase
{
get
{
throw new NotSupportedException(Environment.GetResourceString("NotSupported_DynamicAssembly"));
}
}
Et dans .NET Framework 4, vérification de la propriété Assembly.IsDynamic devrait être préférable car il est plus lisible et peut-être plus à l'épreuve, dans le cas où une nouvelle classe vient qui outrepasse isDynamic. Comme AssemblyBuilder.IsDynamic renvoie toujours la valeur true, il s'agit plus d'une preuve qu'un objet AssemblyBuilder est toujours équivalent à une "DLL dynamique".
Voici le .NET 4 isDynamic de AssemblyBuilder:
public override bool IsDynamic
{
get {
return true;
}
}
- 1. Comment savoir si un objet est dynamique dans AS3
- 2. Comment savoir si un assembly .NET a été compilé avec l'indicateur TRACE ou DEBUG
- 3. Comment importer un assembly net
- 4. Comment savoir si .NET 3.5 SP1 est installé?
- 5. Comment un assembly est-il résolu dans .NET?
- 6. Comment savoir si un fichier existe en C#/.NET?
- 7. Comment savoir si l'applet ou l'application est
- 8. Comment savoir si dll RAPI est existant
- 9. Comment savoir si un rafraîchissement est venu d'une minuterie (C#)
- 10. Comment savoir si un contrôle est actuellement invalide?
- 11. Comment savoir si un assemblage est privé ou public
- 12. Comment savoir si un objet est déjà référencé?
- 13. Comment savoir si un formulaire est en mode aide?
- 14. Comment savoir si un UIView est visible et à l'écran?
- 15. En Perl, comment savoir si une chaîne est un nombre?
- 16. Comment savoir si une classe Java est un type primitif?
- 17. Java - Comment savoir si un nom de fichier est valide?
- 18. Comment savoir si un fichier est terminé de copier
- 19. Comment savoir si un classeur Excel est protégé
- 20. Comment savoir si un PropertyInfo est d'un type enum particulier?
- 21. Comment savoir si un trigger est activé dans PostgreSQL?
- 22. Comment puis-je savoir si un objet est verrouillé? C#
- 23. Comment savoir dans Ruby si un fichier est complètement téléchargé
- 24. Chargement dynamique du fichier AS2 dans AS3 - comment savoir si le fichier est AS2
- 25. Comment savoir dans .NET si vous utilisez x86 ou x64?
- 26. Comment recharger un assembly pour un domaine d'application .NET?
- 27. Comment savoir si urllib.urlretrieve réussit?
- 28. chiffrement chaîne dans un assembly .NET
- 29. En C#, comment savoir si une propriété est statique? (.Net CF 2.0)
- 30. Comment invoquer un exe qui est une ressource incorporée dans un assembly .Net?
Pas tout à fait correct. Un modulebuilder peut être 'non-dynamique'. Vous devriez utiliser 'ModuleBuilder.IsTransient' pour vérifier 'dynamic'. – leppie