未经管理的DLL无法在ASP.NET服务器上加载

71

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

这个网站使用了两个非.NET的未托管外部DLL,我没有源代码来编译它们,只能直接使用。

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

Unable to load DLL 'XYZ.dll': The specified module could not be found. (Exception from 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。

如果您能提供关于此问题的帮助,将不胜感激!

12个回答

0
在Application_start中使用以下代码: (根据需要自定义/bin/x64和bin/dll/x64文件夹)
String _path = String.Concat(System.Environment.GetEnvironmentVariable("PATH")
                ,";"
                , System.Web.Hosting.HostingEnvironment.MapPath("~/bin/x64")
                ,";"
                , System.Web.Hosting.HostingEnvironment.MapPath("~/bin/dll/x64")
                ,";"
                );
            System.Environment.SetEnvironmentVariable("PATH", _path, EnvironmentVariableTarget.Process);

0

尝试将DLL文件放置在Windows/SysWOW64文件夹中。这是我唯一有效的解决方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接