无法在主机上找到Clearscript文件

时间:2014-04-25 19:55:14

标签: asp.net-mvc-4 iis deployment shared-hosting 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.dllClearScriptV8-64.dllv8-ia32.dllv8-x64.dll都包含在bin文件夹中的ClearScript.V8文件夹中。删除此文件夹无法解决问题。

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

6 个答案:

答案 0 :(得分:23)

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

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            Toast.makeText(getActivity(), "Back", Toast.LENGTH_LONG).show();
            break;
        default:
            break;
        }
        return super.onOptionsItemSelected(item);
    }

...

答案 1 :(得分:15)

要明确此异常并非始终由缺少ClearScriptV8-32.dllClearScriptV8-64.dllv8-ia32.dllv8-x64.dll引起。通常问题是无法找到上述dll之一引用的dll。如果服务器上有适当的dll,安装相应的Visual C ++ Redistributable通常会解决这个传递依赖问题。

根据项目的讨论论坛ClearScript no longer supports Visual Studio 2012。这意味着需要在服务器上安装的Visual C ++ Redistributable的版本取决于您的项目正在使用的ClearScript版本:

答案 2 :(得分:10)

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

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

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

答案 3 :(得分:9)

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

  1. 正如@no1sprite指出:
  2.   

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

    1. 确保将 ClearScript.dll 放在网站的 bin \文件夹中, ClearScriptV8-64.dll v8-x64.dll 进入 bin \ ClearScript.V8
    2. 可选,适用于32位应用程序/平台:

      1. 如果您使用的是32位平台,请将 ClearScriptV8-32.dll v8-ia32.dll 放在网站的 bin \ ClearScript中。 V8 \文件夹。 此外,在IIS管理器中,右键单击站点的应用程序池,然后选择"高级设置..." 。设置属性" 启用32位应用程序" true

答案 4 :(得分:3)

这是使用clearscript v8开始某个项目的秒时间,我记得第一次问题是什么。加载Native Lib v8。

你会想到在GETTING STARTED或类似主题的某个地方,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);
}

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

希望这有助于其他人解决类似的问题。

答案 5 :(得分:0)

这些答案都不适合我。它是Windows服务应用程序。

基于accepted answer; 我删除了 v8-ia32.dll & ClearScriptV8-32.dll (因为我的应用程序定位为 x64

它解决了这个问题。