Pour un de mes projets, j'ai besoin de générer des classes au moment de l'exécution, et je pensais que ce serait assez simple avec Reflection.Emit, mais je reçois des exceptions MemberAccess quand j'exécute du code généré qui appelle des méthodes qui sont marqués à l'intérieur de l'assemblage du générateur. Est-il possible de dire à l'exécution que l'assembly dynamique devrait pouvoir accéder directement à mon propre code? Je préfère vraiment ne pas exposer publiquement aucun de ces membres aux consommateurs de ma bibliothèque. En ce qui concerne InternalsVisibleTo, je ne sais pas comment je pourrais l'utiliser dans le cas d'assemblages générés dynamiquement. Est-ce seulement possible?Comment autoriser les assemblys Reflection.Emit à accéder aux membres internes de l'assemblage de génération?
Répondre
InternalsVisibleTo
fonctionne en ouvrant un assemblage à d'autres. Ainsi, si vous souhaitez utiliser l'assembly Foo
à partir de vos types générés, vous devez spécifier le nom de l'assembly généré dans AssemblyInfo.cs
pour Foo
.
Si vous émettez un nouvel assembly à l'aide de la classe AssemblyBuilder
, vous pouvez spécifier le nom de l'assembly généré. Ce nom doit correspondre au nom utilisé pour l'attribut InternalsVisibleTo
dans l'assembly Foo
.
Je suppose qu'il y a une raison derrière le fait que les membres de votre groupe de production sont marqués comme internes. Vous pouvez exposer les fonctionnalités nécessaires dans les méthodes publiques, ou vous n'avez plus que deux choix: InternalsVisibleTo (comme @tuinstoel mentionné dans la section des commentaires) ou Reflection (en utilisant la réflexion, vous pouvez accéder aux membres non publics dans différents assemblages) .
Je ne sais pas comment je pourrais l'utiliser dans le cas d'assemblages générés dynamiquement. Est-ce seulement possible? –
- 1. Comment accéder aux membres internes d'un syndicat?
- 2. Eclipse RCP: Comment accéder aux classes internes de plugins?
- 3. Accéder aux membres de l'autre moitié d'une classe partielle
- 4. Accès aux membres de l'application?
- 5. Tous les assemblys internes par rapport aux assemblages qui ont des dépendances externes
- 6. Accéder à des membres de formulaire d'une autre classe
- 7. Castle ActiveRecord - Assemblys de ligne de commande par rapport aux assemblys VB.Net Problème
- 8. Comment accéder aux hyperliens dans les documents PDF (iPhone)?
- 9. Accès aux membres Guid en C#
- 10. Comment accéder aux éléments de la case à cocher iFrame
- 11. Comment accéder aux positions des boutons à partir de codebehind?
- 12. Utilisation de Reflection.Emit de .NET pour générer une interface
- 13. Comment accéder aux classes de parents fantômes à ruby?
- 14. Comment accéder aux services SOAP à partir de l'iPhone
- 15. Comment autoriser les plugins à avoir des propriétés personnalisées?
- 16. Génération d'avertissements pour les membres AS3 non documentés? (ASDoc)
- 17. Quels sont les pièges à attendre de la génération de classes à partir des tables de base de données à l'aide des fichiers Reflection.Emit et xsd?
- 18. Le constructeur ne peut pas accéder aux membres privés de sa propre classe
- 19. Comment autoriser un utilisateur à accéder à un type de contenu dans Drupal6?
- 20. Accès aux événements et aux membres dans la page maître
- 21. Accès aux membres de la structure avec un pointeur
- 22. Déterminer les assemblys chargés
- 23. Programmation .NET - Puis-je accéder aux membres d'un projet C-Sharp à partir de mon projet VB.NET?
- 24. Liste de tous les assemblys .NET disponibles
- 25. iPhone: ajouter un badge aux icônes internes de mon application
- 26. Comment exposer des objets membres via CodeDOM?
- 27. TinyMCE: Possible de limiter à autoriser uniquement les puces?
- 28. Quelles sont les limites internes à WCF?
- 29. Comment autoriser l'utilisateur à ajouter des annotations aux contrôles de l'interface utilisateur dans WPF?
- 30. Accéder aux objets SharePoint à partir de Delphi
Avez-vous essayé InternalsVisibleTo? – tuinstoel