2015-02-24 57 views
1

我有一個使用ASP.NET webforms和MVC 5混合開發的Web應用程序。我需要構建不同版本的應用程序,比如Basic,Deluxe和Premium,每個應用程序版本將有不同的功能。我知道預處理器指令是C#爲條件構建和創建應用程序的不同版本而提供的。在.NET中構建應用程序的不同版本

就我而言,我的班不應包括方法,命名空間或內置取決於應用程序版本的屬性,也有一些動態鏈接庫中不應該包括根據不同的應用版本,同樣的理論適用於前端代碼以及MVC代碼。

發展中的任何好的方向將不勝感激。

+1

你已經真正回答了你自己的問題 - 只需使用'#define','#if'和'#endif'來切換部分代碼。但是,如果這是一個web應用程序,並且您的客戶將無法觸及二進制文件,我認爲使用運行時評估的if if可以更好地實現功能切換。 – Dai 2015-02-24 10:54:32

+0

你會主持應用程序,還是你的客戶?如果你自己託管它們,那麼你可以在你的web.config文件中啓用基於特徵的appSettings值... – 2015-02-24 10:54:40

+0

使用'#if'開啓/關閉部分代碼或者每次只使用'if'需要嗎? – BlueTrin 2015-02-24 10:56:25

回答

1

根據您的功能,如果您自己託管它,您可以只擁有一個許可證系統來設置要使用的版本。

在您的應用程序(在你的ASPX和MVC編碼),你可以覈對此許可證(與<% if ...例如)知道是否啓用或禁用按鈕,表格的一部分,一個動作等

,你可以存儲這些許可證在數據庫甚至在每個用戶的基礎上,或在app.config設置。

如果你有一個應用程序,你的控制,你仍然可以使用這個許可方法,但你需要檢查它反對外部源。有一些工具可以爲您提供授權(並可選擇混淆)。

+0

@天使:這個答案對你有幫助嗎?需要更多幫助? – 2015-02-24 13:45:57

0

它去是很難維持3個不同的版本,使用#if#endif部分的應用程序中。我個人會不惜一切代價避免這種情況,而是使用傳統的運行時方法來控制3個版本之間的差異。

如果是100%,必要的代碼只運到誰被授權的,那麼你應該把這些代碼在一個單獨的程序,可能使用某種形式的插件架構的用戶。

1

您可以使用以下方法:

  1. 這不是件好事,在不同版本的產品應用程序的不同的API。爲什麼?因爲如果您提供相同的API,您的用戶可以輕鬆升級到Premium或Deluxe版本而無需重新編譯應用程序。您應該更好地使用相同的API,但鎖定Deluxe和Premium用戶的方法。使用時限定在代碼以鎖定或解鎖的功能,如下所示:
public bool SomeMethod() 
{ 
    #ifdef BASIC 
    raise new Exception("this method is available in Deluxe version only!"); 
    #endif 
    #ifdef DELUXE || PREMIUM 
    ; // do some work available for deluxe versions only 
    #endif 
} 
  • 創建2個配置爲應用程序的每個版本,基於一個「調試「,另一個基於產品的」發佈「配置,因此您可以在發佈和調試模式下測試不同的版本。所以,你可能有這樣的事情:
  • Debug 
    Release 
    Debug BASIC 
    Release BASIC 
    Debug DELUXE 
    Release DELUXE 
    Debug PREMIUM 
    Release PREMIUM 
    

    這也將導致對於不同版本的輸出文件夾(你可以在配置文件的屬性進行調整)。

  • 修改「生成後事件」命令行代碼(在項目 - 屬性 - 生成事件),以從輸出文件夾中刪除不必要的DLL文件,這樣的:
  • del PremiumDll.dll 
    
    +0

    這對ASP.NET頁面不起作用。 – 2015-02-24 11:23:50

    相關問題