製品版を使っているのにトライアル版のダイアログが表示される。
GrapeCity の InputMan を使って開発してます。製品版を購入してビルド用マシンにインストール、ソリューションをリビルドして実行させたところ、何故か体験版のダイアログが表示されてしまいます。
ぐぐったら FAQ 「製品版を使っているのにトライアル版のダイアログが表示される」 を見つけたので対処してみたのですが、それでもこの現象は発生します。
実は今回のシステムはプロジェクト構成がかなり複雑で、
- InputMan のコントロールを継承したカスタムコントロールを提供するライブラリ
- 独自のユーザーコントロールを提供するライブラリ
- 業務別に様々な画面を提供するライブラリ群
- すべての画面を呼び出す元になるメインアプリケーションプロジェクト
これを図にするとこうなります。
上記はあくまで判り易くした図でして実際はもっと複雑です。15個以上もプロジェクトがあり、そのいちいちに licenses.licx が自動作成されてるので、もうわけのわかめである。(@@;)
InputMan の FAQ を読むと
5.クラスライブラリなどに配置して他のアセンブリから呼び出している
クラスライブラリのプロジェクト内でInputManのコントロールを利用している場合、呼び出し側プロジェクトにlicenses.licxファイルにそのコントロールの情報が組み込まれている必要があります。
「2.プロジェクトに licenses.licx ファイルが存在しない。」と同じ手順で、呼び出し側のプロジェクトにlicenses.licxファイルを設定してください。
とあるが、今回のプロジェクト構成の場合、「呼び出し側」はどこまで設定する必要があるのか?図のような構成にしたテストソリューションを作成して実験してみた。
・・・で、結論。licenses.licx だが、
1. メインプロジェクトにだけ設定しておけばよい。
これがもっとも嵌った。メインプロジェクトのホームには標準コントロールしか使っていなかったため licenses.licx が自動生成されず、まさかここで licenses.licx が必要とは思わなかった。
2. ソリューション内で使われている「ライセンスが必要なコントロール」を全て記述する。
全てというのは「動的生成」されたコントロールも含めての話。上の図だと、GcDateValidater とかはカスタムコントロールのメンバにして動的に生成していたため licenses.licx が自動生成されない。でもこれもきちんと licenses.licx 書かねばならない。
3. 自家製のカスタムコントロールの記述は全く必要ない。
ユーザーコントロールをフォームに貼り付けると、勝手に licenses.licx に記述されちゃうんだよね。しかしこれは全く必要ない!!
よって今回の場合、Main Application Project の licenses.licx に、ソリューション内で使われているすべての GrapeCity のコントロールを設定してやればよく、それ以外の他のプロジェクトには licenses.licx は全く不要だと判った。
以下 メインプロジェクトに記述した licenses.licx である。上の図の一番上のクラス図にあるすべてのコントロールが記述されていることが判るだろう。ちなみに Version や PublicKeyToken は念のため xxx・・・で伏せてある。
FAQ でいう「呼び出し側プロジェクト」とは、どうやらメインプロジェクトを指すらしいです。少し紛らわしい記述ですね。(^^;