Le mot-clé interne en C# peut rendre les méthodes, champs ou attributs marqués disponibles uniquement dans l’assemblage courant, alors que se passerait-il si d’autres assemblages devaient utiliser cette méthode interne ? .NET propose un moyen d’accomplir cette fonction similaire à la classe ami en C++, qui consiste à utiliser InternalsVisibleTo.
C’est courant lors des tests, et un autre projet est nécessaire pour tester la fonctionnalité marquée par la méthode interne dans le projet, donc avec InternalsVisibleTo, nous n’avons pas besoin de modifier une méthode qui ne devrait pas être publique à publique pour faire des tests unitaires.
Il y a encore quelques éléments à surveiller lors de l’utilisation d’InternalsVisibleTo, notamment PublicKey qui n’est pas facile à comprendre, parlons de la façon d’utiliser ce IntralsVisibleTo :
Expliquons d’abord le postulat : le Project1 est un projet fonctionnel, et le Project1.Test (nom de l’assemblage : Project1.Test.dll) est un projet test pour le Project1.
1. Ouvrez le fichier Assembly.cs de Project1 et ajoutez cette phrase à la fin du fichier :
PublicKey=****** doit être remplacé par la clé publique Project1.Test.dll ; pour savoir comment obtenir la PublicKey, veuillez consulter la section Notes à la fin de l’article.
2. Vérifier cet espace de noms : System.Runtime.CompilerServices est ajouté à la référence d’espace de noms du Assembly.cs, car InternalsVisibleTo se trouve dans l’espace de noms System.Runtime.CompilerService.
Notes:
1. Comment obtenir une Clé Publique ?
R : Sous la ligne de commande, utilisez sn -tp Project1.Test.dll pour voir PublicKey et PublicKeyToken
2. Si Project1 est un projet à nom fort, alors InternalsVisibleTo doit spécifier une Clé Publique, donc Project1.Test doit également utiliser une signature forte pour utiliser correctement InternalsVisibleTo, sinon la compilation provoquera une erreur si Project1 n’utilise pas de signature forte, Ensuite, Project1.Test n’a pas besoin d’utiliser de signatures fortes, et lorsqu’on utilise InternalsVisibleTo, seul le nom de l’assemblage est requis, et il n’est pas nécessaire de définir PuklicKey. |