与许多其他人一样,我在部署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文件夹中。删除此文件夹无法解决问题。
在我的智慧结束时。任何帮助表示赞赏。
答案 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.dll
,ClearScriptV8-64.dll
,v8-ia32.dll
或v8-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:
您必须在托管服务器上安装Visual Studio 2012或更高版本的Visual C ++ Redistributable: http://www.microsoft.com/en-gb/download/details.aspx?id=30679
可选,适用于32位应用程序/平台:
答案 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 )
它解决了这个问题。