如何解决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位构建本机。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。