Nantを使ってビルドするときにライセンス情報をアセンブリに埋め込む方法

※注意 PowerTools製品は、各対応環境一覧に記載されたVisual Studioでのビルド動作のみを保証しています。この記事の内容は、PowerTools製品のNantでのビルド動作を保証するものではございません。

Nantの基本的な使用方法については、下記のページが分かりやすいかと思います。

http://codezine.jp/a/article.aspx?aid=354&p=1

PowerTools製品などのサードパーティ製のコンポーネントでは、ほとんどの場合ライセンスプロバイダを使用したライセンス処理を組み込んでいます。このようなコンポーネントを使用する場合、コンパイル時にライセンスファイルをアセンブリに埋め込む必要があります。
Nantを使ってビルドする場合、下記のビルドファイルのようにターゲットをソリューションとする場合には、自動的にライセンスファイルが埋め込まれますので、何の問題もありません。

<?xml version="1.0" encoding="utf-8" ?>
<project name="NAntSample" default="build" basedir=".">
  <target name="build">
    <solution configuration="Debug" solutionfile="NantSampleSpreadWinCS.sln" />
  </target>
</project>

しかしながら、ソリューションではなく直接ソースファイルを指定するような方法の場合、単純に使用しているコンポーネントへの参照を指定しただけでは、コンパイルは成功するものの、作成されたexeを実行すると次のようなエラーが発生します。

ライセンス処理を有効にするためには、licenseタスクを使用してライセンスファイルを作成し、それをリソースとして埋め込むように指定してやる必要があります。ビルドファイルは下記のようになります。

<?xml version="1.0" encoding="utf-8" ?>
<project name="NAntSample" default="build" basedir=".">
  <property name="sdk.dir" value="C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322"/>
  <property name="spread.dir" value="C:\Program Files\SpreadNETWin\Bin"/>
  <target name="build">
    <license input="licenses.licx" licensetarget="NantSampleSpreadWin.exe" output="NantSampleSpreadWin.exe.license" verbose="true"> 
    </license>
    <csc target="winexe" output="NantSampleSpreadWin.exe" debug="true">
      <sources basedir=".">
        <includes name="*.cs"/>
      </sources>
      <arg value="/resource:NantSampleSpreadWin.exe.license,NantSampleSpreadWin.exe.licenses"  />
      <references>
        <includes name="${sdk.dir}\System.dll"/>
        <includes name="${sdk.dir}\System.Data.dll"/>
        <includes name="${sdk.dir}\System.Design.dll"/>
        <includes name="${sdk.dir}\System.Drawing.dll"/>
        <includes name="${sdk.dir}\System.Windows.Forms.dll"/>
        <includes name="${sdk.dir}\System.Xml.dll"/>
        <includes name="${spread.dir}\FarPoint.CalcEngine.dll"/>
        <includes name="${spread.dir}\FarPoint.Excel.dll"/>
        <includes name="${spread.dir}\FarPoint.PluginCalendar.WinForms.dll"/>
        <includes name="${spread.dir}\FarPoint.Win.dll"/>
        <includes name="${spread.dir}\FarPoint.Win.SpreadJ.dll"/>
      </references>
    </csc>
  </target>
</project>