如果A引用程序集B 1.1和C,而C引用B 1.2,那么如何避免程序集冲突?
我确实认为C的引用会被封装掉并且不会引起任何问题,但是看起来所有的dll都被复制到了bin,这就是问题发生的地方.
我理解这两种方法是使用GAC还是汇编绑定?GAC对我来说似乎不是最好的方法,因为我不喜欢假设dll会在那里,我更喜欢在我的解决方案中引用lib目录中的dll.
如果程序集绑定对我来说似乎不健壮,那么如果程序集的某个版本具有另一个版本的功能,那么这不会产生问题吗?
在我的情况下,因为我正在使用第三方dll使用旧版本的nHibernate,而不是我自己使用.
我过去使用GAC获得了相同的结果,但您应该质疑您必须引用多个版本的原因,并尽可能避免使用它.如果必须这样做,绑定重定向可能对您的情况有所帮助.
还有,你读过这个吗?
一种看似鲜为人知的方法是使用extern关键字.
来自C#参考
要引用具有相同完全限定类型名称的两个程序集,必须在命令提示符处指定别名,如下所示:
/r:GridV1=grid.dll
/r:GridV2=grid20.dll
这将创建外部别名GridV1和GridV2.要在程序中使用这些别名,请使用
extern
关键字引用它们.例如:extern别名GridV1;
extern别名GridV2;
每个extern别名声明都引入了一个额外的根级命名空间,它与全局命名空间相似(但不在其中).因此,通过使用完全限定名称(可以根据适当的名称空间别名),可以毫无歧义地引用每个程序集中的类型.
在前面的示例中,GridV1 :: Grid将是grid.dll的网格控件,而GridV2 :: Grid将是grid20.dll的网格控件.