web-dev-qa-db-fra.com

L'assemblée n'autorise pas l'appelant partiellement de confiance

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

Modifier

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

15
Andreas

En supposant que vous ayez accès aux sources de votre bibliothèque.

  • Donnez à la bibliothèque que vous essayez d'appeler un nom fort.
  • Ajoutez [Assembly: AllowPartiallyTrustedCallers] à la bibliothèque que vous essayez d'appeler . 
  • Créer un groupe de codes pour définir les autorisations sur la 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.

18
KeesDijk

Dans mon cas -

Cela a résolu un problème similaire:

Je devais aller à mes propriétés dll,
Et appuyez sur le bouton Débloquer:  enter image description here

4
banana

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:

  1. Les trois DLL à côté de l'exécutable.
  2. Les trois DLL du GAC.

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é 

  1. Entrée DLL dans le GAC
  2. DLL n ° 2 et DLL n ° 3 à côté de l'exe

    • Ne sélectionne pas DLL # 2 en tant que DLL défaillante.

Scénario n ° 2 échoué:

  1. Entrée DLL et DLL # 2 dans le GAC
  2. DLL n ° 3 à côté de l'exe

    • Échec de l'emplacement DLL # 3 en tant que DLL défaillante.

Scénario n ° 3 ayant échoué:

  1. Entrée DLL et DLL # 3 dans le GAC
  2. DLL n ° 2 à côté de l'exe

    • (De manière prévisible) Ne réussit pas à choisir la position DLL # 2 en tant que DLL défaillante.

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.

4
Mike_OBrien

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>
4
Vikas Bansal

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.

0
Tydaeus

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. 

0
Murtaza Munshi