【问题标题】:DllNotFoundException for libz3.dll when using Z3 via nuget通过 nuget 使用 Z3 时 libz3.dll 的 DllNotFoundException
【发布时间】:2018-12-09 12:33:44
【问题描述】:

我在我的 .NET Core 2.1 项目中通过 NuGet 包使用 Z3,最近尝试从版本 4.5.0.1 更新到 4.8.1。然后我恢复到 4.5.0.1 并在创建上下文时遇到了这个异常:

using(var ctx = new Microsoft.Z3.Context())
{

}

System.DllNotFoundException:无法加载 DLL“libz3.dll”或其依赖项之一:找不到指定的模块。 (HRESULT 异常:0x8007007E)

我检查了以下内容:

  • 我的应用是为 x64 编译的,我使用 z3x64win 包,
  • libz3.dllMicrosoft.Z3.dll都存储在%userprofile%\.nuget\packages\z3x64win\4.5.0.1\lib中,
  • 尝试按照here 的描述将此路径添加到 PATH 环境变量,但没有帮助,
  • 尝试手动将libz3.dllMicrosoft.Z3.dll保存到项目的bin目录,但问题依旧。

还有其他必要的步骤来推荐Z3吗?

【问题讨论】:

  • 我不知道是不是这样,但是当 DLL 的拱门与我的程序不匹配时,我遇到了类似的问题(例如,如果您的 exe 是为 x86 编译的,但是您尝试加载的 DLL 是 x64)。或者您缺少 libz3.dll 所需的其他依赖项
  • 我的应用程序是为 x64 编译的,我使用 z3x64win 包。 libz3.dll 不需要任何依赖项。
  • “或其依赖项之一”是问题所在,包作者没有包含它们。您需要下载并运行this

标签: c# .net-core nuget z3


【解决方案1】:

在我记得 Z3 遇到这些问题的日子里,它经常通过尝试以下方法来解决问题:

  • 完全删除并重置您的 Microsoft.Z3.dll 引用。在再次添加引用之前,请确保 csproj 文件中没有引用。
  • 重新下载或获取 Z3 dll,以便您百分百确定它们匹配并且 VS 或您的环境不使用缓存。

  • 您确定 libz3.dll 和 z3.exe 都在您的 PATH 中吗?

【讨论】:

    【解决方案2】:

    现在有一个官方的 .NET Core Z3 NuGet 包应该可以解决您的所有问题:https://www.nuget.org/packages/Microsoft.Z3.x64/

    【讨论】:

    • 不,还是同样的问题。在 libz3.dll 上使用 dumpbin.exe /imports 表明它依赖于 msvcr120.dll、vcomp120.dll 和 msvcp120.dll。该软件包不包括它们。下载并运行 VS2013 的 vcredist。
    • 如果您正在运行 .NET Core,您只需在项目所在的目录中运行“dotnet add package Microsoft.Z3.x64”,它就会处理好所有事情别的。你看到了什么问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 2022-08-08
    相关资源
    最近更新 更多