封闭源程序集的“无法验证的代码未通过策略检查”
Posted
技术标签:
【中文标题】封闭源程序集的“无法验证的代码未通过策略检查”【英文标题】:"Unverifiable code failed policy check" for a closed source assembly 【发布时间】:2010-04-10 03:27:58 【问题描述】:我试图在 MSI 安装例程期间从 C# 程序的资源流中动态加载一些(购买的)程序集,但我收到“无法验证的代码未能通过策略检查”。
我在网上阅读了一些关于使用 /clr:safe 编译嵌入式程序集的提示,但我没有那个选项。有没有办法绕过这项政策检查?
谢谢。
【问题讨论】:
不是您实际问题的答案 - 但为什么将程序集隐藏在资源流中而不是直接将它们包含在 msi 中?即使您只在安装时需要它们,让 msi 引擎部署它们也不会太难。 因为我不希望它们粘在可见的地方,在某些情况下它可以在安装后运行。 我知道,这是个老问题.. 但仍然想看看,如果这有帮助吗?加载无法验证的代码的唯一方法是通过禁用验证的完全信任进程(或者可能是应用程序域)。
编辑:我不是在编造这个,one of the C# language designers said "Unverifiable code requires full trust and is generally to be avoided"
【讨论】:
不是我。我也想知道!听起来他们会有更好的建议。由于缺乏解释,我会反驳它【参考方案2】:已经为时已晚,但它可能对某人有所帮助。
我在我的项目中使用了Sqlite DLL,当我在沙盒环境中部署代码时,我遇到了异常(见下文)
[FileLoadException: Unverifiable code failed policy check. (Exception from HRESULT: 0x80131402)]
[FileLoadException: Could not load file or assembly 'System.Data.SQLite, Version=1.0.79.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139' or one of its dependencies. Unverifiable code failed policy check. (Exception from HRESULT: 0x80131402)]
我在 web.config 文件的 system.web 中添加了trust level,它工作正常。
<trust level="Full|High|Medium|Low|Minimal" originUrl="url"/>
【讨论】:
我早就放弃了这个项目,所以我无法测试,但很酷!一件事 - 似乎Full|High|Medium|Low|Minimal
是多余的,而 Full
单独包括其他人。 (我假设此语法对预期枚举类型的值执行按位OR
。)【参考方案3】:
这可能不再相关,但我最近遇到了同样的问题。如果您获取流并将其粘贴到临时文件中,则可以使用 Assembly.LoadFrom 加载程序集。
【讨论】:
以上是关于封闭源程序集的“无法验证的代码未通过策略检查”的主要内容,如果未能解决你的问题,请参考以下文章