2008-11-12 172 views
2

我有一個Windows應用程序(VS2005/C#),它有Enterprise和Pro兩個版本。在Pro版本中,某些功能和菜單被禁用。目前,我正在通過評論禁用代碼來創建企業版本,然後將每個可執行文件複製到另一個位置。顯然這個過程充滿危險...... :)Visual Studio中的配置和程序功能Windows應用程序

我想爲我的兩個可執行文件有兩個文件夾,並且visual studio應該把代碼禁用Pro版本中的功能,並把它們放在他們的正確的文件夾我有安裝程序項目,將從那裏拿起文件,併爲這兩個版本的安裝程序。該部分已經在工作,但在構建安裝程序之前,我手動將兩個可執行文件複製到正確的文件夾中。所以它吮吸......

我希望做的是這樣的:

#ifdef PROVERSION 
part1.disable(); 
part2.disable(); 
#endif 

這可能與Visual Studio ???

請注意,我的總體目標是自動創建兩個安裝程序的過程。

回答

2

從生成菜單,選擇配置管理器選項

在活動解決方案配置下拉列表中選擇「新建」

創建PRO兩新「配置」一加一爲企業

關閉配置經理。

打開項目屬性(從項目的上下文菜單) 選擇構建選項卡

選擇PRO配置(可從配置下拉列表)

輸入您編譯常數「PROVERSION」入條件編譯符號文本框。

現在,您只需從主工具欄上的配置下拉列表中選擇要構建的配置,然後進行構建即可。

當您使用PRO配置構建PRO時,散佈在代碼中的編譯器編譯指示(#IF PROVERSION)將包含限制您的功能集的代碼。

,如果你想具體包括在企業構建企業特點(與在PRO構建禁用企業功能),你也可以考慮設置爲企業配置的企業不斷

+0

這正是我曾嘗試過的一點,但我無法實現它的工作。對不起,我忘了提及,但這就是爲什麼我在標題中使用「配置」的原因。我會盡力而爲。這正是我想要的 - 將每個文件放在正確的文件夾中,加密器可以從那裏接收。 – Jasmine 2008-11-12 06:17:31

+0

這個工作非常好BTW,一旦我終於得到我的配置全部理順和使用#IF而不是#IFDEF – Jasmine 2008-11-19 22:59:08

0

爲什麼不創建一個單獨的程序集,以根據需要啓用/禁用這些功能?然後,只需包含特定版本的適當裝配...

0

您使用的是什麼類型的授權方案。我已經做了幾個應用程序,許可證密鑰激活了功能集,因此您只有一個可執行文件。

+0

我們正在使用Uniloc - 但我們目前在可執行文件上使用了一個包裝器,因爲我們沒有時間在代碼中實現許可證檢查功能,直到下一個版本。最終這將是一個非問題,因爲我們將使用Uniloc系統的功能管理。 – Jasmine 2008-11-12 04:43:27

2

是的,那當然是可能的。 Visual Studio解決方案默認具有兩種配置。 (發佈和調試)。您可以創建其他的像「EnterpriseDebug」和「EnterpriseRelease」只要到配置管理器下(建設|配置管理器),然後選擇<新建... >

配置管理器將默認創建一個名爲後的文件夾配置並將編譯後的二進制文件放入其中。您必須手動設置條件編譯符號並使用(#if)語句添加/刪除您的功能。

0

我會考慮使其完全動態的,以便在編譯時或構建安裝程序/部署程序包時不必做任何特殊的事情。以下是我會做一個商業WinForms應用程序...什麼都沒有火箭科學有關,但它的工作原理:

  1. 有發牌制度/機構/標誌,告訴你當前用戶是否被許可專業版或企業版。你甚至可以使用「試用」或「評估」選項。

  2. 設置一個CurrentUser對象(或類似的),告訴您當前用戶的許可證級別。這應該可以在整個應用程序中訪問。

  3. 使用plugin model以便功能/組件/功能是應用程序內的插件。隨着應用程序的主外殼打開,您可以將插件加載到應用程序中 - 使它們以您想要的方式顯示在用戶界面中。

  4. 研究創建custom attributes來裝飾代表插件的類。該屬性應指出該插件/功能所需的最低許可證。當插件加載器遇到新的插件時,請檢查該插件的屬性以查看需要什麼級別的許可證。如果當前用戶符合(或超過)該許可證,則加載該許可證。如果沒有,你不會。

  5. 如果您不能將您的功能/選項/工具劃分爲可輕鬆模塊化爲插件的東西,那麼您仍然可以使用CurrentUser許可證級別來檢查事物。例如,假設有一個在專業版的100「小工具」的一些限制(但不是企業):

例如:

enum LicenseLevel { 
    Eval = 0, 
    Pro = 1, 
    Enterprise = 2 
} 

// later...  

for(i=0; i < widgets.Count; i++) { 
    if (i == 100 && CurrentUser.LicenseLevel < LicenseLevel.Enterprise) 
    break; 
    // do stuff 
} 

希望與你的上述擬合的某種組合」重新尋找。

+0

這幾乎是我目前有,當我有我的適當的授權計劃,這是我的這樣做,但我目前的許可方案需要兩個不同的可執行文件。 – Jasmine 2008-11-12 06:14:23

0

me.yahoo.com男人是現貨。

您可以使用編譯時定義創建多個配置。

您還可以更改構建輸出目錄。默認情況下,你可能有bin/debug和bin/release。沒有任何東西阻止你擁有bin/pro和bin/enterprise輸出文件夾(例如)。

相關問題