gpt4 book ai didi

asp.net - 非托管 DLL 无法在 ASP.NET 服务器上加载

转载 作者:行者123 更新时间:2023-12-03 05:32:07 25 4
gpt4 key购买 nike

这个问题涉及一个 ASP.NET 网站,最初是在 VS 2005 中开发的,现在是在 VS 2008 中开发的。

该网站使用两个非托管外部 DLL,它们不是 .NET,我没有编译它们的源代码,必须按原样使用它们。

该网站在 Visual Studio 中运行良好,可以正确定位和访问这些外部 DLL。但是,当网站发布在网络服务器(运行 IIS6 和 ASP.NET 2.0)而不是开发 PC 上时,它无法定位和访问这些外部 DLL,并且出现以下错误:

无法加载 DLL“XYZ.dll”:找不到指定的模块。 (HRESULT 异常:0x8007007E)

外部 DLL 以及包装它们的托管 DLL 以及网站的所有其他 DLL 位于网站的 bin 目录中。

搜索此问题后发现,许多其他人似乎在从 ASP.NET 网站访问外部非 .NET DLL 时遇到同样的问题,但我还没有找到有效的解决方案。

我尝试过以下方法:

  • 运行 DEPENDS 检查依赖关系以确定前三个都在路径中的System32目录中,最后一个在.NET 2中框架。
  • 我将两个 DLL 及其依赖项放入System32并重新启动服务器,但网站仍然存在无法加载这些外部 DLL。
  • 授予 ASPNET、IIS_WPG 和 IUSR(针对该服务器)的完全权限网站bin目录并重新启动,但网站仍然无法加载这些外部 DLL。
  • 将外部 DLL 作为现有项添加到项目中并设置将其“复制到输出”属性更改为“始终复制”,以及网站仍然找不到 DLL。
  • 还将其“构建操作”属性设置为“嵌入式资源”并网站仍然找不到 DLL。

任何有关此问题的帮助将不胜感激!

最佳答案

发生这种情况是因为托管 dll 被卷影复制到 .NET Framework 目录下的临时位置。请参阅http://msdn.microsoft.com/en-us/library/ms366723.aspx了解详情。

不幸的是,非托管 dll 不会被复制,并且 ASP.NET 进程在需要加载它们时将无法找到它们。

一个简单的解决方案是将非托管 dll 放在系统路径中的目录中(在命令行中键入“path”以查看计算机上的路径),以便 ASP.NET 进程可以找到它们。 System32 目录始终位于路径中,因此将非托管 dll 放在那里总是可行的,但我建议将其他一些文件夹添加到路径中,然后在其中添加 dll,以防止污染 System32 目录。此方法的一大缺点是您必须为应用程序的每个版本重命名非托管 dll,并且您可以快速拥有自己的 dll hell 。

关于asp.net - 非托管 DLL 无法在 ASP.NET 服务器上加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/344608/

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