我正在开发一个ASP.NET网站,在Visual Studio 2010中开发。大多数网站都是用托管代码(F#和C#)编写的,但它使用非托管DLL(QuickPDF)的一些功能。该网站在本地正常运行,但是在部署到托管提供商(aspnethosting.co.uk)时,LoadLibrary调用失败,返回一个IntPtr.Zero句柄。在ASP.NET网站中使用LoadLibrary加载非托管DLL
根据托管服务提供商的控制台,该站点运行在Full(内部)信任级别。
DLL位于网站的bin目录中,并且托管提供程序告诉我它具有适当的权限。我试过没有使用特定的路径在所有的DLL,使用。\,也工作出什么当前的程序集路径使用Assembly.GetExecutingAssembly()。CodeBase(请参阅下面的F#代码) - 哪些工作正常当在本地运行时。
还有什么我可以帮助把这件事情呢?
下面是该路径工程以该DLL的F#代码:
let assemblyDirectory =
let codeBase = Assembly.GetExecutingAssembly().CodeBase;
let uri = new UriBuilder(codeBase)
let path = Uri.UnescapeDataString(uri.Path)
Path.GetDirectoryName(path)
这里就是F#的代码使用路径(在检查它指向DLL)
let dllPath = Path.Combine(assemblyDirectory, "QuickPDFDLL0814.dll")
if not (File.Exists(dllPath)) then
failwith ("Could not find QuickPDF DLL at: " + dllPath)
let lib = QuickPDFDLL0814.PDFLibrary(dllPath)
这里的试图加载QuickPDF DLL的C#代码 - 这是它失败的地方 - 即。 dllHandle等于IntPtr.Zero。
public PDFLibrary(string dllFileName)
{
dll = new DLL(dllFileName);
if (dll.dllHandle != IntPtr.Zero)
{
instanceID = dll.QuickPDFCreateLibrary();
dll.RegisterForShutdown(instanceID);
}
else
{
dll = null;
}
}
...
public DLL(string dllFileName)
{
dllHandle = LoadLibrary(dllFileName);
if (dllHandle == IntPtr.Zero)
throw new InvalidOperationException("Could not load library " + dllFileName);
else
{
查看什么是Marshal.GetLastWin32Error在LoadLibrary调用后返回 –
安东尼奥 - 谢谢你的提示。它返回0.不知道什么是不幸的告诉我。 – Kit