Avviso del compilatore (livello 2) CS1701

Aggiornamento: novembre 2007

Messaggio di errore

Se il riferimento all'assembly 'Nome assembly 1' corrisponde a 'Nome assembly 2', potrebbe essere necessario fornire i criteri di runtime.
Assuming assembly reference "Assembly Name #1" matches "Assembly Name #2", you may need to supply runtime policy

I due assembly si differenziano solo per i numeri di versione e/o rilascio. Perché possa essere completata l'unificazione, è necessario specificare le direttive nel file CONFIG dell'applicazione e fornire il nome sicuro di un assembly corretto, come indicato nel codice di esempio riportato di seguito.

Esempio

Nel seguente esempio a più file viene fatto riferimento a un assembly utilizzando due alias esterni diversi. Nel primo esempio viene generata la versione meno recente del codice che consente di creare l'assembly CS1701_d.

// CS1701_a.cs
// compile with: /target:library /out:cs1701_d.dll /keyfile:mykey.snk
using System.Reflection;
[assembly:AssemblyVersion("1.0")]
public class A {
   public void M1() {}
}

public class C1 {}

Di seguito è riportata la nuova versione del codice che consente di creare l'assembly CS1701_d. Tenere presente che questa versione del codice viene compilata in una directory diversa rispetto alla versione precedente perché i file di output hanno lo stesso nome.

// CS1701_b.cs
// compile with: /target:library /out:c:\\cs1701_d.dll /keyfile:mykey.snk
using System.Reflection;
[assembly:AssemblyVersion("2.0")]
public class A {
   public void M2() {}
   public void M1() {}
}

public class C2 {}
public class C1 {}

In questo esempio vengono impostati gli alias esterni A1 e A2.

// CS1701_c.cs
// compile with: /target:library /reference:A2=c:\\cs1701_d.dll /reference:A1=cs1701_d.dll

extern alias A1;
extern alias A2;
// using System;
using a1 = A1::A;
using a2 = A2::A;

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

Nell'esempio vengono utilizzati due diversi alias di A per chiamare i metodi. Il seguente codice di esempio genera l'avviso C1701.

// CS1701_d.cs
// compile with: /reference:c:\\CS1701_d.dll /reference:CS1701_c.dll
// CS1701 expected
class Tester {
   public static void Main() {
      Ref.A1().M1();
      Ref.A2().M2();
   }
}