15

如何更改我的库以允许部分信任的调用者?

我收到以下错误:

“/”应用程序中的服务器错误。

安全异常

说明:应用程序试图执行安全策略不允许的操作。要授予此应用程序所需的权限,请联系您的系统管理员或在配置文件中更改应用程序的信任级别。

异常详细信息:System.Security.SecurityException:该程序集不允许部分受信任的调用者。

源错误:[没有相关的源行]

源文件:App_Web_kzj7vfkn.2.cs
行:0

编辑

在对问题进行了更多研究之后,似乎是 System.Web.UI.ClientScriptManager 导致了问题

4

6 回答 6

19

假设您可以访问图书馆的资源。

这里给出了一个非常好的和详细的解释也阅读底部的链接以获得更好的理解。

有可能不是您的程序集有问题,而是您正在调用另一个不允许部分受信任的调用者的程序集。在运行时,您可以使用fuslogvw来查找哪个程序集给您带来了问题。如果这是问题所在,并且您有此程序集的来源,则还需要将[assembly:AllowPartiallyTrustedCallers]属性应用于该程序集,如果您没有来源,我所知道的唯一选择是替换麻烦的库。

于 2010-08-15T11:02:01.400 回答
8

在我的情况下 -

这解决了一个类似的问题:

我必须转到我的 dll 属性,
然后按取消阻止按钮: 在此处输入图像描述

于 2017-03-22T13:17:47.507 回答
6

我知道现在回答很晚,但我想再添加一个答案,以帮助未来的访客。

我的情景

当我遇到此问题时,我正在我的应用程序中实现CCavenue支付网关,asp.net因为 CCavenue 加密MCPG.CCA.Util

请添加以下行web.config

<system.web>

  <trust level="Full" />

</system.web>
于 2016-10-29T16:36:47.593 回答
4

我知道这是一个非常古老的问题,但我刚刚遇到了这个问题,并且能够使用与接受的答案不同的方法来修复它,因为这是谷歌搜索错误消息时的第一个结果,我认为它会很有用如果我分享我的解决方案给其他人。

当我试图与一个硬件集成时,我遇到了这个问题。硬件有自己的安装程序,可以将 DLL 注册到 GAC。它安装的 DLL 有 2 个依赖 DLL,但由于某种原因,当安装程序运行时,它没有注册依赖 DLL。

基本上这种情况是入口 DLL 在 GAC 中注册,它的两个依赖 DLL 没有在 GAC 中注册,但确实存在于可执行文件旁边。

当我运行我的程序并尝试使用该硬件时,该程序正在寻找可执行文件旁边的入口 DLL,但它找不到。然后程序会转到 GAC,在那里它会找到入口 DLL。一旦进入硬件的 DLL,它最终会尝试使用不在 GAC 中但在可执行文件旁边的依赖 DLL。将 GAC 调出到可执行文件旁边的 DLL 会引发部分受信任的调用者错误。

我通过在可执行文件旁边放置条目 DLL 的副本来解决这个问题。

我很好奇什么场景会起作用以及什么会导致安全错误,我发现这些场景可以按预期工作:

  1. 可执行文件旁边的所有三个 DLL。
  2. GAC 中的所有三个 DLL。

唯一始终失败的情况是任何层都在 GAC 内部,而任何依赖 DLL 都在 GAC 外部。

失败的场景#1:

  1. GAC中的入口DLL
  2. Exe 旁边的 DLL #2 和 DLL #3

    • 未能将 DLL #2 作为故障 DLL。

失败的场景#2:

  1. GAC 中的条目 DLL 和 DLL #2
  2. DLL #3 旁边的 Exe

    • 未能将 DLL #3 作为故障 DLL。

失败的场景#3:

  1. GAC 中的条目 DLL 和 DLL #3
  2. exe 旁边的 DLL #2

    • (可以预见)未能将 DLL #2 作为故障 DLL。

我没有对其进行测试,但我认为这是一个安全的假设,即如果条目 DLL 和 DLL #3 位于可执行文件旁边,而 DLL #2 位于 GAC 中,那么 DLL #3 将出现故障问题。

于 2016-05-03T15:52:08.747 回答
0

我也遇到了类似的问题,我尝试了以上所有答案,但没有一个对我有用。显然我的情况不同,在我的情况下,框架是 3.5。我将其更改为 4 或更高版本,它对我有用。

于 2016-11-29T11:52:26.217 回答
0

这是另一种可能的解决方案,具体取决于您使用的库和您的设置:确保您从“本地”驱动器运行程序。

当我在主机和来宾操作系统之间共享的文件夹中的虚拟机中运行我的程序时,我遇到了这个错误消息,库 dll 出现在 exe 旁边。将文件夹复制到来宾操作系统本地的驱动器修复了该问题。

这会导致信任问题是有道理的,但更有用的错误消息会很好。

于 2018-01-10T17:54:18.587 回答