Asp.net调用C#层调用Managed C++调用Native C++

Ush*_*haP 4 c# c++ asp.net managed-c++ unmanaged

我的项目结构如下:

ASP.NET调用C#层调用托管 C++调用Native C++ (我试图避免使用互操作因此这就是托管c ++层的原因) 我编写单元测试来测试C#层并且它工作正常.当我尝试运行asp.net页面时,我得到:"Could not load file or assembly..."错误.我想通过当我将Native C++ dll 粘贴到"Temporary ASP.NET Files"(到相应的文件夹)时,该网站可以正常工作.

似乎Managed C++代码只有在它位于同一个文件夹中时才能找到Native C++代码 - 显然我不能在temp文件中拥有Native dll.

有没有办法在全局范围内设置Native(不适用于System32)?

谢谢你的评论.

归结为一个选项:

  1. 这是安全问题

我用代码设置服务器,它在cassini下运行,但是当我发布它(在iis7下运行)我得到"无法加载文件或程序集......"我正在运行IIS7 ApplicationPoolIdentity,.net 4集成非常感谢Pini.

Jus*_*tin 5

技术上以这种方式使用Managed C++是本机/托管代码之间的Interop形式,常用的替代方案是COM和P/Invoke.这纯粹是一个术语,但是,使用P/Invoke会遇到同样的问题.

这篇博文文章在ASP.Net中加载C++程序集可能会帮助你 - 总之你需要:

  • %PATH%在托管C++程序集尝试加载本机C++ dll之前设置环境变量.
  • 使用该DllImport属性设置dll路径(在您不使用P/Invoke时不适用于您的情况)
  • LoadLibrary在托管C++程序集尝试加载本机C++ DLL之前,自己手动加载C++ DLL(例如with ).

我怀疑将你的dll安装到Win SxS也会有效,但我不知道这是如何工作的.