使用Z3与ASP.净的核心

本文关键字:核心 ASP Z3 使用 | 更新日期: 2023-09-27 18:15:48

微软Z3 .NET API可以处理。net Core吗?我们在一个学校项目的调度算法中使用了它,我们相信当项目升级到。net core时,z3停止了工作。我们找不到任何关于z3与。net core使用的信息

使用Z3与ASP.净的核心

Z3使用代码契约,这在。net核心中是不可用的。然而,我们有一个虚拟类来取代它们,它是随源代码一起提供的,请参阅src/api/dotnet/core/DummyContracts.cs。

目前,这还没有绑定到我们构建基础结构的其余部分,但是您可以这样构建它们:

cd src/api/dotnet/core
dotnet restore
dotnet build

(确保你更新你的源代码副本,因为我刚刚提交了一个修复核心构建。)

要使Z3在。net Core 2项目中工作,您需要以下东西:

  1. 项目中的Microsoft.Z3.dll,并在项目中添加对它的引用。

  2. libz3.dll也是,但是这个不需要被引用(无论如何都不会工作)

  3. 将libz3.dll和z3.exe添加到您的PATH,通过代码或通过您的操作系统。(这部分是经常导致dll找不到错误的部分)

**我的c#代码

// Convinient metod to decide OS. false => linux in this case.
public static bool IsWindows() =>
    RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
private static void AddZ3ToProcessPath()
{
    // We store our OS-dependent Z3 DLLs in diffrent folders in our root.
    var solverZ3Path = IsWindows() ? "z3winx64_485" : "z3linuxx64_485";
    var z3X64BinariesPath = "";
    if (IsWindows())
    {
        z3X64BinariesPath = $"{solverZ3Path}"; // Windows friendly
    }
    else
    {
        z3X64BinariesPath =$"/{solverZ3Path}"; // Unix friendly
    }

    var path = Uri.UnescapeDataString(z3X64BinariesPath); // Escape chars
    var name = "PATH"; // Add dlls to this environment variable
    var target = EnvironmentVariableTarget.Process; // But only for this process and not entire machine or user
    Environment.SetEnvironmentVariable(name, path, target);
}

你用的是什么操作系统,什么版本的。net Core?任何链接到代码?