2008-09-17 33 views

回答

1

如果你想做這樣的事情,你需要使用預處理器命令和條件編譯符號。

我會用這清楚地表明你的目標.NET版本符號(說NET11和NET20),然後包裝相關的代碼是這樣的:

#if NET11 
// .NET 1.1 code 
#elif NET20 
// .NET 2.0 code 
#endif 

之所以做這種方式,而不是一個簡單的if/else是一個額外的保護層,以防有人忘記定義符號。

這就是說,你應該深入到你想/需要做到這一點的原因的核心。

0

我會問爲什麼你必須維護兩個代碼庫,如果有任何機會,我會選擇一個代碼庫。

試圖讓兩個代碼庫與更改的數量保持同步,並且更改的類型將非常複雜,而爲這兩個版本構建的構建過程將非常複雜。

+0

關鍵是要有一個支持爲任一目標平臺構建的代碼庫。 – minty 2008-09-17 17:53:40

2

這裏有很多不同的選項。在我工作的地方,我們使用#if編譯指令,但它也可以使用單獨版本的獨立程序集來完成。

理想情況下,您至少應該將版本相關代碼保存在單獨的部分類文件中,並在編譯時提供正確的版本。如果我可以及時回去,我會強制執行此操作,現在我們的代碼庫中有大量的#if編譯指示,有時可能很難管理。整個#if編譯指令中最糟糕的部分是Visual Studio忽略了不會使用當前定義進行編譯的任何內容,因此檢查中斷更改非常容易。

NUnit同時支持1.1和2.0,因此是測試框架的不錯選擇。使用諸如NAnt之類的東西來製作單獨的1.1和2.0版本並不難,然後自動運行NUnit測試。

0

我們遇到了這個問題,最後我們實現了一個「兼容性層」,我們爲.NET v1.1和v2.0實現了一組接口和實用程序代碼。

然後我們的安裝程序爲正確的版本規定了正確的代碼。我們使用了NSIS(免費!),他們有你可以調用的函數來確定.NET版本。

相關問題