我的项目结构如下:
ASP.NET呼叫C#层调用ManagedC++ 调用Native C++
(我试图避免使用互操作,所以这就是托管 C++ 层的原因)我编写了测试 C# 层的单元测试,它工作得很好。
当我尝试运行 asp.net 页面时,我得到:"Could not load file or assembly..."
错误。
我发现当我复制粘贴原生C++dll 到“临时 ASP.NET 文件”(到相应的文件夹)该网站可以正常工作。
看来托管C++代码可以找到原生C++仅当代码驻留在同一文件夹中时 - 显然我不能将本机 dll 放在临时文件中。
有没有办法在全局位置设置 Native(不适用于 System32)?
感谢您的评论。
它归结为一个选择:
- 这是安全问题
我用代码自行设置了服务器,它在卡西尼下运行,但是当我发布它(在iis7下运行)时,我得到“无法加载文件或程序集......”
我正在运行 IIS7 和 ApplicationPoolIdentity ,.net 4 Integrated
多谢,
皮尼。
从技术上讲,以这种方式使用托管 C++ 是本机/托管代码之间的一种互操作形式,常用的替代方案是 COM 和 P/Invoke。这纯粹是一个术语问题,但是,使用 P/Invoke 也会遇到同样的问题。
这篇博客文章在 ASP.Net 中加载 C++ 程序集 http://blogs.msdn.com/b/jorman/archive/2007/08/31/loading-c-assemblies-in-asp-net.aspx可能会帮助你 - 简而言之,你需要:
- Set the
%PATH%
托管 C++ 程序集尝试加载本机 C++ dll 之前的环境变量。
- Use the
DllImport
属性来设置 dll 路径(不适用于您的情况,因为您没有使用 P/Invoke)
- 自己手动加载 C++ dll(例如使用
LoadLibrary
) 在托管 C++ 程序集尝试加载本机 C++ dll 之前。
我怀疑将 dll 安装到 Win SxS 也可以工作,但我不太清楚这是如何工作的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)