Comment modifier ma bibliothèque pour autoriser les appelants partiellement de confiance?
Je reçois l'erreur suivante:
Erreur serveur dans l'application '/'.
Exception de sécurité
Description: l’application a tenté D’exécuter une opération non autorisée par La politique de sécurité. Pour accorder à cette application L'autorisation requise , Contactez l'administrateur De votre système ou modifiez le niveau de confiance de l'application Dans le fichier de configuration .
Détails des exceptions: System.Security.SecurityException: Cet ensemble n'autorise pas partiellement Les appelants dignes de confiance.
Erreur de source: [Aucune source pertinente Lignes]
Fichier source: App_Web_kzj7vfkn.2.cs
Ligne: 0
Après un peu plus de regarder le problème, il semble que ce soit le System.Web.UI.ClientScriptManager qui cause le problème
En supposant que vous ayez accès aux sources de votre bibliothèque.
Une explication assez bonne et détaillée est donnée ici Lisez également les liens en bas pour une meilleure compréhension.
Il est possible que le problème ne réside pas dans votre Assemblée, mais que vous appeliez une autre Assemblée qui n'autorise pas les appelants dont la confiance est partielle. Au moment de l'exécution, vous pouvez utiliser fuslogvw pour trouver quel assemblage vous pose les problèmes. Si tel est le problème et que vous avez les sources de cet assembly, vous devez également appliquer l'attribut [Assembly: AllowPartiallyTrustedCallers] à cet assembly. Si vous ne disposez pas des sources, la seule option que je connaisse consiste à remplacer la bibliothèque gênante.
Je sais que c’est une question très ancienne, mais j’ai juste rencontré ce problème et j’ai pu le résoudre en utilisant une méthode différente de la réponse acceptée. Comme c’est le premier résultat obtenu sur google, je pense que cela sera utile. à d'autres si je partage ma solution.
Le problème que je rencontrais est survenu lorsque j'ai tenté d'intégrer du matériel. Le matériel avait son propre programme d’installation, qui enregistrerait un DLL dans le GAC. La DLL qu'elle avait installée avait 2 DLL de dépendance, mais pour une raison quelconque, lorsque le programme d'installation a été exécuté, il n'enregistrait pas les DLL de dépendance.
Le scénario consistait essentiellement en ce que l'Entrée DLL était enregistrée dans le GAC et que ses deux DLL de dépendance n'étaient pas enregistrées dans le GAC mais existaient à côté de l'exécutable.
Lorsque j'ai exécuté mon programme et tenté d'utiliser le matériel, celui-ci recherchait l'entrée DLL à côté de l'exécutable, qu'il ne pouvait pas trouver. Le programme irait ensuite au GAC, où il trouverait la DLL d’entrée. Une fois à l'intérieur de la DLL du matériel, il essaiera éventuellement d'utiliser les DLL de dépendance qui ne se trouvaient pas dans le GAC mais se trouvaient à côté de l'exécutable. L'appel du GAC à la DLL qui se trouvait à côté de l'exécutable générait l'erreur de l'appelant partiellement de confiance.
J'ai résolu ce problème en plaçant une copie de l'entrée DLL à côté de l'exécutable.
J'étais curieux de savoir quels scénarios fonctionneraient et ce qui provoquerait l'erreur de sécurité et j'ai découvert que ces scénarios fonctionnaient comme prévu:
Le seul scénario qui a systématiquement échoué concerne le moment où une couche se trouve à l'intérieur du GAC et que l'une des DLL de dépendance se trouve en dehors du GAC.
Scénario n ° 1 ayant échoué
DLL n ° 2 et DLL n ° 3 à côté de l'exe
Scénario n ° 2 échoué:
DLL n ° 3 à côté de l'exe
Scénario n ° 3 ayant échoué:
DLL n ° 2 à côté de l'exe
Je ne l'ai pas testé, mais je pense que c'est une hypothèse sûre de dire que si l'entrée DLL et DLL # 3 était à côté de l'exécutable et que DLL # 2 avait été dans le GAC alors il aurait eu une erreur avec DLL # 3 étant situé comme le problème.
Je sais qu’il est assez tard pour répondre, mais j’aimerais ajouter une réponse supplémentaire uniquement pour aider les futurs visiteurs.
Mon scénario
J'étais en train d'implémenter la passerelle de paiement CCavenue dans mon application asp.net
lorsque le problème m'avait été posé car le cryptage CCavenue MCPG.CCA.Util
Veuillez ajouter les lignes suivantes dans web.config
<system.web>
<trust level="Full" />
</system.web>
Voici encore une autre solution possible, selon la bibliothèque que vous utilisez et votre configuration: Assurez-vous que vous exécutez votre programme à partir d'un lecteur "local".
J'ai rencontré ce message d'erreur lors de l'exécution de mon programme dans un VM dans un dossier partagé entre l'hôte et le système d'exploitation invité, avec la bibliothèque dll présente à côté de l'exe. La copie du dossier sur un lecteur local du système d'exploitation invité a résolu le problème.
Il est logique que cela pose un problème de confiance, mais un message d'erreur plus utile serait Nice.
J'ai aussi eu le même problème, j'ai essayé toutes les réponses ci-dessus mais aucune n'a fonctionné pour moi. Apparemment, mon cas était différent, dans mon cas, le cadre était de 3,5. Je l'ai changé à 4 ou plus et cela a fonctionné pour moi.