gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:21 24 4
gpt4 key购买 nike

我的项目结构如下:

ASP.NET 调用 C# 层调用 Managed C++ 调用 Native C++(我试图避免使用互操作,所以这就是托管 C++ 层的原因)我编写了测试 C# 层的单元测试,它工作正常。当我尝试运行 asp.net 页面时出现:“无法加载文件或程序集...” 错误。我发现当我将 Native C++ dll 复制粘贴到“Temporary ASP.NET Files”(到相应的文件夹)时,该网站可以正常工作。

似乎 Managed C++ 代码只有在位于同一文件夹中时才能找到 Native C++ 代码 - 显然我不能将我的 Native dll 放在临时文件。

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

感谢您的评论。

归结为一个选项:

  1. 这是安全问题

我用代码自行设置服务器,它在 cassini 下运行,但是当我发布它(在 iis7 下运行)时,我得到“无法加载文件或程序集......”我正在运行带 ApplicationPoolIdentity 的 IIS7,.net 4 Integrated非常感谢,皮尼。

最佳答案

从技术上讲,以这种方式使用托管 C++ 是 native 代码/托管代码之间的一种互操作形式,常用的替代方法是 COM 和 P/Invoke。这纯粹是一个术语问题,但是,使用 P/Invoke 时您会遇到同样的问题。

这篇博文Loading C++ Assemblies in ASP.Net可能会帮助您 - 简而言之,您需要:

  • 在托管 C++ 程序集尝试加载 native C++ dll 之前设置 %PATH% 环境变量。
  • 使用 DllImport 属性设置 dll 路径(不适用于您的情况,因为您没有使用 P/Invoke)
  • 在托管 C++ 程序集尝试加载您的 native C++ dll 之前,您自己手动加载 C++ dll(例如使用 LoadLibrary)。

我怀疑将您的 dll 安装到 Win SxS 也可以,但我不太了解它是如何工作的。

关于c# - Asp.net调用C#层调用Managed C++调用Native C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5806144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com