クラス・ライブラリ化したら突然「評価期限切れ」のメッセージが [FarPoint.Win.Spread]
@IT より http://www.atmarkit.co.jp/fdotnet/vblab/appqa_05/appqa_05_01.html
グレープシティのコンポーネントを購入して利用していたのですが、突然評価版であることを示すメッセージが表示されるようになりました。そのとき変更したことといえば、クラス・ライブラリ化したことくらいしか思いつかないのですが、何か関係があるのでしょうか?
.NET Frameworkには、知的所有権の保護を行うための共通のライセンス処理が用意されています。多くのサードパーティ製の.NETコンポーネントがこのライセンス処理を採用しており、その使用方法や仕組みは共通のものとなっています。
通常、ライセンスを付与されたコンポーネントに必要な処理はVisual Studioが自動的に行ってくれるため、ライセンスの仕組みを理解する必要はほとんどありません。しかしながら、どのコンポーネントがライセンス付与されたものであるのかを識別するテキスト・ファイル「.licxファイル」がプロジェクト内に必要であるということだけは覚えておく必要があります。このようなファイルはVB 6にはありませんでした。
サードパーティ製コンポーネントがコントロール(フォームに貼り付けることができるもの)である場合、コントロールをフォームに貼り付ける動作により、Visual Studioが自動的に.licxファイルを作成し、プロジェクトに追加してくれます。しかしながら、それ以外の場合には手動で.licxファイルを作成し、プロジェクトへ追加しなければなりません。
この.licxファイルが作成されていない、もしくは作成されているが適切な場所に存在しないといったことにより、製品版が評価版として認識されてしまう場合が多いようです。
ここでは、.licxファイルを手動で作成しなければならない代表的な3つのパターンについて解説したいと思います。
ライセンス付与されたコンポーネントを設計時ではなく実行時にコードから生成している場合
プロジェクトの種類がWindowsアプリケーションやWebアプリケーションで、ライセンス付与されたコンポーネントがフォームに貼り付けることのできるコントロールであれば、一度フォームにコントロールを貼り付けて.licxファイルを自動生成させ、その後、貼り付けたコントロールを削除しておくという方法が最も手っ取り早いでしょう。
そうでない場合には、下記のような方法で.licxファイルをプロジェクトに手動で追加します。
- プロジェクトを右クリックし、[追加]-[新しい項目の追加]を選択します。
- [テキスト ファイル]を選択し、「licenses.licx」という名前を指定します*。
- プロジェクト内の個々のライセンス付与されたコンポーネントについて、.licxファイルに下記のような記述を追加します。
|
|
.licxファイルに記述するライセンス付与されたコンポーネントの宣言 | |
多くの場合、製品のヘルプ・ドキュメントなどに.licxファイルへ記述すべき内容が記されているので、それを参照するとよいだろう。 |
* 拡張子が.licxであればファイル名は任意で構いませんが、「licenses.licx」という名前にしない場合、後述の[ランタイム ライセンスのビルド]というメニュー項目が表示されません。なお、Visual Studio 2005で「.licx」に拡張子を変更すると、[ビルド アクション]プロパティの値が自動的に「埋め込まれたリソース」になります。 |
ライセンス付与されたコンポーネントを継承して使用している場合、あるいはライセンス付与されたコンポーネントを使ってユーザー・コントロールを作成している場合
これら2つのケースでは、作成した継承コンポーネントやユーザー・コントロールをフォームに貼り付けても.licxファイルは自動的に作成されません。この場合には下記の2つの方法のどちらかにより対応します。
(A) 継承したクラスやユーザー・コントロールとして作成したクラスにLicenseProvider属性を設定する
|
||
LicenseProvider属性を設定するコード例(上:VB、下:C#) |
LicenseProvider属性を設定することで、継承コンポーネントやユーザー・コントロールをフォームに貼り付けたときにも.licxファイルが自動的に作成されるようになります。
ただし、作成した継承コンポーネントやユーザー・コントロールのバージョンが頻繁に更新されるような場合には注意が必要です。.licxファイルに書き込まれる内容にはバージョン番号が含まれています。そして、バージョンが更新されるたびにそれに対応した新たな行が.licxファイル内に追加され、以前のバージョンの記述はそのまま残ってしまいます。
その結果、.licxファイルに不要な記述があると判断され、「"LC.exe" はコード -1 を伴って終了しました。」といったエラーが発生します。この場合には、次の(B)の方法を採用した方がよいでしょう。
(B) ライセンス付与されたコンポーネントに対応した.licxを手動で作成する
「 ライセンス付与されたコンポーネントを設計時ではなく実行時にコードから生成している場合」で述べた方法で、手動にて.licxを作成します。
ライセンス付与されたコンポーネントをほかのアセンブリから呼び出して利用している場合
ライセンス付与されたコンポーネントをクラス・ライブラリなどで使用し、ほかのアセンブリからそのクラス・ライブラリを呼び出して利用している場合、クラス・ライブラリのプロジェクトではなく、呼び出し元のプロジェクトに.licxファイルが必要になります。
この場合にも述べた方法で.licx ファイルを作成し、呼び出し元のプロジェクトに追加します。
最後に補足事項を2つほど述べておきます。
.licxファイルは、プロジェクト内であれば基本的にどこに作成しても構いません。
また、Visual Studio 2005で「Webサイト」のプロジェクトを使用している場合には、ASP.NET 2.0のプリコンパイル機能をサポートするために、.licxファイルからApp_Licenses.dllが作成されるようになっています。このため、.licxファイルを手動で作成もしくは更新した場合には、App_Licenses.dllも手動で作成/更新する必要があります。
これには.licxファイルを追加後、以下の手順を実行します。
- ソリューション・エクスプローラにて.licxファイルをクリックして選択します。
- メニューから[ビルド]-[ランタイム ライセンスのビルド]を実行します。
これによりApp_Licenses.dllが作成/更新されます。
コメント 0