Partager via


Erreur du compilateur CS1705

Mise à jour : novembre 2007

Message d'erreur

L'assembly 'NomAssembly1' utilise 'NomType' qui a une version supérieure par rapport à l'assembly 'NomAssembly2' référencé
Assembly 'AssemblyName1' uses 'TypeName' which has a higher version than referenced assembly 'AssemblyName2'

Vous référencez un type qui a un numéro de version plus élevé que le numéro de version d'un assembly référencé.

Par exemple, vous avez deux assemblys, A et B. A référence une classe myClass qui a été ajoutée à l'assembly B dans la version 2.0. Mais la référence à l'assembly B spécifie la version 1.0. Le compilateur dispose de règles d'unification pour lier les références, et une référence à la version 2.0 ne peut pas être satisfaite par la version 1.0.

Exemple

Cet exemple se compose de quatre modules de code :

  • Deux DLL qui sont identiques (à l'exception d'un attribut de version).

  • Une DLL qui y fait référence.

  • Un client.

Ce qui suit est la première des DLL identiques.

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

Voici la version 2.0 de l'assembly, comme spécifié par l'attribut 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 {}

Enregistrez cet exemple dans un fichier nommé CS1705ref.cs et compilez-le avec les indicateurs suivants : /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(); }
}

L'exemple suivant référence la version 1.0 de l'assembly CS1705.dll. Toutefois, l'instruction Ref.A2().M2() fait référence à la méthode A2 de la classe de CS1705_c.dll, qui retourne la valeur a2 (alias de A2::A) et A2 fait référence à la version 2.0 via une instruction extern, ce qui provoque une incompatibilité de versions.

L'exemple suivant génère l'erreur 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();
   }
}