程序集不允许部分信任的调用者

时间:2010-08-15 10:32:31

标签: c# visual-studio-2008 partial-trust

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

我收到以下错误:

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

     

安全例外

     

描述:尝试了应用程序   执行不允许的操作   安全政策。授予这个   申请所需的许可   请联系您的系统   管理员或更改   应用程序的信任级别   配置文件。

     

异常详细信息:   System.Security.SecurityException:   该组件不允许部分   值得信赖的来电者。

     

来源错误:[没有相关来源   线]

     

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

修改

在看了一些问题之后,似乎是导致问题的System.Web.UI.ClientScriptManager

6 个答案:

答案 0 :(得分:19)

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

给出了一个非常好的详细解释here同时阅读底部的链接以便更好地理解。

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

答案 1 :(得分: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。
  3. 唯一一直失败的情况是任何层都在GAC内部,并且任何依赖DLL都在GAC之外。

    失败的场景#1:

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

      旁边的DLL#3
      • 找不到DLL#2作为错误DLL。
    3. 失败的场景#2:

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

        旁边的DLL#3
        • 找不到DLL#3作为错误DLL。
      3. 失败的场景#3:

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

          旁边的DLL#2
          • (Predictably)将DLL#2选为故障DLL。
        3. 我没有测试它,但我认为这是一个安全的假设,如果条目DLL和DLL#3已经在可执行文件旁边,而DLL#2已经在GAC中,那么它会在DLL#3中出现故障被选为问题。

答案 2 :(得分:4)

我知道答案已经很晚了,但我想补充一个答案,以帮助未来的访客。

我的情景

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

请在web.config

中添加以下行
<system.web>

  <trust level="Full" />

</system.web>

答案 3 :(得分:4)

就我而言 -

这解决了类似的问题:

我必须去我的dll属性,
然后按“取消阻止”按钮: enter image description here

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

我在主机和来宾操作系统之间共享的文件夹中的VM中运行我的程序时遇到此错误消息,其中库dll位于exe旁边。将文件夹复制到来宾操作系统本地的驱动器可以解决问题。

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