更新:2007 年 11 月
错误消息
程序集“AssemblyName1”所使用的“TypeName”的版本高于所引用的程序集“AssemblyName2”的版本您要引用一个版本号高于所引用的程序集的版本号的类型。
例如,您有两个程序集:A 和 B。A 引用的类 myClass 被添加到 2.0 版的程序集 B 中。但是,对程序集 B 的引用指定的是 1.0 版。编译器有一致性绑定引用规则,对 2.0 版的引用无法由 1.0 版满足。
示例
本示例由 4 个代码模块组成:
两个 DLL,它们除了版本属性外,其他方面都是一样的。
一个引用它们的 DLL。
客户端。
下面是两个相同的 DLL 中的第一个。
复制代码 | |
---|---|
// CS1705_a.cs // compile with: /target:library /out:c:\\cs1705.dll /keyfile:mykey.snk [assembly:System.Reflection.AssemblyVersion("1.0")] public class A { public void M1() {} public class N1 {} public void M2() {} public class N2 {} } public class C1 {} public class C2 {} |
下面是程序集 2.0 版,由属性
复制代码 | |
---|---|
// CS1705_b.cs // compile with: /target:library /out:cs1705.dll /keyfile:mykey.snk using System.Reflection; [assembly:AssemblyVersion("2.0")] public class A { public void M2() {} public class N2 {} public void M1() {} public class N1 {} } public class C2 {} public class C1 {} |
将此示例保存在一个名为 CS1705ref.cs 的文件中,并使用以下标志编译该文件:/t:library /r:A2=.\bin2\CS1705a.dll /r:A1=.\bin1\CS1705a.dll
复制代码 | |
---|---|
// CS1705_c.cs // compile with: /target:library /r:A2=c:\\CS1705.dll /r:A1=CS1705.dll extern alias A1; extern alias A2; using a1 = A1::A; using a2 = A2::A; using n1 = A1::A.N1; using n2 = A2::A.N2; public class Ref { public static a1 A1() { return new a1(); } public static a2 A2() { return new a2(); } public static A1::C1 M1() { return new A1::C1(); } public static A2::C2 M2() { return new A2::C2(); } public static n1 N1() { return new a1.N1(); } public static n2 N2() { return new a2.N2(); } } |
下面的示例引用 1.0 版的 CS1705.dll 程序集。但语句 Ref.A2().M2() 引用 CS1705_c.dll 的类中的 A2 方法,它将返回 a2(别名为 A2::A),而 A2 通过 extern 语句引用 2.0 版,因此导致版本不匹配。
下面的示例生成 CS1705。
复制代码 | |
---|---|
// CS1705_d.cs // compile with: /reference:c:\\CS1705.dll /reference:CS1705_c.dll // CS1705 expected class Tester { static void Main() { Ref.A1().M1(); Ref.A2().M2(); } } |