Сборка не позволяет частично доверенному абоненту - PullRequest
15 голосов
/ 15 августа 2010

Как я могу изменить свою библиотеку, чтобы позволить частично доверенным абонентам?

Я получаю следующую ошибку:

Ошибка сервера в «/» приложении.

Исключение безопасности

Описание: попытка приложения выполнить операцию, не разрешенную политика безопасности. Чтобы предоставить это применение требуется разрешение пожалуйста, свяжитесь с вашей системой администратор или изменить уровень доверия приложения в файл конфигурации.

Сведения об исключении: System.Security.SecurityException: Эта сборка не позволяет частично доверенные абоненты.

Ошибка источника: [Нет соответствующего источника линии]

Исходный файл: App_Web_kzj7vfkn.2.cs
Строка: 0

Редактировать

После еще одного взгляда на проблему кажется, что проблема возникает из-за System.Web.UI.ClientScriptManager

Ответы [ 6 ]

19 голосов
/ 15 августа 2010

Если у вас есть доступ к источникам вашей библиотеки.

  • Дайте библиотеке, которую вы пытаетесь назвать строгим именем.
  • Добавить [сборка: AllowPartiallyTrustedCallers] в библиотеку, которую вы пытаетесь вызов.
  • Создание группы кодов для установки разрешений для библиотеки

Довольно хорошее и подробное объяснение дано здесь Также прочитайте ссылки внизу, чтобы лучше понять.

Возможно, проблема не в вашей сборке, а в том, что вы вызываете другую сборку, в которой не разрешены вызывающие вызовы с частичным доверием. Во время выполнения вы можете использовать fuslogvw , чтобы найти, какая сборка создает вам проблемы. Если это проблема, и у вас есть источники этой сборки, вам также необходимо применить атрибут [Assembly: AllowPartiallyTrustedCallers] к этой сборке, если у вас нет источников, единственный вариант, который я знаю, это заменить хлопотную библиотеку.

4 голосов
/ 22 марта 2017

В моем случае -

Это решило похожую проблему:

Мне пришлось перейти к моим свойствам DLL,
И нажать кнопку разблокировки: enter image description here

4 голосов
/ 29 октября 2016

Я знаю, что уже поздно отвечать, но я хотел бы добавить еще один ответ, чтобы помочь будущим посетителям.

Мой сценарий

Я выполнял CCavenue Платежный шлюз в моем приложении asp.net, когда у меня возникла эта проблема, из-за шифрования CCavenue MCPG.CCA.Util

Пожалуйста, добавьте следующие строки в web.config

<system.web>

  <trust level="Full" />

</system.web>
4 голосов
/ 03 мая 2016

Я знаю, что это очень старый вопрос, но я только столкнулся с этой проблемой и смог исправить ее, используя метод, отличный от принятого ответа, и так как это первый результат в Google при поиске сообщения об ошибке, я думаю, что это будет полезен другим, если я поделюсь своим решением.

Проблема, с которой я столкнулся, возникла, когда я попытался интегрироваться с частью аппаратного обеспечения. У оборудования был свой собственный установщик, который регистрировал бы DLL в GAC. У установленной библиотеки DLL было 2 библиотеки зависимостей, но по какой-то причине при запуске установщика она не регистрировала библиотеки зависимостей.

По сути, сценарий состоял в том, что DLL-библиотека ввода была зарегистрирована в GAC, а две ее DLL-зависимости не были зарегистрированы в GAC, но существовали рядом с исполняемым файлом.

Когда я запустил свою программу и попытался использовать аппаратное обеспечение, программа искала входную DLL рядом с исполняемым файлом, которую не смогла найти. Затем программа отправится в GAC, где найдет входную DLL. Оказавшись внутри DLL для аппаратного обеспечения, он в конце концов попытается использовать DLL-библиотеки зависимостей, которых нет в GAC, но которые находятся рядом с исполняемым файлом. Вызов из GAC библиотеки DLL, которая находилась рядом с исполняемым файлом, приводила к возникновению частично вызывающей доверия ошибки вызывающей стороны.

Я решил эту проблему, поместив копию входной DLL рядом с исполняемым файлом.

Мне было любопытно, какие сценарии будут работать и что может вызвать ошибку безопасности, и я обнаружил, что эти сценарии работают как ожидалось:

  1. Все три библиотеки DLL рядом с исполняемым файлом.
  2. Все три библиотеки DLL в GAC.

Единственный сценарий, который постоянно терпел неудачу, - это когда какой-либо слой находился внутри GAC, а какие-либо библиотеки зависимостей находились вне GAC.

Неудачный сценарий № 1:

  1. Ввод DLL в GAC
  2. DLL # 2 и DLL # 3 рядом с Exe

    • Не удается указать DLL # 2 в качестве неисправной DLL.

Сбой сценария № 2:

  1. Ввод DLL и DLL # 2 в GAC
  2. DLL # 3 рядом с Exe

    • Не удается указать DLL # 3 в качестве неисправной DLL.

Неудачный сценарий № 3:

  1. Ввод DLL и DLL # 3 в GAC
  2. DLL # 2 рядом с exe

    • (как и ожидалось) Сбой при выборе DLL # 2 в качестве неисправной DLL.

Я не проверял это, но я думаю, что можно с уверенностью сказать, что если бы DLL-библиотека ввода и DLL # 3 были рядом с исполняемым файлом, а DLL # 2 была в GAC, то это привело бы к ошибке DLL # 3 в качестве проблемы.

0 голосов
/ 10 января 2018

Вот еще одно возможное решение, в зависимости от используемой вами библиотеки и ваших настроек: Убедитесь, что вы запускаете программу с «локального» диска.

Я столкнулся с этим сообщением об ошибке при запускеМоя программа в виртуальной машине в папке, общей для хоста и гостевой ОС, с библиотекой dll, присутствующей рядом с exe.Копирование папки на локальный диск гостевой ОС устранило проблему.

Имеет смысл, что это вызовет проблему доверия, но было бы полезно более полезное сообщение об ошибке.

0 голосов
/ 29 ноября 2016

У меня тоже была похожая проблема, я пробовал все вышеперечисленные ответы, но у меня не получилось ни одного.Видимо мой случай был другим, В моем случае рамки были 3,5.Я изменил его на 4 или выше, и это сработало для меня.

...