ccnet 構成のプロジェクトで、タスク ブロックの上部に:
<modificationWriter>
<filename>svn_mods.xml</filename>
<path>c:\modsdir</path>
</modificationWriter>
これにより、SVN の変更がファイルに書き込まれます。
タスクブロックの次:
<nant>
<executable>c:\path_to_nant</executable>
<buildFile>mybuildfile.build</buildFile>
<targetList>
<target>conditionally_run_nunit_tests</target>
</targetList>
</nant>
これにより、modificationwriter タスクの後に Nant タスクが実行されます。
conditionally_run_nunit_testsで、ファイルc:\modsdir\svn_mods.xmlで#runautotestを検索します。見つかったら、テストを実行します。見つからない場合は、何もしません。mods ファイルを解析するにはさまざまな方法があります。C# スクリプトを使用してファイル全体を文字列に読み取り、Contains を呼び出して #runautotest を渡すことができます。
以下のコードは、Nant で C# スクリプトを使用する例です。SearchFile はファイルを開き、それを文字列に読み取り、値が文字列内にあるかどうかをチェックします。「はい」または「いいえ」を返します。以下のスクリプトはテストされていません。
<property name="yesno" value="${ns::SearchFile("c:\modsdir\svn_mods.xml", "#runautotest")}"/>
<script language="c#" prefix="ns">
<references>
<include name="System"/>
<include name="System.IO"/>
</references>
<code>
<![CDATA[
[Function("SearchFile")]
public static string SearchFile(string filepath, string token)
{
System.IO.StreamReader myFile = new System.IO.StreamReader(filepath);
string myString = myFile.ReadToEnd();
myFile.Close();
if(myString.Contains(token)) return "yes";
else return "no";
}
]]>
</code>
</script>