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