【发布时间】:2012-07-07 19:50:55
【问题描述】:
我正在使用第三方 .net 库,它使用
加载 dllKernel.LoadLibrary(DllFileName)
当此代码在 c# 控制台应用程序中执行时,一切正常,但是当我尝试从 Web 应用程序(mvc 应用程序)使用库时,我收到“对内存位置的无效访问”异常。我是否必须更改一些设置才能从 Web 应用程序加载托管 dll?
如果需要任何其他详细信息,请告诉我
【问题讨论】:
标签: .net loadlibrary
我正在使用第三方 .net 库,它使用
加载 dllKernel.LoadLibrary(DllFileName)
当此代码在 c# 控制台应用程序中执行时,一切正常,但是当我尝试从 Web 应用程序(mvc 应用程序)使用库时,我收到“对内存位置的无效访问”异常。我是否必须更改一些设置才能从 Web 应用程序加载托管 dll?
如果需要任何其他详细信息,请告诉我
【问题讨论】:
标签: .net loadlibrary
这可能是位问题。 Kernel.LoadLibrary 可能是对非托管 LoadLibrary 调用的 PInvoke 调用,可能用于加载非托管库。如果它不检查进程是 32 位还是 64 位并加载适当版本的未管理库,那么您将遇到问题(我实际上以为您会收到有关无效格式的错误,但不同消息可能是因为它跳过了其他一些保护)。尝试强制 32 位模式,看看是否有帮助(或更改错误):IIS 6 或 IIS 7。
虽然错误消息似乎与我对“找不到文件”问题的预期不符,但控制台应用程序和 Web 应用程序之间的另一个可能重要的区别是当前目录不同(如果第三方库不会将完整路径传递给 LoadLIbrary) - 它通常是运行控制台应用程序时应用程序的目录,但它通常以 web 应用程序中的 Windows 系统目录开始。如果它期望它正在加载的 DLL 在当前目录中,这可能很重要。如果您怀疑它加载了错误的文件,Process Monitor 可能是一个非常有用的工具 - 它可以让您查看进程正在执行的所有活动,例如它尝试加载的文件等。
【讨论】: