区分两个相同的私有程序集

时间:2010-11-26 13:55:37

标签: c# .net

我有一个使用(已引用)类库(myLib.dll私有程序集)的应用程序。

我创建了一个新的类库项目,其中包含与第一个类库完全相同的代码。

当我在应用程序和第二个dll中放入一个文件夹时,它会在我运行时抛出异常。

应用程序如何区分这两个程序集,因为它们名称不强?

这是应用程序

class Program
{
    static void Main(string[] args)
    {
        try
        {
            mYnameSpace.Class1 c = new mYnameSpace.Class1();
            c.test1();
            Console.ReadLine();
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex);
        }
    }
}

这是每个库的代码

namespace mYnameSpace
{
  public class Class1
  {
    public void test1()
    {
        Console.WriteLine("hello");
    }
  }
}

它显示了junt及时deb​​uger。 (“发生未处理的异常”)

2 个答案:

答案 0 :(得分:0)

程序集可能没有签名,但它们仍然有自己的GUID。程序集主要由GAC中的GUID标识,而不是文件名。

命名空间不同。如果您在项目中引用了两个程序集并且它们共享一个公共命名空间,那么编译器将抛出一个歧义异常,因为它无法确定您尝试使用哪个程序集。

答案 1 :(得分:0)

如果程序集不在GAC中,则CLR将在探测路径中的目录中搜索具有相同显示名称的可执行文件。然后检查它找到的其余部件属性,AssemblyVersion,Culture和PublicKeyToken。与引用程序集不匹配会产生异常。我猜测汇编版本不匹配,因为文化通常是*,公钥标记为空。

当然,异常消息将为您提供比我的答案更好的诊断。