使用Z3与ASP.净的核心
本文关键字:核心 ASP Z3 使用 | 更新日期: 2023-09-27 18:15:48
微软Z3 .NET API可以处理。net Core吗?我们在一个学校项目的调度算法中使用了它,我们相信当项目升级到。net core时,z3停止了工作。我们找不到任何关于z3与。net core使用的信息
Z3使用代码契约,这在。net核心中是不可用的。然而,我们有一个虚拟类来取代它们,它是随源代码一起提供的,请参阅src/api/dotnet/core/DummyContracts.cs。
目前,这还没有绑定到我们构建基础结构的其余部分,但是您可以这样构建它们:
cd src/api/dotnet/core
dotnet restore
dotnet build
(确保你更新你的源代码副本,因为我刚刚提交了一个修复核心构建。)
要使Z3在。net Core 2项目中工作,您需要以下东西:
-
项目中的Microsoft.Z3.dll,并在项目中添加对它的引用。
-
libz3.dll也是,但是这个不需要被引用(无论如何都不会工作)
-
将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?任何链接到代码?