컴파일러 오류 CS1705

'AssemblyName1' 어셈블리는 참조된 어셈블리 'AssemblyName2' 이후 버전인 'TypeName'을(를) 사용합니다.

참조된 어셈블리의 버전 번호보다 이후 버전의 형식을 참조하고 있습니다.

예를 들어 A와 B라는 두 개의 어셈블리를 가정해 봅니다. A는 버전 2.0에서 어셈블리 B에 추가된 myClass 클래스를 참조합니다. 그러나 어셈블리 B에 대한 참조에서 버전 1.0을 지정합니다. 컴파일러에는 참조 바인딩에 대한 통일된 규칙이 있으며 버전 1.0으로는 버전 2.0에 대한 참조를 충족시킬 수 없습니다.

예제

이 샘플은 네 개의 코드 모듈로 구성되어 있습니다.

  • 버전 특성을 제외하고 동일한 두 개의 DLL

  • 이 DLL을 참조하는 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 {}

다음은 AssemblyVersionAttribute 특성으로 지정된 버전 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(); }
}

다음 샘플에서는 CS1705.dll 어셈블리의 버전 1.0을 참조합니다. 그러나 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();
   }
}