CS1705 de erro do compilador

Mensagem de erro

O assembly 'AssemblyName1' usa 'TypeName' que tem uma versão maior do que o assembly referenciado 'AssemblyName2'

Você está fazendo referência a um tipo que possui um número de versão maior que o número de versão em um assembly referenciado.

Por exemplo, você tem dois assemblies, A e B.A faz referência a uma classe myClass que foi adicionado ao assembly B na versão 2.0. Mas a referência ao assembly B Especifica a versão 1.0.O compilador tem regras de Unificação de referências de ligação e uma referência à versão 2.0 não pode ser atendida pela versão 1.0.

Exemplo

Este exemplo consiste em quatro módulos de código:

  • Duas DLLs são idênticas, exceto para um atributo de versão.

  • Uma DLL que faz referência a eles.

  • Um cliente.

A seguir é a primeira das DLLs idênticos.

// 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 {}

A seguir está a versão 2.0 do sistema autônomo sembly, sistema autônomo especificado pelo AssemblyVersionAttribute atributo.

// 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 {}

salvar este exemplo em um arquivo chamado CS1705ref.cs e compilá-lo com os sinalizadores a seguir: /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(); }
}

O exemplo a seguir faz referência a versão 1.0 da montagem CS1705.dll.Mas a demonstrativo Ref.A2().M2() faz referência o A2 método na classe no CS1705_c.dll, que retorna um a2, qual é o alias para A2::A e A2 faz referência a versão 2.0 por meio de um extern demonstrativo, fazendo com que uma incompatibilidade de versão.

O exemplo a seguir gera 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();
   }
}