2009-11-16 3 views
1

J'ai plusieurs projets qui utilisent la réflexion pour accéder et invoquer des membres privés ou internes dans certaines classes de frameworks.Question rapide concernant la réflexion et les permissions. .net 2008

Ces projets travaillent tous bien sur ma machine (en cours d'exécution express de Visual Basic 2008), mais ils sont garantis de travailler sur une autre machine, ou, par exemple, sur un réseau?

J'ai eu un oeil à ReflectionPermission, mais je ne suis pas sûr si je dois qu'accorder à moi ou si je l'accorde à mon projet! Je ne suis pas aussi stupide que cette question semble, honnête!

Répondre

2

L'ordinateur sur lequel exécute le programme doit accorder ReflectionPermission au programme.

Ce sera pas un problème si l'utilisateur exécute votre programme à partir du système de fichiers local. Cela peut poser un problème si l'utilisateur exécute votre programme à partir d'un partage réseau, d'un intranet, d'Internet, etc., en fonction des stratégies de l'ordinateur sur lequel le programme s'exécute. Les stratégies peuvent également tenir compte de facteurs tels que l'URL d'origine ou le partage réseau, si le programme est signé, etc. Par exemple, s'il s'agit d'une application intranet, les administrateurs réseau peuvent accorder une confiance élevée aux programmes provenant de http://our_site/approved_apps/. pas aux programmes qui proviennent d'autres parties de l'intranet ou qui ne sont pas signés.

Dans tous les cas, il est hors de votre contrôle: votre assemblée peut affirmer qu'il a besoin ReflectionPermission, mais si elle est accordée est à la configuration du système cible. (Mais encore une fois, si votre programme s'exécute à partir du système de fichiers local, cela ne devrait pas poser de problème car il fonctionnera avec une confiance totale à moins que quelqu'un n'ait réellement verrouillé la machine.)

2

Si vous pouvez exécuter le code alors vous devriez pouvoir utiliser la réflexion pour l'interroger.

De ma lecture du ReflectionPermission MSDN page il semble que vous devez utiliser pour accéder à tous les membres d'objets:

Sans ReflectionPermission, le code peut utiliser la réflexion pour accéder uniquement aux membres du public d'objets. Le code avec ReflectionPermission et les indicateurs ReflectionPermissionFlag appropriés peuvent accéder aux membres protégés et privés des objets.

2

Ils devraient fonctionner correctement sur n'importe quelle machine tant qu'elle est exécutée à partir d'un lecteur local. Par défaut, l'exécution de l'exécutable à partir d'un partage réseau sur .NET jusqu'à 3.5SP1 vous conduirait en mode confiance réduite (Internet ou Intranet) et vous n'auriez pas accès à ReflectionPermission, ce qui signifie que vous ne pourrez pas accéder à membres privés. A partir de la version 3.5SP1, ils ont changé le fonctionnement des exécutables pour leur donner une confiance totale s'ils sont exécutés directement (au lieu d'être chargés dans un autre processus via Assembly.Load et similaire).

Vous pouvez également accorder des autorisations spécifiques à un ensemble en utilisant l'outil de caspol qui fait partie du cadre. Voir this pour plus d'informations sur caspol.

Questions connexes