現在、ライセンス管理が必要なコントロールを使った自作コントロール等を作成し、プロジェクト内部で利用しているのだが、実際の稼働環境でライセンスの問題が発生して動かないという現象が。
licenses.licx等の記述が無かったのが問題だったのだが、調べる過程で以下のことが判ったのでとりあえずメモ(きちんとライセンス機能について調べればたどり着く結論なんだろうけど、人が居ないし時間が無い)。
- licenses.licxにcultureやpublicKeyTokenは書かなくてもOK。
- licenses.licxはEXEにのみ必要。DLLに入れても無視される。
出典は http://www.atalasoft.com/kb/article.aspx?id=10103 。
で、EXEのプロジェクトにlicense.licxを追加したのだが、次の問題。NAntで自動ビルドを行おうとした場合に、以下のエラーが出る。
[solution] Building '**********' [Debug] ... [license] Processing complist 'C:\********\licenses.licx'... [license] C:\********\licenses.licx(1) : error LC0004 : Exception occured creating type 'System.TypeInitializationException' [license] Creating Licenses file C:\DOCUME~1\XXXXX\LOCALS~1\Temp\tmpED96.tmp\********.exe.licenses...
lc.exe(ライセンスコンパイラ)が、エラー0004を発生させている。
問題となった市販コントロールはGAC登録されていない*1ので、もしやと思ってGAC登録も行ってみたがダメ。上記の問題は、NAntでビルドした場合だけ発生し、
Visual Studioでのビルドでは発生しない。
加えて、NAntでビルドして、上記のエラーが出ても、ソースのビルド自体は成功(ライセンスの組み込みは失敗)という状態なので、成果物は普通に出来てしまう。
ところが、実際に動かすとライセンスエラーになる...という次第。解決しないとNAntによる自動ビルドは使えないのだが...どうしようか。
*1:GAC登録が必要かも?の理由: http://netrixforum.comzept.de/ShowPost.aspx?PostID=261