我有一个使用(已引用)类库(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及时debuger。 (“发生未处理的异常”)
答案 0 :(得分:0)
程序集可能没有签名,但它们仍然有自己的GUID。程序集主要由GAC中的GUID标识,而不是文件名。
命名空间不同。如果您在项目中引用了两个程序集并且它们共享一个公共命名空间,那么编译器将抛出一个歧义异常,因为它无法确定您尝试使用哪个程序集。
答案 1 :(得分:0)
如果程序集不在GAC中,则CLR将在探测路径中的目录中搜索具有相同显示名称的可执行文件。然后检查它找到的其余部件属性,AssemblyVersion,Culture和PublicKeyToken。与引用程序集不匹配会产生异常。我猜测汇编版本不匹配,因为文化通常是*,公钥标记为空。
当然,异常消息将为您提供比我的答案更好的诊断。