Я знаю, что это очень старый вопрос, но я только столкнулся с этой проблемой и смог исправить ее, используя метод, отличный от принятого ответа, и так как это первый результат в Google при поиске сообщения об ошибке, я думаю, что это будет полезен другим, если я поделюсь своим решением.
Проблема, с которой я столкнулся, возникла, когда я попытался интегрироваться с частью аппаратного обеспечения. У оборудования был свой собственный установщик, который регистрировал бы DLL в GAC. У установленной библиотеки DLL было 2 библиотеки зависимостей, но по какой-то причине при запуске установщика она не регистрировала библиотеки зависимостей.
По сути, сценарий состоял в том, что DLL-библиотека ввода была зарегистрирована в GAC, а две ее DLL-зависимости не были зарегистрированы в GAC, но существовали рядом с исполняемым файлом.
Когда я запустил свою программу и попытался использовать аппаратное обеспечение, программа искала входную DLL рядом с исполняемым файлом, которую не смогла найти. Затем программа отправится в GAC, где найдет входную DLL. Оказавшись внутри 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 в качестве проблемы.