【问题标题】:IIS 7.0 / Windows Server 2008 - DLL not found in ASP.NET applicationIIS 7.0 / Windows Server 2008 - 在 ASP.NET 应用程序中找不到 DLL
【发布时间】:2011-06-17 07:14:08
【问题描述】:

我尝试通过 IIS 7.0 和 .NET 4.0 运行托管在 Windows Server 2008 x86 上的 ASPX 页面。我向 IIS 的 Default Web Site 添加了一个应用程序 app1,映射到包含 Web.config 文件的目录 C:\toto\app1。 我的错误是:

无法加载文件或程序集“xxx.dll”或其依赖项之一

xxx.dll是一个.NET DLL,它封装了原生C++ DLL(它们是加载失败的依赖),它们都位于C:\toto\app1\bin。我尝试修改 PATH 环境变量,使其包含 bin 目录(是的,我知道这很糟糕 :-)),但这无论如何都不起作用。

我猜应该在 IIS 应用程序级别有一些东西,但我看不到什么...请您帮忙吗?

非常感谢!

编辑:在C:\windows\system32 中复制本机 DLL 确实有效,但这根本不是一个令人愉快的解决方案...

【问题讨论】:

  • 您的 DLL 解决方案中引用了哪个路径?
  • 你的意思是引用路径(外部 DLL 在我的 VS 2010 项目的 Reference 伪文件夹中)?如果是这样,它是'..\..\..\LIB\IRIS'。我尝试创建相同的相对路径并在其中添加外部库(考虑到应用程序的根目录是 Web.config 所在的目录),但这也不起作用。

标签: asp.net iis-7 .net-4.0 windows-server-2008


【解决方案1】:

如果它不是 GACd(它似乎不是),简单的答案是:

您需要外部 DLL 位于应用程序的 bin\ 目录中。

如果您在 VS2010 中有它作为参考,请选择它,转到属性,然后将 CopyLocal 值设置为 True。重建应用程序。这应该会导致该 DLL 复制到 bin 中,并且您的应用无需任何其他工作即可引用。

【讨论】:

  • 啊,我觉得我不够精确:我的 VS2010 DLL 和外部的都在 bin 目录中。
  • 是的,在本地没有问题,在远程MS Server 2008上部署时出现问题。
  • 如果可能,您能否发布您收到的 ASP.NET 错误消息的全文?
【解决方案2】:

好吧,终于设法通过将 DLL 复制到 windows\system32 目录来使其工作(不知道为什么它第一次没有工作,可能是我的错误......)。 application\bin 文件夹不起作用,PATH 变量的更改也不起作用。

如果有人知道更好的解决方案(我觉得这个解决方案一点也不出色,可能会导致 DLL 冲突等),我会很高兴听到它!

【讨论】:

  • 将 dll 复制到 windows\system32 目录是非常糟糕的形式。您的应用程序没有理由将文件放在那里。该目录仅适用于 MS 库,甚至他们在许多应用程序中都避开它。相反,您应该在 bin 文件夹中拥有所有必要的程序集或 GAC 它们。
  • 完全同意,考虑到安全性和整个系统的影响,这并不是真正的解决方案。听起来您正在使用的第 3 方库正在执行一些非常奇怪的路径机制,导致它由 w3wp 进程(在 system32 中运行)而不是在应用程序的上下文中加载。你试过GACing图书馆吗?这至少可以节省 system32 概率。
  • 我知道,我知道,这很糟糕,这就是我已经说过的!但目前没有其他方法可以使其工作,所以除非有人告诉我更好的...是的,我很绝望!顺便说一句,GAC 仅用于 .NET DLL 注册,因此无法通过这种方式注册我的本地 DLL。
  • 原生库必须放在 Windows\system32 中,因为 .NET 不会在 bin 文件夹中查找它们。
【解决方案3】:

我认为这将完成这项工作。 在服务器上执行此操作。 在执行此操作之前撤消您所做的所有事情。 转到 START->RUN 并键入 cmd 然后运行以下命令 regsvr32 "C:\yourfolder\idrskrn_net14.dll" 并包含 "。

享受吧!

【讨论】:

  • 您好,感谢您的回答,但这不起作用:我的外部 DLL 不是 COM DLL(确实是通过 regsvr32 进行注册)而是一个native DLL: regsvr32 fals 在这种情况下(说“没有找到 DllserverRegister 入口点”)。
【解决方案4】:

我也有同样的问题。 dll 位于 webapp/bin 目录中,但未加载。我设法将它们放在 inetpub/bin 中,并且运行良好。但是,必须有一种行为允许在 webapp bin 目录中加载模块。不知道怎么设置。

【讨论】:

    【解决方案5】:

    我也有同样的问题。如果我在服务器上本地浏览该网站,它可以正常工作,但是当我通过域名通过 Internet 浏览它时,它无法找到该站点的 bin 文件夹中的 DLL...

    【讨论】:

      猜你喜欢
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      相关资源
      最近更新 更多