共用方式為


編譯器錯誤 CS1705

更新:2007 年 11 月

錯誤訊息

組件 'AssemblyName1' 使用比所參考組件 'AssemblyName2' 版本更高的 'TypeName'

您正在參考的型別,其版本號碼高於所參考組件中的版本號碼。

例如,您有兩個組件,分別是 A 和 B。A 參考的類別 myClass 已加入至版本為 2.0 中的組件 B。但組件 B 的參考指定的版本為 1.0。由於編譯器在繫結參考方面有統一規則,因此對 2.0 版的參考不能使用 1.0 版。

範例

這個範例包含四個程式碼模組︰

  • 兩個 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 屬性 (Attribute) 所指定。

// 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(); }
}

下列範例會參考 CS1705.dll 組件的 1.0 版。但 Ref.A2().M2() 陳述式是參考 CS1705_c.dll 之類別的 A2 方法,傳回別名為 A2::A 的 a2,而 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();
   }
}