编译器警告(等级 2)CS1701

如果程序集引用“Assembly Name #1”与“Assembly Name #2”一致,则可能需要提供运行时策略

这两个程序集的发行号和/或版本号不同。 要实现统一,必须在应用程序的 .config 文件中指定指令,并且必须提供程序集正确的强名称,如下面的示例代码所示。

示例 1

下面的多文件示例使用两个不同的外部别名引用一个程序集。 第一个示例生成较旧版本的代码,该代码创建程序集 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 {}  

示例 2

这是用于创建较新版本的程序集 CS1701_d 的代码。 注意,由于这两个版本的输出文件同名,因此它需要将较新版本编译到不同于较早版本的目录中。

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

示例 3

此示例设置外部别名 A1 和 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(); }  
}  

示例 4

此示例调用的方法使用 A 的两个不同的别名。下面的示例生成 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();  
   }  
}