在 C# ConsoleApp 中缺少 ClearScriptV8-64.dll、v8-ia32.dll、v8-x64.dll

Missing ClearScriptV8-64.dll, v8-ia32.dll, v8-x64.dll in C# ConsoleApp

我想要 运行 一个简单的 clearscript 程序。 为此,我创建了一个新的 ConsoleProject 并通过 nuget 添加了引用。

创建引擎时(第一行代码)

  using (var engine = new V8ScriptEngine()) 

我得到

System.TypeLoadException was unhandled _HResult=-2146233054
_message=Cannot load V8 interface assembly; verify that the following files are installed with your application: ClearScriptV8-32.dll, ClearScriptV8-64.dll, v8-ia32.dll, v8-x64.dll

我只找到了 dll:v8-ia32.dll、v8-x64.dll 但没有找到任何 ClearscriptV8-*.dll

我将它们复制到编译输出,但是在 运行 宁 console.exe

时没有任何改变

我也从Github下载了软件包,但没有包含这样的dll。我只有一个ClearScript.dll.

运行 包含的控制台项目抛出相同的错误。

我从哪里得到这些 dll? 我错过了什么?

我的项目输出文件夹如下所示;

我还 运行 更新 V8 命令。它成功了,但没有任何改变

然后我还安装了 C++ Redistribueable,如下所述:Clearscript files cannot be found on host

解决方法是使用安装程序

按照建议,安装程序是帮助解决问题的一种方法。

由于现在有一个完整的 Nuget 包,我建议改用它。 它确实使整个安装任务变得更加容易。

Install-Package ClearScript.V8 

https://www.nuget.org/packages/ClearScript.V8/

我发现如果将 Nuget 安装程序应用到网站(即没有项目文件),它会失败。这是因为 install.ps1 中的脚本试图将 PostBuildCmd.ps1 中的脚本附加到不存在的 post-build-command。 (安装程序声明成功,但不可信!)

有问题的 post-build-command 只是将 ..\packages\ClearScript.V8.5.4.7\tools\native 中两个文件夹中的所有内容复制到应用程序的 bin 文件夹中。但是,如果您 只是 手动执行此操作,则会遇到另一个问题: Clearscript files cannot be found on host (即 DLL 的抢占式预加载)。您需要添加

<remove ...

行(在那个 link 的项目中定义)到 web.config 以及 执行手动复制。

它正在寻找 V8 32 位版本,因此请确保安装此 nuget 包 JavaScriptEngineSwitcher。V8.Native.win-x86。我绞尽脑汁想弄明白,但这个绝对解决了我的问题。

在带有 .NET 5.0 的 macOS 上,我找不到 Install-Package 命令,以下命令没有解决问题:

dotnet add myproject.csproj package Microsoft.ClearScript.V8

相反,我必须明确地将 Microsoft.ClearScript.V8.Native.osx-x64 添加到项目中。据推测,必须为将使用该项目的每个体系结构添加一个单独的 Microsoft.ClearScript.V8.Native.* 包。

至少,添加“外部”包似乎不会导致任何警告或错误。如果添加多个架构,每个架构下都会有不必要的包下载,但也许这是唯一可靠的解决方案。