2

Enterprise と Pro の 2 つのバージョンがある Windows アプリケーション (VS2005/C#) があります。Pro バージョンでは、一部の機能とメニューが無効になっています。現在、無効にするコードをコメントアウトして Enterprise バージョンを作成し、各実行可能ファイルを別の場所にコピーすることでこれを行っています。明らかに、このプロセスには危険が伴います... :)

2 つの実行可能ファイル用に 2 つのフォルダーが必要です。ビジュアル スタジオは、プロ バージョンの機能を無効にするコードを配置し、それぞれを正しいフォルダーに配置する必要があります。そこからファイルを取得して 2 つのバージョンのインストーラーを作成するインストーラー プロジェクトがあります。その部分はすでに機能していますが、インストーラーをビルドする前に、2 つの実行可能ファイルを適切なフォルダーに手動でコピーしています。だからダサい…

私がやりたいことは次のようなものです:

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

これはVisual Studioで可能ですか?

私の全体的な目標は、2 つのインストーラーの作成プロセスを自動化することです。

4

7 に答える 7

2

はい、それは確かに可能です。Visual Studio ソリューションには、既定で 2 つの構成が付属しています。(リリースとデバッグ)。「EnterpriseDebug」や「EnterpriseRelease」などの追加のものを作成できます (ビルド | 構成マネージャー) の下の構成マネージャーに移動し、<新規...> を選択します。

構成マネージャーは、既定で、構成にちなんだ名前のフォルダーを作成し、コンパイルされたバイナリ ファイルをそこに配置します。条件付きコンパイル シンボルを手動で設定し、(#if) ステートメントを使用して機能を追加/削除する必要があります。

于 2008-11-12T04:43:11.990 に答える
2

BUILD メニューから、構成マネージャー オプションを選択します。

アクティブなソリューション構成のドロップダウンで、「新規」を選択します

PRO 用と ENTERPRISE 用に 1 つずつ、2 つの新しい「構成」を作成します。

構成マネージャーを閉じます。

プロジェクトのプロパティを開きます (プロジェクトのコンテキスト メニューから) ビルド タブを選択します

PRO 構成を選択します (CONFIGURATION ドロップダウンから)

コンパイル定数「PROVERSION」を条件付きコンパイル記号テキストボックスに入力します。

あとは、メイン ツールバーの構成ドロップダウンからビルドする構成を選択し、ビルドを実行するだけです。

PRO 構成を使用して PRO をビルドすると、コード全体に散在するコンパイラ プラグマ (#IF PROVERSION) に、機能セットを制限するコードが含まれます。

ENTERPRISE ビルドに ENTERPRISE 機能を具体的に含めたい場合は、ENTERPRISE 構成に ENTERPRISE 定数を設定することも検討してください (PRO ビルドでエンタープライズ機能を無効にするのではなく)。

于 2008-11-12T04:50:16.360 に答える
1

新しい条件付きコンパイル定数を作成し、 PROVERSION を定義できます。

于 2008-11-12T04:37:03.297 に答える
0

コンパイル時またはインストーラー/展開パッケージのビルド時に特別なことをする必要がないように、完全に動的にすることを検討します。商用のwinformsアプリでそれを行う方法は次のとおりです...それについてロケット科学は何もありませんが、機能します:

  1. 現在のユーザーが Pro または Enterprise のライセンスを取得しているかどうかを示すライセンス スキーム/メカニズム/フラグを用意します。「トライアル」または「評価」オプションを使用することもできます。

  2. 現在のユーザーのライセンス レベルを示す CurrentUser オブジェクト (または同様のもの) を設定します。これは、アプリ全体でアクセスできる必要があります。

  3. プラグイン モデルを使用して、機能/コンポーネント/機能がアプリケーション内のプラグインになるようにします。アプリのメイン シェルが開いたら、プラグインをアプリにロードして、必要な方法で UI に表示します。

  4. プラグインを表すクラスを装飾するカスタム属性の作成を検討してください。この属性は、そのプラグイン/機能に必要な最小ライセンスを示す必要があります。プラグイン ローダーが新しいプラグインを見つけたら、そのプラグインの属性をチェックして、どのレベルのライセンスが必要かを確認します。現在のユーザーがそのライセンスを満たしている (または超えている) 場合は、それをロードします。そうでなければ、あなたはしません。

  5. 機能/オプション/ツールをプラグインとして簡単にモジュール化できるものに分離できない場合でも、その CurrentUser ライセンス レベルを使用して物事を確認できます。たとえば、Pro バージョン (ただしエンタープライズ版ではない) に 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
}

上記のいくつかの組み合わせが、探しているものに適合することを願っています。

于 2008-11-12T05:00:45.653 に答える
0

必要に応じて機能を有効/無効にする別のアセンブリを作成してみませんか? 次に、特定のバージョンに適したアセンブリを含めるだけです...

于 2008-11-12T04:30:54.060 に答える
0

使用しているライセンス スキームの種類。ライセンスキーが機能セットをアクティブ化したいくつかのアプリを実行したので、実際には実行可能ファイルは1つしかありませんでした.

于 2008-11-12T04:35:27.560 に答える
0

me.yahoo.com の男がぴったりです。

コンパイル時の定義を使用して、複数の構成を作成できます。

ビルド出力ディレクトリを変更することもできます。デフォルトでは、おそらく bin/debug と bin/release があります。bin/pro および bin/enterprise 出力フォルダー (たとえば) を使用することを妨げるものは何もありません。

于 2008-11-12T06:33:12.050 に答える