程序集不允许部分信任的调用者
如何更改我的库以允许部分信任的呼叫者?
我收到以下错误:
‘/’应用程序中的服务器错误。
安全例外
说明:应用程序尝试执行安全策略不允许的操作。 要授予此应用程序所需的权限,请与系统管理员联系或在配置文件中更改应用程序的信任级别。
exception详细信息:System.Security.SecurityException:该程序集不允许部分信任的调用方。
来源错误:[没有相关的源代码行]
源文件:App_Web_kzj7vfkn.2.cs
行:0
编辑
经过一番查看问题后,似乎是导致问题的是System.Web.UI.ClientScriptManager
假设您可以访问库的源代码。
- 给你想要称之为强名的图书馆。
- 将[assembly:AllowPartiallyTrustedCallers]添加到您尝试调用的库中。
- 创建代码组以设置库的权限
这里给出了一个非常好的详细解释。另请阅读底部的链接以便更好地理解。
有可能您的程序集不是问题,但是您正在调用另一个不允许部分信任的调用者的程序集。 在运行时,您可以使用fuslogvw查找哪个程序集给您带来问题。 如果这是问题并且你有这个程序集的源代码,你还需要将[assembly:AllowPartiallyTrustedCallers]属性应用于该程序集,如果你没有源代码,我知道的唯一选择是替换麻烦的库。
我知道这是一个非常古老的问题,但我遇到了这个问题,并且能够使用与接受的答案不同的方法修复它,因为这是谷歌在搜索错误消息时的第一个结果我认为这将是有用的如果我分享我的解决方案,给别人。
当我尝试与一块硬件集成时,我遇到的问题就出现了。 硬件有自己的安装程序,可以将DLL注册到GAC中。 它安装的DLL有2个依赖DLL,但由于某些原因,当安装程序运行时,它没有注册依赖DLL。
基本上情况是,入口DLL已在GAC中注册,其两个依赖DLL未在GAC中注册,但确实存在于可执行文件旁边。
当我运行我的程序并尝试使用该硬件时,程序正在寻找可执行文件旁边的条目DLL,它找不到。 然后程序将转到GAC,在那里它将找到条目DLL。 一旦进入硬件的DLL,它最终会尝试使用不在GAC中但在可执行文件旁边的依赖DLL。 将GAC调用到可执行文件旁边的DLL会导致部分受信任的调用方错误。
我通过在可执行文件旁边放置一个条目DLL的副本来解决这个问题。
我很好奇哪些方案会起作用以及什么会导致安全错误,我发现这些是按预期工作的方案:
- 可执行文件旁边的所有三个DLL。
- GAC中的所有三个DLL。
一直失败的唯一情况是任何层都在GAC内,并且任何依赖DLL都在GAC之外。
失败的场景#1:
- GAC中的条目DLL
-
Exe#旁边的DLL#2和DLL#3
- 将DLL#2选为故障DLL失败。
失败的场景#2:
- 在GAC中输入DLL和DLL#2
-
Exe旁边的DLL#3
- 将DLL#3选为故障DLL失败。
失败的场景#3:
- 在GAC中输入DLL和DLL#3
-
exe旁边的DLL#2
- (可预测)失败选择DLL#2作为错误DLL。
我没有测试它,但我认为这是一个安全的假设,如果条目DLL和DLL#3已经在可执行文件旁边并且DLL#2已经在GAC中那么它会因为DLL#3被选为问题。
我知道答案已经很晚了,但我想补充一个答案,以帮助未来的访客。
我的情景
当我遇到这个问题时,我正在我的asp.net
应用程序中实现CCavenue Payment网关,因为CCavenue加密MCPG.CCA.Util
请在web.config
添加以下行
就我而言 –
这解决了类似的问题:
我不得不去我的dll属性,
然后按“取消阻止”按钮:
我也遇到了类似的问题,我尝试了以上所有答案,但没有一个对我有用。 显然我的情况不同,在我的情况下,框架是3.5。 我将它改为4或以上,它对我有用。
这是另一种可能的解决方案,具体取决于您使用的库和设置:确保您从“本地”驱动器运行程序。
我在主机和客户操作系统之间共享的文件夹中的VM中运行我的程序时遇到此错误消息,并且库dll存在于exe旁边。 将文件夹复制到guest虚拟机操作系统本地的驱动器可解决此问题。
有意义的是,这会导致信任问题,但更有用的错误信息会很好。