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)
...
ahs*_*ele 15
需要明确的是这个异常并不总是由丢失造成的ClearScriptV8-32.dll,ClearScriptV8-64.dll,v8-ia32.dll或v8-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
如果要在具有IIS角色的Windows Server 2012上进行部署,则应该执行以下两项操作来运行ClearScriptV8:
您必须在托管服务器上安装Visual Studio 2012或更高版本的Visual C++ Redistributable:http: //www.microsoft.com/en-gb/download/details.aspx?id = 30679
可选,适用于32位应用程序/平台:
这是用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 默认加载器,给出无意义的异常。
希望这可以帮助其他人解决类似的问题。
| 归档时间: |
|
| 查看次数: |
14094 次 |
| 最近记录: |