Сборка не позволяет частично доверять вызывающему абоненту

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

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

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

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

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

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

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

Исходный файл: App_Web_kzj7vfkn.2.cs
Линия: 0

Изменить

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

Ответы

Ответ 1

Предполагая, что у вас есть доступ к источникам вашей библиотеки.

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

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

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

Ответ 2

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

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

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

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

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

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

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

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

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

  • Запись DLL в GAC
  • DLL # 2 и DLL # 3 рядом с Exe

    • Не удается установить DLL # 2 как DLL с ошибками.

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

  • Запись DLL и DLL # 2 в GAC
  • DLL # 3 рядом с Exe

    • Не удается установить DLL # 3 как DLL с ошибками.

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

  • Запись DLL и DLL # 3 в GAC
  • DLL # 2 рядом с exe

    • (Предсказуемо) Не ​​удается установить DLL # 2 как DLL с ошибками.

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

Ответ 3

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

Это позволило решить аналогичную проблему:

Мне нужно было перейти к свойствам dll,
И нажмите кнопку "Разблокировать": введите описание изображения здесь

Ответ 4

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

Мой сценарий

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

Добавьте следующие строки в web.config

<system.web>

  <trust level="Full" />

</system.web>

Ответ 5

У меня тоже была аналогичная проблема, я пробовал все вышеперечисленные ответы, но никто не работал у меня. По-видимому, мое дело было другим: в моем случае рамки были 3.5. Я изменил его на 4 или выше, и это сработало для меня.

Ответ 6

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

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

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