这是用 clearscript v8 开始一些项目的几秒钟,很好,我第一次记得问题是什么。加载 Native Lib v8。
您可能会在 GETTING STARTED 或类似主题中的某个地方想到,ClearScript 的开发人员应该提到您需要将 V8 本机库放在子文件夹“ia32”或“x64”(分别为 Platform x86 或 Platform x64)中。创建上面的子文件夹。并将本机 v8 库放在那里(32 位到 'ia32' 中,64 位在 'x64' 中)。
我猜他们忘了写下这个想法。就像提醒一样...从加载程序中获取的源代码帮助我上次跟踪问题...
private static IntPtr LoadNativeLibrary()
{
var suffix = Environment.Is64BitProcess ? "x64" : "ia32";
var fileName = "v8-" + suffix + ".dll";
var messageBuilder = new StringBuilder();
var paths = GetDirPaths().Select(dirPath => Path.Combine(dirPath, deploymentDirName, fileName)).Distinct();
foreach (var path in paths)
{
var hLibrary = NativeMethods.LoadLibraryW(path);
if (hLibrary != IntPtr.Zero)
{
return hLibrary;
}
var exception = new Win32Exception();
messageBuilder.AppendInvariant("\n{0}: {1}", path, MiscHelpers.EnsureNonBlank(exception.Message, "Unknown error"));
}
var message = MiscHelpers.FormatInvariant("Cannot load V8 interface assembly. Load failure information for {0}:{1}", fileName, messageBuilder);
throw new TypeLoadException(message);
}
奇怪的是,这个加载器应该在调试环境中抛出更有意义的消息,但它没有。相反,我们有:FileNotFoundException,带有消息“无法加载文件或程序集'ClearScriptV8'或其依赖项之一。系统找不到指定的文件。” . 在其他地方的代码中猜测是另一个类似的加载器,它实际上不使用 LoadLibrary 但回退到 .Net 默认加载器,给出无意义的异常。
希望这可以帮助其他人解决类似的问题。