编译器错误 CS1705
更新: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 版,由属性 AssemblyVersionAttribute 指定。
// 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();
}
}