22

像很多其他人一样,我在部署 ASP.Net MVC 应用程序时收到以下错误:

无法加载 V8 接口程序集;验证您的应用程序是否安装了以下文件:ClearScriptV8-32.dll、ClearScriptV8-64.dll、v8-ia32.dll、v8-x64.dll

安装 Clearscript 是为了为页面请求动态转换更少的文件。

我已经在 ISS Express 和 ISS 本地测试了我的应用程序,没有任何问题。

正如这里所建议的那样http://clearscript3.rssing.com/chan-14849437/all_p12.html我还将缺少的代码库作为资源包含在我的项目中。

ClearScriptV8-32.dll, ClearScriptV8-64.dll, v8-ia32.dll,v8-x64.dll都包含在 bin 文件夹中的 ClearScript.V8 文件夹中。删除此文件夹并不能解决问题。

在我的智慧结束。任何帮助表示赞赏。

4

7 回答 7

26

原因是 asp.net 立即加载 /bin 目录中的所有库。我添加了以下规则来忽略 Clearscript 程序集,并且它有效

<configuration>
    <system.diagnostics>
        <trace autoflush="true" />
    </system.diagnostics>
    <system.web>
        <compilation>
            <assemblies>

                <remove assembly="ClearScriptV8-64" />
                <remove assembly="ClearScriptV8-32" />
               ....
            </assemblies>
        </compilation>

...

于 2015-10-28T12:32:31.840 回答
16

需要明确的是,此异常并不总是由缺少ClearScriptV8-32.dll、或引起。通常问题是找不到由上述 dll 之一引用的 dll。如果服务器上有适当的 dll,安装适当的 Visual C++ Redistributable 通常会解决此传递依赖问题。ClearScriptV8-64.dllv8-ia32.dllv8-x64.dll

根据该项目的论坛,ClearScript 不再支持 Visual Studio 2012。这意味着需要在您的服务器上安装的 Visual C++ Redistributable 版本取决于您的项目正在使用的 ClearScript 版本:

于 2015-04-07T21:46:13.200 回答
10

可能有点晚了,但这可能会帮助其他人来这篇文章。

当您没有在托管服务器上安装 Visual C++ Redistributable for Visual Studio 2012 或更高版本时,这是一个常见错误

http://www.microsoft.com/en-gb/download/details.aspx?id=30679

于 2014-07-03T07:18:01.340 回答
9

如果您在具有 IIS 角色的 Windows Server 2012 上进行部署,您应该做两件事来让 ClearScriptV8 运行:

  1. 正如@no1sprite指出的那样:

您必须在托管服务器上安装 Visual C++ Redistributable for Visual Studio 2012 或更高版本:http: //www.microsoft.com/en-gb/download/details.aspx?id=30679

  1. 确保将ClearScript.dll放在网站的bin \ 文件夹中,并将ClearScriptV8-64.dllv8-x64.dll放在bin\ClearScript.V8中。

可选,对于 32 位应用程序/平台:

  1. 如果您使用 32 位平台,请将ClearScriptV8-32.dllv8-ia32.dll放在网站的bin\ClearScript.V8 \ 文件夹中。此外,在 IIS 管理器中,右键单击站点的应用程序池并选择“高级设置...”。将属性“启用 32 位应用程序”设置为true
于 2015-03-05T14:38:25.493 回答
3

这是用 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 默认加载器,给出无意义的异常。

希望这可以帮助其他人解决类似的问题。

于 2018-06-01T20:02:09.080 回答
0

没有一个答案对我有用。它是一个 Windows 服务应用程序。

基于接受的答案;我删除了v8-ia32.dllClearScriptV8-32.dll (因为我的应用程序针对x64

它解决了这个问题。

于 2017-08-17T04:13:42.643 回答
0

此处发布的答案对我不起作用,但确实如此:Visual Studio -> 工具 -> 选项 -> 项目和解决方案 -> Web 项目 -> 选中“对网站和项目使用 64 位版本的 IIS Express”

于 2021-10-13T14:52:08.927 回答