我想爲我的項目使用Z3 SMT solver。但是,它似乎有一個Visual Studio版本的不匹配,這導致了我的麻煩。我的Visual Studio 2008報告不匹配的DLL版本?
無法找到引用的組件'Microsoft.Z3'。
雖然它的確在安裝目錄(C:\ Program Files \ Microsoft Research \ Z3-2.19 \ bin)。
當項目被編譯,另一個警告說
解決文件有一個不好的形象,沒有元數據,或以其他方式 無法訪問。無法加載文件或程序集「C:\ Program Files \ Microsoft Research \ Z3-2.19 \ bin \ Microsoft.Z3.dll」或其某個 依賴項。此程序集由比當前加載的運行時更新的運行時構建,並且無法加載。
以及其他錯誤說沒有找到Z3相關類型作爲上下文,術語等。
這是因爲新版本的Z3是使用我沒有的新版本的dotNet Framework編譯的?我該如何解決這個問題?提前致謝! PS:我在測試中使用的文件來自下面粘貼的Z3 tutorial (pdf),第5章。
using System;
using Microsoft.Z3;
class Program
{
Context ctx;
Term mk_int(int a) { return ctx.MkIntNumeral(a); }
Term mk_var(string name) { return ctx.MkConst(name, ctx.MkIntSort()); }
Term mk_lo(Term x) { return x >= mk_int(0); }
Term mk_mid(Term x, Term y, int a) { return y >= (x + mk_int(a)); }
Term mk_hi(Term y, int b) { return (y + mk_int(b)) <= mk_int(8); }
Term mk_precedence(Term x, Term y, int a, int b)
{
return ctx.MkAnd(new Term[] { mk_lo(x), mk_mid(x, y, a), mk_hi(y, b) });
}
Term mk_resource(Term x, Term y, int a, int b)
{
return (x >= (y + mk_int(a))) | (y >= (x + mk_int(b)));
}
void encode()
{
using (Config cfg = new Config())
{
cfg.SetParamValue("MODEL", "true");
using (Context ctx = new Context(cfg))
{
this.ctx = ctx;
Term t11 = mk_var("t11");
Term t12 = mk_var("t12");
Term t21 = mk_var("t21");
Term t22 = mk_var("t22");
Term t31 = mk_var("t31");
Term t32 = mk_var("t32");
ctx.AssertCnstr(mk_precedence(t11, t12, 2, 1));
ctx.AssertCnstr(mk_precedence(t21, t22, 3, 1));
ctx.AssertCnstr(mk_precedence(t31, t32, 2, 3));
ctx.AssertCnstr(mk_resource(t11, t21, 3, 2));
ctx.AssertCnstr(mk_resource(t11, t31, 2, 2));
ctx.AssertCnstr(mk_resource(t21, t31, 2, 3));
ctx.AssertCnstr(mk_resource(t12, t22, 2, 3));
ctx.AssertCnstr(mk_resource(t12, t32, 3, 1));
ctx.AssertCnstr(mk_resource(t22, t32, 3, 1));
Model m = null;
LBool r = ctx.CheckAndGetModel(out m);
if (m != null)
{
m.Display(System.Console.Out);
m.Dispose();
}
}
}
}
static void Main()
{
Program p = new Program();
p.encode();
}
};
UPDATE:舊.msi安裝文件的幾個萃取後,我發現最新版本Z3的,它使用的dotNet框架小於V4是Z3 2.11;在這種情況下,我決定使用,而不是現在更新我的VS2008。
你不是之前問過這個嗎? –