无法在主机上找到Clearscript文件

Lev*_*von 21 deployment iis shared-hosting asp.net-mvc-4 clearscript

像许多其他人一样,我在部署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英寸 删除此文件夹无法解决问题.

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

小智 24

原因是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>
Run Code Online (Sandbox Code Playgroud)

...

  • 这是如何运作的?找不到文件,因此我们“删除”了吗?抓头。 (2认同)
  • 这很棒,但有人可以解释它是如何工作的! (2认同)

ahs*_*ele 15

需要明确的是这个异常并不总是由丢失造成的ClearScriptV8-32.dll,ClearScriptV8-64.dll,v8-ia32.dllv8-x64.dll.通常问题是无法找到上述dll之一引用的dll.如果服务器上有适当的dll,安装相应的Visual C++ Redistributable通常会解决这个传递依赖问题.

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


no1*_*ite 10

可能会有点晚,但这可能有助于其他人来这篇文章.

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

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


HRK*_*der 9

如果要在具有IIS角色的Windows Server 2012上进行部署,则应该执行以下两项操作来运行ClearScriptV8:

  1. 正如@ no1sprite指出:

您必须在托管服务器上安装Visual Studio 2012或更高版本的Visual C++ Redistributable: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.

  • @parliament在我们的例子中,我们必须**禁用**(设置为false)*在应用程序池高级设置下启用32位应用程序*.感谢您的评论,因为它让我走上了正确的道路并希望在此发布,以防它可能对其他人有所帮助. (2认同)

SoL*_*LaR 3

这是用clearscript v8启动一些项目的几秒钟时间,很好,我记得第一次出现的问题是什么。加载 Native Lib v8.1

您可能会认为在入门或类似主题中的某个地方,ClearScript 的开发人员应该提到您需要将 V8 本机库位于子文件夹“ia32”或“x64”(分别是平台 x86 或平台 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);
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,这个加载程序应该在调试环境中抛出更有意义的消息,但它没有。相反,我们有:FileNotFoundException ,消息为“无法加载文件或程序集‘ClearScriptV8’或其依赖项之一。系统找不到指定的文件。” 。猜测其他地方的代码中有另一个类似的加载器,它实际上不使用 LoadLibrary,而是回退到 .Net 默认加载器,给出无意义的异常。

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