当前位置:  开发笔记 > 编程语言 > 正文

引用同一程序集的不同版本

如何解决《引用同一程序集的不同版本》经验,为你挑选了2个好方法。

如果A引用程序集B 1.1和C,而C引用B 1.2,那么如何避免程序集冲突?

我确实认为C的引用会被封装掉并且不会引起任何问题,但是看起来所有的dll都被复制到了bin,这就是问题发生的地方.

我理解这两种方法是使用GAC还是汇编绑定?GAC对我来说似乎不是最好的方法,因为我不喜欢假设dll会在那里,我更喜欢在我的解决方案中引用lib目录中的dll.

如果程序集绑定对我来说似乎不健壮,那么如果程序集的某个版本具有另一个版本的功能,那么这不会产生问题吗?


在我的情况下,因为我正在使用第三方dll使用旧版本的nHibernate,而不是我自己使用.



1> Kilhoffer..:

我过去使用GAC获得了相同的结果,但您应该质疑您必须引用多个版本的原因,并尽可能避免使用它.如果必须这样做,绑定重定向可能对您的情况有所帮助.

还有,你读过这个吗?



2> Peter Kelly..:

一种看似鲜为人知的方法是使用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的网格控件.


那么,你如何实际使用它?这是什么命令提示符,它如何在构建过程中集成?
除提供程序通常不会在版本之间更改dll的名称之外,此方法正常工作,因此您最终将尝试引用具有相同名称的两个程序集。Studio不喜欢这样,并且不确定地将其中之一复制到输出文件夹,因此仅在dll版本不同时才起作用。
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有