0

我正在使用第三方 .net 库,它使用

Kernel.LoadLibrary(DllFileName)

当此代码在 ac# 控制台应用程序中执行时,一切正常,但是当我尝试从 Web 应用程序(mvc 应用程序)使用库时,我收到“对内存位置的无效访问”异常。我是否必须更改一些设置才能从 Web 应用程序加载托管 dll?

让我知道是否需要任何其他细节

4

1 回答 1

0

这可能是位问题。Kernel.LoadLibrary 可能是对非托管LoadLibrary调用的 PInvoke 调用,可能用于加载非托管库。如果它不检查进程是 32 位还是 64 位并加载适当版本的未管理库,那么您将遇到问题(我实际上以为您会收到有关无效格式的错误,但不同消息可能是因为它跳过了其他一些保护)。尝试强制 32 位模式,看看它是否有帮助(或更改错误):IIS 6IIS 7

尽管错误消息似乎与我对“找不到文件”问题的预期不符,但控制台应用程序和 Web 应用程序之间可能重要的另一个区别是当前目录不同(以防第三方library 没有将完整路径传递给 LoadLIbrary) - 它通常是运行控制台应用程序时应用程序的目录,但它通常以 web 应用程序中的 Windows 系统目录开始。如果它期望它正在加载的 DLL 在当前目录中,这可能很重要。如果您怀疑它加载了错误的文件,Process Monitor可能是一个非常有用的工具 - 它可以让您查看进程正在执行的所有活动,例如它尝试加载的文件等。

于 2012-07-08T03:54:37.210 回答