他の多くの人と同様に、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フォルダーに含まれています。このフォルダを削除しても問題は解決しません。
私の機知の終わりに。どんな助けでもありがたいです。
これは、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 "Could not load file or Assembly 'ClearScriptV8' or one of dependency。the system cannot find the file。"が表示されます。他の場所のコードには、実際にはLoadLibraryを使用しないが.Netデフォルトローダーにフォールバックする同様のローダーがあり、意味のない例外が発生すると思います。
これが他の人が同様の問題を解決するのに役立つことを願っています。
原因は、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>
...
明確にするために、この例外は常にClearScriptV8-32.dll
、ClearScriptV8-64.dll
、v8-ia32.dll
、またはv8-x64.dll
がないために発生するわけではありません。多くの場合、問題は、前述のDLLのいずれかによって参照されるDLLが見つからないことです。適切なDLLがサーバー上にある場合、適切なVisual C++再頒布可能パッケージをインストールすると、通常、この一時的な依存関係の問題が解決します。
プロジェクトのディスカッションフォーラムによると ClearScriptはVisual Studio 2012をサポートしなくなりました 。サーバーにインストールする必要があるVisual C++再頒布可能パッケージのバージョンは、プロジェクトが使用しているClearScriptのバージョンによって異なります。
少し遅れるかもしれませんが、これは他の人がこの投稿に来るのを助けるかもしれません。
これは、ホスティングサーバーにVisual C++ Redistributable for Visual Studio 2012以降がインストールされていない場合の一般的なエラーです
http://www.Microsoft.com/en-gb/download/details.aspx?id=30679
IISロールを使用してWindows Server 2012にデプロイする場合、ClearScriptV8を実行するには、次の2つのことを行う必要があります。
ホスティングサーバーにVisual Studio 2012以降のVisual C++再頒布可能パッケージをインストールする必要があります http://www.Microsoft.com/en-gb/download/details.aspx?id=30679
オプション、32ビットアプリケーション/プラットフォームの場合:
答えはどれもうまくいきませんでした。これはWindowsサービスアプリケーションです。
受け入れられた回答 に基づく; v8-ia32.dll&ClearScriptV8-32.dll(私のアプリケーションはx64)をターゲットにしているため、
問題は解決しました。