Comment utiliser “InternalsVisibleTo attribut nommé Fortement de l'assemblée?
Je suis l'aide de la "InternalsVisibleTo" attribut avec une assemblée pour exposer les méthodes internes/classes de mon projet de test d'unité.
J'ai maintenant besoin d'installer cet assembly dans le GAC, donc j'ai besoin de lui donner un nom fort. Quand j'essaie de le faire, j'obtiens l'erreur suivante dans Visual Studio.
De nom fort signé assemblées devez spécifier une clé publique dans leur InternalsVisibleTo déclarations
Un peu de recherche sur Google m'a amené à l'article ci-dessous:
https://msdn.microsoft.com/en-us/library/bb763089.aspx
Cet article dispose:
"Déterminer la clé publique pour le nom fort ami de l'assemblée."
Cet article ne dit pas comment déterminer la clé publique. Où puis-je trouver la clé publique de l'assemblée? Aussi, une fois que j'ai la clé publique, serait-ce la bonne façon de déclarer l'attribut?
[assembly: InternalsVisibleTo("Namespace.Assembly.Example.Name, PublicKey=ThePublicKey")]
Semble que vous avez la poule et de l'œuf inversée, vous avez besoin de la clé publique de la de l'assemblée.
Votre "ami" de l'assemblée être fortement signé pour être utilisable dans "internes visibles" et vous avez besoin de jeton de l'autre assemblée.
La clé publique de mon test de l'unité de l'assemblée?
OriginalL'auteur Dave | 2015-06-19
Vous devez vous connecter pour publier un commentaire.
À utiliser
InternalsVisibleTo
fortement signé de l'assemblée de vos "amis" assemblages doivent être fortement signé. Public jeton de l'assemblage du test doivent être précisés dans le cadre deInternalsVisibleTo
valeur.Noter que l'attribut n'est pas utilisé lors de la validation de l'assemblée au moment de la compilation - elle précise seulement que le moment de l'exécution des contrôles (et des contrôles de compilation pour un ami de l'assemblée) doit valider l'identité. Donc, si vous juste besoin de compiler vos principaux de l'assemblée, vous pouvez spécifier n'importe quel jeton de clé publique (c'est à dire celle de Microsoft assemblées que l'on trouve sur toutes les références d'assembly dans votre site Web.Config par exemple).
Généralement car vous serez signature assemblées, vous savez que la clé publique. I. e. si vous avez du fichier snk que
sn -t youSnk.snk
montrerait la clé publique. Ou vous pouvez suivre les étapes dans L'obtention de Jeton de Clé Publique de l'Assemblée au Sein de Visual Studio pour configurer votre VS montrer publique jeton pour toute assemblée qui utilisesn -Tp {path to assembly}
pour obtenir la clé publique de l'assemblée. (Si le document est allé étapes sont copiés dans le autre réponse à cette question)OriginalL'auteur Alexei Levenkov
Pour quelqu'un qui est à l'aide de Visual Studio 2017, il est la dernière méthode :
De notre bien-aimé IDE, allez à "Outils > Outils Externes..." et "Ajouter" un nouvel outil avec ces paramètres :
Appliquer/OK ces changements.
Dans la "Solution explorer" cliquez sur votre projet nom de l'assembly, puis à la tête de "Outils > Get PublicKey".
La fenêtre de Sortie doit afficher la (très longue) de la Clé Publique, le long avec le Public Jeton de Clé.
Enfin, dans le projet qui est titulaire de la classe interne (c'est à dire l'testé projet) vous souhaitez exposer, ouvrez le "AssemblyInfo.cs" du fichier et ajoutez la ligne :
[assembly: InternalsVisibleTo("MyCompany.SolutionName.ProjectName, PublicKey=Collez votre clé publique ici")]
/!\ Vous devez supprimer les sauts de ligne à partir de votre clé publique.
Il a fonctionné parfaitement pour moi, donc j'espère que ça va faire l'affaire pour vous !
Utile. Merci.
Pour toute autre personne intéressée, j'ai eu à utiliser NETFX 4.6.1 comme nom de répertoire
l'article présente les étapes sont copiés à partir de a été écrit en 2008... Donc en effet les étapes de travail pour VS 2015.
très travaillé, si j'avais à construire la solution au moins une fois réussi le premier
OriginalL'auteur Invvard
Si vous ne testez pas votre configuration de version, c'est une simple solution de contournement:
OriginalL'auteur Chad Grant