2010-04-08 37 views
0

的新版本,请考虑以下情况:引用既是一个老版本,同样的.NET的DLL

WidgetCompany产生了.NET的DLL在2006年被称为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(Ver 1.0)和Widget.dll(Ver 2.0)。这样做会给我以下消息:“无法添加对'Widget.dll'的引用。项目中已存在对组件'Widget'的引用”要解决该问题,我可以简单地重命名2.0版本Widget.dllWidget.3.dll。但这是我卡住的地方。任何引用“dll”中找到的类型的尝试都会导致含糊不清,编译器显然不知道我在这个或那个案例中真正想要的东西。

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

回答

2

关闭我的头顶,这是我会做的。

更改新版本的Widget的名称,并保留旧版代码的工作方式。

然后创建一个项目,该项目是新窗口小部件DLL的包装。

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

+0

所以,就像我的“创建一个新的根”的想法,只有通过一个新的程序集。这肯定会满足我的需求,感谢您的建议!我仍然会坚持多一点,让我指出一个神奇的app.config设置,可以将这些恶作剧关闭:) – ckittel 2010-04-08 03:51:48

相关问题