Asp.net调用C#层调用托管C ++调用本机C ++

|| 我的项目结构如下: ASP.NET调用C#层调用托管C ++调用本机C ++ (我正在尝试避免使用互操作,因此这就是托管c ++层的原因) 我写了测试C#层的单元测试,它工作正常。 当我尝试运行asp.net页面时,出现:“ 0”错误。 我发现当我将本地C ++ dll复制粘贴到\“ Temporary ASP.NET Files \”(到相应的文件夹)时,该站点可以正常工作。 似乎托管C ++代码只有位于同一文件夹中才能找到本机C ++代码-显然,我在临时文件中没有本机dll。 有没有一种方法可以将Native设置为全局位置(不适用于System32)? 感谢您的评论。 它归结为一种选择: 是安全性问题 我使用代码自行设置了服务器,并且该服务器在卡西尼号下运行,但是当我发布它(在iis7下运行)时,我得到了“无法加载文件或程序集.... \” 我正在使用ApplicationPoolIdentity运行IIS7,集成了.net 4 非常感谢, 皮尼     
已邀请:
从技术上讲,以这种方式很好地使用Managed C ++是本机/托管代码之间的Interop形式,常用的替代方法是COM和P / Invoke。这纯粹是术语,但是使用P / Invoke会遇到相同的问题。 这篇博客文章在ASP.Net中加载C ++程序集可能会帮助您-简而言之,您需要执行以下任一操作: 在Managed C ++程序集尝试加载本机C ++ dll之前,请设置“ 1”环境变量。 使用
DllImport
属性设置dll路径(不适用于您的情况,因为您不使用P / Invoke) 在Managed C ++程序集尝试加载本机C ++ dll之前,自己手动加载C ++ dll(例如,使用
LoadLibrary
)。 我怀疑将您的dll安装到Win SxS还是可以的,但是我对它的工作原理还不了解。     
您可以设置路径变量吗? 通过转到“我的电脑” /“计算机”(Windows-PauseBreak)的属性,然后单击高级设置来进行设置。单击高级。环境变量。根据需要在系统变量下修改\“ Path \”。     
我不得不在ApplicationPoolIdentity中添加一个布尔值。属性中的其中一项说“启用32位”,这确实可以解决问题:)默认值为False 我的服务器是64位,我用32位构建本机。     

要回复问题请先登录注册