可以在中等信任环境中运行 C++ dll 吗?

Posted

技术标签:

【中文标题】可以在中等信任环境中运行 C++ dll 吗?【英文标题】:Possible to run a C++ dll in a medium trust environment? 【发布时间】:2012-01-31 13:38:59 【问题描述】:

我一直在使用一个开源 C++ 项目,当我在我的开发机器上运行它时(完全信任)它工作正常。当我将它部署到我的托管环境时,我的网站会引发以下错误:

System.IO.FileLoadException:无法验证的代码未能通过策略检查。

根据我的阅读,这是因为我的托管环境以中等信任度运行。我可以更改 C++ 项目中的任何设置以使此 dll 在中等信任环境中可用吗?

更新:

根据@shf301 的回答做了更多调查后,我在the project I am working with 的文档中找到了这句话:

第二个项目面向 .NET 开发人员。我写了一个包装器 围绕这个 C++ 项目管理 C++。结果编译成 .NET 动态链接库。

这不是意味着代码应该在中等信任下运行吗?

【问题讨论】:

【参考方案1】:

是否管理 C++ 代码?否则它是一个 DLL,而不是一个程序集。程序集是一个 .NET 概念,它不适用于未管理的 DLL。

如果 DLL 是非托管的,或者它是托管的并包含本机代码,则为 you can't use it in a medium trust environment。

您的选择是更改您正在运行的信任环境或重写库,使其成为完全托管的代码。

【讨论】:

好的,听起来这是可能的。我需要做什么才能将项目更改为完全托管的代码?如果你能指出我正确的方向,那就太棒了。抱歉,我的 C++ 经验很少。 @AbeMiessler 如果您可以完全托管,您可以改用 C# 编写它。如果它需要是 C++,可能是因为需要一些本机代码。 @shf301 - 如果您有时间,请查看我的更新。我根据您的回答做了更多研究。 @AbeMiessler - 不,它仍然无法正常工作。 C++/CLI 包装器仍然包含非托管代码(C++/CLI 允许您混合托管和非托管)。改变它需要完全重写。最好的办法是使用完全托管的 ZIP 库之一,例如 SharpZipLib

以上是关于可以在中等信任环境中运行 C++ dll 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Expression<TDelegate>.在中等信任环境中编译

如何在中等信任环境中连接到当前的 FormsAuthenticationModule?

在中等信任的 ASP.Net 中读取程序集 Guid 而不锁定 appdomain 中的 DLL

反射会带来啥风险? (中等信任度)

中等信任中 MVC 控制器 + 依赖注入 (Ninject) 的问题

不安全代码对安全代码有影响吗?