关于C#:如何引用多个版本的程序集

关于C#:如何引用多个版本的程序集

How to reference to multiple version assembly

我正在开发Sharepoint应用程序并使用.NET AjaxControlToolkit库,我们正在向Sharepoint添加自定义aspx页面。 Sharepoint 2007以怪癖模式运行,因此我对AJAX库进行了一些修改,以使其行为正常。 问题是,其他团队已经在使用AJAX库,并且与我的版本不同。 这引起冲突,因为bin文件夹中可能只有一个同名的dll。

据我所知,.NET应该能够轻松处理这种情况。 我尝试使用强名和GAC来解决它,但它仍然引用bin文件夹中的dll。 如果bin文件夹中没有AjaxControlToolkit.dll,则应用程序将仅无法加载程序集。

如果我这样使用完整的装配信息

1
2
3
4
5
6
7
8
<%@
    Register
    tagprefix="AjaxControlToolkit"
    namespace="AjaxControlToolkit"
    assembly="AjaxControlToolkit, Version=1.0.299.18064,
    PublicKeyToken=12345678abcdefgh,
    Culture=neutral"

%>

它给了我编译器错误CS0433

有人可以帮助我如何在应用程序中使用程序集的多个版本吗?


好了,编译器错误CS0433的链接清楚地表明,核心问题并不在于所引用的程序集的多个版本-而是名称空间+类型名称冲突。

加载/引用类型时,编译器无法解析从哪个DLL加载该类型。 如果Sharepoint将同时加载两个DLL版本(如您所说的那样),则始终会出现此错误。

最简单的解决方法是更改新DLL中的命名空间,因为它确实具有您的自定义调整项,并且您可以控制代码-还要清楚地标记它。


推荐阅读