更新: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();
   }
}