TIPS
- GACにインストールされていないアセンブリをインラインタスクから利用するには、リフレクションを使って動的にロードするしかない模様
以下のケースだとMSBuildの動作が異様に遅くなる。TARGET_FOLDERに適切なフォルダのパスを記述すると改善する。*1
<PropertyGroup> <TARGET_FOLDER></TARGET_FOLDER> </PropertyGroup> <ItemGroup> <TARGET_FILES Include="$(TARGET_FOLDER)\**\*.*" /> </ItemGroup>
次のように記述するとTARGET_FOLDERが空でも問題ない。
<PropertyGroup>
<TARGET_FOLDER></TARGET_FOLDER>
</PropertyGroup>
<Choose>
<When Condition="'$(TARGET_FOLDER)'!='' And Exists('$(TARGET_FOLDER)\.')">
<ItemGroup>
<TARGET_FILES Include="$(TARGET_FOLDER)\**\*.*" />
</ItemGroup>
</When>
</Choose>
カスタムタスク
片手間で作ったMSBuild用カスタムタスク。要.NET Framework 4.0以降。なお、吉里吉里2/KAG3用カスタムタスクはMSBuildで定型作業を自動化を参照のこと。
InnoSetup5Taskリファレンス
Inno Setup 5のコマンドラインコンパイラを起動するカスタムタスク。
ISCCタスク
Inno Setupコンパイラ(ISCC.exe)を実行し、Inno Setupスクリプト(.iss)をコンパイルする。
| 属性 | 型 | 読込 | 書込 | 説明 | 備考 |
| ScriptFile | String | × | ○ | 指定必須。Inno Setupスクリプト(.iss)名を指定する | |
| OutputDir | String | × | ○ | インストーラの出力先フォルダ名を指定する | |
| OutputBaseFilename | String | × | ○ | インストーラのファイル名(拡張子なし)を指定する | |
| Quiet | Boolean | × | ○ | True指定時、サイレントモードでコンパイルする | 省略時はFalse |
| IsppOptions | String | × | ○ | ISPP拡張オプションを指定する | |
| WorkingDirectory | String | × | ○ | コマンドを実行するフォルダを指定する | |
| ExitCode | Int32 | ○ | × | ISCCタスクの出力パラメータとして、ISCC.exeの終了コードを返す |
- OutputDirを指定すると、Inno Setupスクリプト(.iss)中のOutputDirの値を無視する
- OutputBaseFilenameを指定すると、Inno Setupスクリプト(.iss)中のOutputBaseFilenameの値を無視する
- /Sオプションには対応していない
プロパティIS5_HOME、環境変数IS5_HOME
InnoSetup5Task.dllが実行するISCC.exeは以下の順番で決まる:
- Inno Setup 5がデフォルトのフォルダにインストールされている場合、%ProgramFiles%\Inno Setup 5\ISCC.exeを実行する
- プロパティIS5_HOMEが設定されている場合、$(IS5_HOME)\ISCC.exeを実行する
- 環境変数IS5_HOMEが設定されている場合、%IS5_HOME%\ISCC.exeを実行する
- どちらも設定されていない場合、環境変数PATHの設定に従ってISCC.exeを実行する
ここでIS5_HOMEとはInno Setup 5のインストール先フォルダを示す。
使用例
以下のXMLファイル(ファイル名はis5task.proj)を例に説明する。プロパティの値(IS5TASK_FOLDER~SCRIPT_FILE)は各自の環境に合わせて修正のこと。
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- プロパティの設定(この値を変更してください) -->
<PropertyGroup>
<!-- InnoSetup5Task.dllのあるフォルダ -->
<IS5TASK_FOLDER>C:\CustomTask</IS5TASK_FOLDER>
<!-- Inno Setupスクリプト(.iss) -->
<SCRIPT_FILE>C:\InnoSetup\setup.iss</SCRIPT_FILE>
</PropertyGroup>
<!-- 使用するアセンブリとタスク名を宣言 --> <UsingTask AssemblyFile="$(IS5TASK_FOLDER)\InnoSetup5Task.dll" TaskName="ISCC" />
<!-- Buildターゲット -->
<Target Name="Build">
<!-- コンパイル -->
<ISCC ScriptFile="$(SCRIPT_FILE)">
<Output TaskParameter="ExitCode" PropertyName="EXIT_CODE" />
</ISCC>
<Message Text="ExitCode = $(EXIT_CODE)" />
</Target>
</Project>
コマンドプロンプトを起動し、以下のコマンドラインを実行すれば、コンパイルが行われる。
msbuild is5task.proj
ダウンロード
圧縮アーカイブファイルには、以下のファイルが含まれている。
- InnoSetup5Task.dll … Inno Setup 5用MSBuildカスタムタスク
- InnoSetup5Task フォルダ以下 … InnoSetup5Task.dll のソースファイル(Visual C# .NET / SharpDevelop 4.2.2)
動作環境
- Windows XP SP3 / Windows Vista SP2
- .NET Framework 4
- Inno Setup 5.5.2
ImageMagick6Taskリファレンス
ImageMagick 6のコンソールコマンドを起動するだけのカスタムタスク。*2ImageMagick、ImageMagickを使った画像処理のトピックも参照。
タスクにはCompare、Composite、Conjure、Convert、Identify、Mogrify、Montageがあり、以下の共通の属性を持つ。
| 属性 | 型 | 読込 | 書込 | 説明 |
| Parameter | String | × | ○ | コマンドライン引数を指定する |
| WorkingDirectory | String | × | ○ | コマンドを実行するフォルダを指定する |
- Parameter属性でダブルクォーテーションやパーセントを記述する場合、CDATAセクション中に記述するか、エスケープする必要がある。詳細はMSBuild の特殊文字を参照
使用例
<?xml version="1.0" encoding="utf-8"?> <!-- サムネイル画像作成、画像連結、文字描画のサンプル $(SOURCE_FOLDER)内に紹介シナリオの背景画像ファイル(_24.jpg~_24_5.jpg)があるという前提で書いてある --> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup>
<Import Project="$(MSBuildProjectDirectory)\ImageMagick6Task.Targets" />
</ImportGroup>
<PropertyGroup>
<SOURCE_FOLDER>$(MSBuildProjectDirectory)\input</SOURCE_FOLDER>
<DESTINATION_FOLDER>$(MSBuildProjectDirectory)\output</DESTINATION_FOLDER>
<MSL_FILE>$(MSBuildProjectDirectory)\thumbnail2.msl</MSL_FILE>
<THUMBNAIL_SIZE>160x120</THUMBNAIL_SIZE>
<THUMBNAIL_PERCENT>20</THUMBNAIL_PERCENT>
<THUMBNAIL_PERCENT2>30</THUMBNAIL_PERCENT2>
<POSITION>south</POSITION>
<FONTFACE>$(WINDIR)\fonts\msgoth90.ttc</FONTFACE>
<FONTSIZE>25</FONTSIZE>
<ANGLE>0</ANGLE>
<LEFT>+0</LEFT>
<TOP>+11</TOP>
<FILLCOLOR>white</FILLCOLOR>
<TEXT>画面は開発中のものです</TEXT>
</PropertyGroup>
<ItemGroup>
<SOURCE_IMAGES Include="$(SOURCE_FOLDER)\**\*.*" />
<BUTTON_NAME Include="Button1">
<LEFT>_24.jpg</LEFT>
<CENTER>_24_2.jpg</CENTER>
<RIGHT>_24_4.jpg</RIGHT>
</BUTTON_NAME>
<BUTTON_NAME Include="Button2">
<LEFT>_24.jpg</LEFT>
<CENTER>_24_3.jpg</CENTER>
<RIGHT>_24_5.jpg</RIGHT>
</BUTTON_NAME>
</ItemGroup>
<Target Name="Thumbnail1">
<Convert Parameter="-resize $(THUMBNAIL_SIZE) %22%(Identity)%22 %22@(SOURCE_IMAGES->'$(DESTINATION_FOLDER)\%(Filename)_s1.png')%22" />
</Target>
<Target Name="Thumbnail2">
<Convert Parameter="-resize %22$(THUMBNAIL_PERCENT)%25%22 %22%(Identity)%22 %22@(SOURCE_IMAGES->'$(DESTINATION_FOLDER)\%(Filename)_s2.png')%22" />
</Target>
<Target Name="Connect">
<MakeDir Directories="$(DESTINATION_FOLDER)" />
<Montage Parameter="-background transparent -geometry +0+0 -tile 3x1 %22$(SOURCE_FOLDER)\%(LEFT)%22 %22$(SOURCE_FOLDER)\%(CENTER)%22 %22$(SOURCE_FOLDER)\%(RIGHT)%22 %22$(DESTINATION_FOLDER)\@(BUTTON_NAME).png%22" />
</Target>
<Target Name="DrawText">
<Convert Parameter="%22%(Identity)%22 -fill #0007 -draw %22rectangle 10,440,630,470%22 -gravity $(POSITION) -font %22$(FONTFACE)%22 -fill $(FILLCOLOR) -pointsize $(FONTSIZE) -annotate $(LEFT)$(TOP) %22$(TEXT)%22 %22@(SOURCE_IMAGES->'$(DESTINATION_FOLDER)\%(Filename)_e.png')%22" />
</Target>
<Target Name="Script">
<Conjure Parameter=" -SOURCE %22%(Identity)%22 -PERCENTAGE $(THUMBNAIL_PERCENT2) -DESTINATION %22@(SOURCE_IMAGES->'$(DESTINATION_FOLDER)\%(Filename)_s3.png')%22 %22$(MSL_FILE)%22" />
</Target>
<Target Name="Build">
<MakeDir Directories="$(DESTINATION_FOLDER)" />
<CallTarget Targets="Thumbnail1;Thumbnail2;Connect;DrawText;Script" />
</Target>
</Project>
ダウンロード
圧縮アーカイブファイルには、以下のファイルが含まれている。
- ImageMagick6Task.dll … ImageMagick 6用MSBuildカスタムタスク
- ImageMagick6Task.Targets
- sample.proj … サンプルのMSBuildプロジェクトファイル
- thumbnail2.msl … ↑から呼び出されるMSLファイル
- source フォルダ以下 … ImageMagick6Task.dll のソースファイル(Visual C# .NET / SharpDevelop 4.2.1)
動作環境
- Windows XP SP3 / Windows Vista SP2
- .NET Framework 4
- ImageMagick 6.7.9-0 Q16
SMail4Task.Targetsリファレンス
SMAILを起動するカスタムタスク。
SMailタスク
SMAILでメールを送信する。
| 属性 | 型 | 読込 | 書込 | 説明 | 備考 |
| Attachments | ITaskItem[] | × | ○ | 添付ファイルのパス一覧を指定する | |
| Debug | Boolean | × | ○ | True指定時、デバッグ表示モードで実行する | 省略時はFalse |
| File | String | × | ○ | メール本文を記述したテキストファイルのパスを指定する | 文字コードはShift JISであること |
| From | String | × | ○ | 送信元メールアドレスを指定する | |
| Information | Boolean | × | ○ | True指定時、インフォメーション表示モードで実行する | 省略時はFalse |
| MessageId | String | × | ○ | Message-IDを指定する | "auto"と指定すれば自動的に値が振られる |
| NtTzAdjustment | Boolean | × | ○ | True指定時、NTタイムゾーン調整を行う | 省略時はFalse |
| Priority | Int32 | × | ○ | プライオリティを 1 (重要度高)~ 9 (重要度低)の範囲の値で指定する | |
| ReplyTo | String | × | ○ | 返信先メールアドレスを指定する | "auto"と指定すればMailFromの値が使われる |
| Server | String | × | ○ | 指定必須。メールサーバ名またはIPアドレスを指定する | |
| Silent | Boolean | × | ○ | True指定時、サイレントモード(エラー出力しない)で実行する | 省略時はFalse |
| Ssl | Boolean | × | ○ | True指定時、SSLでTLSを使用する(False時はSSLv2v3を使用) | 省略時はFalse |
| StartTls | Boolean | × | ○ | True指定時、STARTTLSでSSLを開始する | 省略時はFalse |
| Subject | String | × | ○ | サブジェクトを指定する | |
| Text | String | × | ○ | メール本文を指定する | |
| To | String | × | ○ | 指定必須。送信先メールアドレスを指定する | |
| WorkingDirectory | String | × | ○ | コマンドを実行するフォルダを指定する |
- Fromは"Nickname <MailAddress>"形式で指定しても良い(CDATAセクション中に記述する)。なおReplyToではこの形式は使えない
- CDATAセクションを使わない場合、 < は %3C 、> は %3E にエスケープすること
ReplaceTextタスク
同報メール用メッセージを作成するインラインタスク。
| 属性 | 型 | 読込 | 書込 | 説明 | 備考 |
| Departments | ITaskItem[] | × | ○ | 送信相手の所属部署などを指定する | この属性を指定する場合、アイテム数はNamesのアイテム数と同じであること |
| Encoding | String | × | ○ | Fileの文字コードを指定する | 省略時はshift_jis |
| File | String | × | ○ | メール本文が記述されたテキストファイルのパスを指定する | Textを指定しない場合は必須 |
| Names | ITaskItem[] | × | ○ | 指定必須。送信相手の名前(姓+役職など)を指定する | |
| Text | String | × | ○ | メール本文を指定する | Fileを指定しない場合は必須 |
| Values | ITaskItem[] | ○ | × | タスクの出力値 | Namesが持つカスタムメタデータもコピーされる |
- Fileから読み込んだ文字列、またはTextを次のルールで置換する
- 文字列中の全ての {Name} をNames属性値に置換する
- 文字列中の全ての {Department} をDepartments属性値に置換する
サンプル
<?xml version="1.0" encoding="UTF-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--SMail4Task.Targetsをインポート--> <Import Project="$(MSBuildProjectDirectory)\SMail4Task.Targets" />
<PropertyGroup>
<MAIL_SERVER>mailhost</MAIL_SERVER>
<FROM><![CDATA[PIYO <piyo@hoge.co.jp>]]></FROM>
<SUBJECT>同報メール配信のテスト</SUBJECT>
<MESSAGE>
<![CDATA[サークル {Department}
{Name} 様
同報メール配信のテストです。]]>
</MESSAGE>
</PropertyGroup>
<ItemGroup>
<NAMES Include="foo">
<NUMBER>1</NUMBER>
</NAMES>
<NAMES Include="bar">
<NUMBER>2</NUMBER>
</NAMES>
<MAILS Include="foo@hoge.co.jp">
<NUMBER>1</NUMBER>
</MAILS>
<MAILS Include="bar@hoge.co.jp">
<NUMBER>2</NUMBER>
</MAILS>
<DEPARTMENTS Include="baz">
<NUMBER>1</NUMBER>
</DEPARTMENTS>
<DEPARTMENTS Include="qux">
<NUMBER>2</NUMBER>
</DEPARTMENTS>
</ItemGroup>
<Target Name="Build">
<ReplaceText Text="$(MESSAGE)" Names="@(NAMES)" Departments="@(DEPARTMENTS)" >
<Output TaskParameter="Values" ItemName="BROADCAST_MESSAGES" />
</ReplaceText>
<SMail Server="$(MAIL_SERVER)" From="$(FROM)" To="@(MAILS)" Subject="$(SUBJECT)" Text="@(BROADCAST_MESSAGES)" Condition="%(NUMBER) > 0" />
</Target>
</Project>
ダウンロード
動作環境
- Windows XP SP3 / Windows Vista SP2
- .NET Framework 4
- SMAIL 4.13