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