2010-11-11 4 views
2

Je dois détecter dans une méthode si son appelant a un accès interne à mon assembly. C'est-à-dire, si c'est un) code dans le même assemblage ou b) a une relation InternalsVisibleTo avec mon assembly. Idéalement, le contrôle devrait être rapide.Détecter si l'appelant a accès à mes composants internes d'assemblage

Quelles sont mes options?

MISE À JOUR: Je serais également partiellement satisfait s'il y avait une bonne solution pour la partie a du problème.

+5

Dans quel genre d'enfer travaillez-vous? –

+0

La méthode est-elle publique? – x0n

+3

J'ai fourni une réponse - mais par intérêt pouvez-vous expliquer pourquoi vous voulez faire cela? Peut-être qu'il existe une meilleure solution au problème en général. –

Répondre

0

Regardez dans System.Diagnostics.StackTrace

System.Diagnostics.StackTrace st = new StackTrace(); 
    MethodBase mb = st.GetFrame(1).GetMethod(); 
    Assembly a = mb.DeclaringType.Assembly; 

a) il suffit de comparer l'ensemble actuel à un

b) Je pense que vous devriez être en mesure de choisir les attributs InternalsVisibleTo sur l'ensemble

+0

Je suppose que cela échoue la contrainte "idéalement le contrôle devrait être rapide", mais je pense que c'est probablement le seul moyen fiable. – x0n

+0

Beaucoup plus vite que le temps qu'ils gaspilleront en décochant le désordre sacré du code qui en résulte s'ils mettent en œuvre un comportement dépendant de l'appelant ... –

+0

Je suis d'accord. CAS serait plus approprié ici. – x0n

Questions connexes