如何引用多版本程序集

Posted

技术标签:

【中文标题】如何引用多版本程序集【英文标题】:How to reference to multiple version assembly 【发布时间】:2010-09-05 12:25:51 【问题描述】:

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

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

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

<%@ 
    Register 
    tagprefix="AjaxControlToolkit"
    namespace="AjaxControlToolkit"
    assembly="AjaxControlToolkit, Version=1.0.299.18064, 
    PublicKeyToken=12345678abcdefgh, 
    Culture=neutral"
%>

它给了我编译器错误 CS0433

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

【问题讨论】:

你在同一个控件中使用不同的程序集版本吗?还是同一个项目,但控件不同? 【参考方案1】:

Compiler Error CS0433 的链接清楚地表明,核心问题不在于引用的程序集的多个版本 - 而是名称空间 + 类型名冲突。

当您加载/引用一个类型时 - 编译器无法解析从哪个 DLL 加载该类型。如果 Sharepoint 将加载您的两个 DLL 版本(正如您所说的那样) - 这个错误总是会出现。

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

【讨论】:

以上是关于如何引用多版本程序集的主要内容,如果未能解决你的问题,请参考以下文章

程序集引用的“特定版本”属性在 Visual Studio 中究竟是如何工作的?

程序集引用的“特定版本”属性在 Visual Studio 中究竟是如何工作的?

PyTorch学习7《PyTorch深度学习实践》——MNIST数据集多分类(Softmax Classifier)

如何在 IronPython 2.7 中引用针对运行时版本“v2.0.xxx”构建的程序集?

如何在 npm 脚本中引用包版本?

如何使用 MSBuild 引用不同版本的 dll