gpt4 book ai didi

.net - 引用同一 .NET DLL 的旧版本和新版本

转载 作者:行者123 更新时间:2023-12-04 17:00:52 24 4
gpt4 key购买 nike

考虑以下情况:

WidgetCompany 于 2006 年制作了一个 .NET DLL,名为 Widget.dll,版本 1.0。我在整个 .NET 应用程序中都使用了这个 Widget.dll 文件。随着时间的推移,WidgetCompany 一直在更新 Widget.dll,我从不费心去跟上,继续随我的软件一起发布 Widget.dll 的 1.0 版。现在是 2011 年,我的项目现在是 .Net 3.5 应用程序,而 WidgetCompany 已经推出了 Widget.dll 2.0 版。它的外观和功能几乎与 Widget.dll 1.0 版相同,使用与以前相同的所有命名空间和类型名称。

但是,Widget.dll 2.0 版自 1.0 版以来有许多运行时中断性更改,我不能简单地切换到新版本;但是,我不想继续针对 1.0 版本进行开发,因此继续深入挖掘自己的漏洞。我想要做的是使用 Widget.dll 2.0 版在我的项目中进行所有新开发,同时保持 Widget.dll 1.0 版,直到我有时间将我的所有 1.0 消耗转换为更新的 2.0 代码。

现在,对于初学者来说,我显然不能简单地在 Visual Studio 中同时引用 Widget.dll(1.0 版)和 Widget.dll(2.0 版)。这样做会给我以下消息:“无法添加对 'Widget.dll' 的引用。对组件 'Widget' 的引用已存在于项目中。”为了解决这个问题,我可以简单地重命名版本 2.0 Widget.dllWidget.3.dll .但这就是我被困的地方。任何对在“dll”中找到的引用类型的尝试都会导致歧义,并且编译器显然不知道我在这种或那种情况下真正想要什么。

有什么我可以做的给 DLL 一个新的“根”命名空间之类的吗?例如,如果我可以说“Widget.dll 有一个新的根命名空间 Legacy”,那么我可以更新现有代码以引用在 Legacy.<RootNamespace> 中找到的类型命名空间,而所有新代码都可以简单地引用 <RootNamespace> 中的类型命名空间。白日梦还是现实?是否有其他解决方案可以解决这种情况(除了“首先不要陷入这种情况”)?

最佳答案

这就是我要做的。

为新版本更改 Widget 的名称,并保留旧版本以保持遗留代码正常工作。

然后创建一个项目,它是新小部件 DLL 的包装器。

将此新包装器项目添加到我现有的解决方案中,然后从现有代码中引用该包装器,然后编译器应忽略类型冲突,因为新小部件位于不同的项目中。

关于.net - 引用同一 .NET DLL 的旧版本和新版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2597376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com