2010-05-31 49 views
8

我想知道如何在VS2008 Professional(包括Web部署項目)中編寫C#ASP.NET 3.5應用程序的三個不同版本。 我有我的應用程序的Light,Pro和Ultimate版本(或版本)。 目前我已經在配置管理器中使用了三個構建版本的所有解決方案,並且我在整個代碼中使用了預處理器指令(在一萬行代碼中有大約20個這樣的構造,因此它是可監督的):如何在一個解決方案中編寫Light,Pro,Ultimate三個版本

#if light 
//light code 
#endif 
#if pro 
//pro code 
#endif //etc... 

我讀了幾個小時的計算器,想到遇到如何微軟用它不同的Windows版本來做這件事,但沒有找到我所期望的。 某處有關於預處理器指令是否邪惡的討論。

我這些#IF-指令喜歡的是:

  • 的差異並排端代碼, 所以我將在6個月後瞭解該 不同版本的代碼
  • 和不給 的其他版本編譯代碼 給客戶的特殊好處。

好,長期解釋,重複問題: 什麼是最好的方式去?

回答

7

我會忍不住在運行不同的許可證管理的差異,並啓用/禁用使用該配置的功能。爲什麼?

  1. 您只需構建一個可部署的。
  2. 你可以更容易地單元測試,而不是構建3個版本並測試它。
  3. 用戶可以升級並簡單地發送新的許可證。他們不必升級/重新安裝。

您必須權衡這一點,以免分發您的客戶實際未支付的解決方案(並且可以通過適當安全的許可證密鑰啓用)。

+0

非常感謝這個答案。 我讀過許多關於許可證密鑰等的文章。我目前的觀點是更好地將大部分努力用於開發新功能,而不是花費時間在授權/混淆上,這使得所有這些都變得複雜,並且很容易被黑客繞過。 由於這是一個ASP.NET應用程序,在公司中使用: - 我將正確的版本(Light,Pro ..)發送給每個公司 - 並按年收取 - 在許可證結束時提示顯示我也打電話給客戶) - 如果沒有更新,時間炸彈會暫停執行 - 續約時我發送一個新的延期炸彈應用程序 – Henry99 2010-05-31 11:19:46

0

我會建議像平常一樣創建基本的類和功能,但是允許覆蓋那些特定於版本的方法。

然後您創建一個覆蓋該方法的輕/ pro/ultimate版本程序集。

然後你需要一個工廠,根據版本instanciate正確的覆蓋類型。

在這裏,你可以與內部訪問工作,使代碼組件內部可見的版本,大會的

2

我的第一個想法是將您的軟件分成各種模塊(項目/組件),然後在您的解決方案中創建三個不同的安裝項目,每個版本一個。在設置中,您只包含您需要的模塊。

你將失去​​「並排」的代碼,但恕我直言,這只是創建複雜的方法,而不是可維護的代碼。如果您想爲某個類型提供更多功能,或者派生類,請使用擴展方法。

相關問題