3

我有一个包含三个项目的 VS2008 解决方案: C# ASP.NET Web 服务,它使用 C++/CLI DLL,而它又调用本机 C++ DLL 的函数。所有参考均已正确设置。在 web 服务 bin 文件夹中有所有三个 DLL。问题是当我按 F5 时,浏览器中的页面FileNotFoundException从 HRESULT 0x8007007E 通知我,找不到指定的模块

缺少的模块是我的本机 DLL。ASP.NET 开发服务器复制(并使用)我的 C++/CLI DLL 中的某处%USERPROFILE%\AppData\Local\Temp\Temporary ASP.NET Files\root,但不是本机的。如果我手动将本机 DLL 复制到与 C++/CLI DLL 相同的文件夹,那么我可以调试我的 Web 服务。但是,这种复制似乎并不正确。

在 PATH 上的某处复制本地 DLL 也感觉不对,因为其他开发人员需要记住它。

这里有一个类似的问题,并且在一个答案中链接了一篇博客文章。给定的解决方案要求我将 DLL 更改为延迟加载,这似乎又是一个半生不熟的解决方法,因为由于开发障碍它需要更改最终产品。

是否有适当的方法来调试 Web 服务、C++CLI DLL 和本机 DLL 的组合?

4

1 回答 1

3

问题只是编译器无法确定本地 c++ 库在哪里。

所以,有几种方法可以解决这个问题。

  1. 使用 DLLImport 在运行时使用相对或绝对路径加载 dll。
  2. path环境变量设置为它的位置。
  3. 项目的构建方式变得非常复杂(请参阅下面的链接,您显然已经阅读过)。

http://blogs.msdn.com/b/jorman/archive/2007/08/31/loading-c-assemblies-in-asp-net.aspx

除了这些,没有真正的答案。

于 2013-01-14T17:49:37.343 回答