2010-04-08 79 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