September 16, 2011

NAnt - Some userful Tasks


1) xmlpeek -- Extracts text from an XML file at the location specified by an XPath expression

Usage: xml file used is for the given example is
<? xml version="1.0" encoding="utf-8”?>
<configuration xmlns="http://www.gordic.cz/shared/project-config/v_1.0.0.0">
    <appSettings>
        <add key="server" value="testhost.somecompany.com" />
    </appSettings>
</configuration>

Using xmlpeek to extract the value of add node where key =’server’

<xmlpeek
    file="App.config"
    xpath="/x:configuration/x:appSettings/x:add[@key ='server']/@value"
    property="configuration.server">
        <namespaces>
<namespace prefix="x" uri="http://www.gordic.cz/shared/project-config/v_1.0.0.0" />
        </namespaces>
</xmlpeek>


2) xmlpoke -- Replaces text in an XML file at the location specified by an XPath expression.

Usage: the xml file is same as above

Xmlpoke will change the value of the value property of add to the value provided which is productionhost.somecompany.com

<xmlpoke
    file="App.config"
    xpath="/configuration/appSettings/add[@key = 'server']/@value"
    value="productionhost.somecompany.com" />

3) asminfo -- Generates an AssemblyInfo.cs file using the attributes given.

Usage: 
<asminfo output="AssemblyInfo.cs" language="CSharp">
    <imports>
        <import namespace="System" />
        <import namespace="System.Reflection" />
        <import namespace="System.EnterpriseServices" />
        <import namespace="System.Runtime.InteropServices" />
    </imports>
    <attributes>
        <attribute type="ComVisibleAttribute" value="false" />
        <attribute type="CLSCompliantAttribute" value="true" />
        <attribute type="AssemblyVersionAttribute" value="1.0.0.0" />
<attribute type="AssemblyTitleAttribute" value="My fun assembly" />
<attribute type="AssemblyDescriptionAttribute" value="More fun than a barrel of monkeys" />
<attribute type="AssemblyCopyrightAttribute" value="Copyright (c) 2002, Monkeyboy, Inc." />
<attribute type="ApplicationNameAttribute" value="FunAssembly" />
    </attributes>
    <references>
        <include name="System.EnterpriseServices.dll" />
    </references>
</asminfo>

Here an AssemblyInfo.cs file is created with metadata information as provided in the attribute element of asminfo tag. The import element is used to import some namespaces in the AssemblyInfo.cs file. However reference section can be omitted as per the requirements

4) foreach -- Loops over a set of items.

Usage:  Loops over all files in the project directory.
<foreach item="File" property="filename">
    <in>
        <items>
            <include name="**" />
        </items>
    </in>
    <do>
        <echo message="${filename}" />
    </do>
</foreach>
    
Each item which it is currently looping the string value of it can be stored in ‘property’ property of the foreach tag. It can be very useful for some special requirements. Other use of this task is mentioned in the Link mentioned below.


5) scripts -- Executes the code contained within the task. This code can include custom extension function definitions. Once the script task has executed those custom functions will be available for use in the build file.

Usage: 
<script language="C#" prefix="test" >
     <code>
         <![CDATA[
              [Function("test-func")]
              public static string Testfunc(  ) {
                  return "some result !!!!!!!!";
              }
         ]]>
     </code>
</script>
<echo message='${test::test-func()}'/>

The various scripts which can be used are VB, C#, JS, JSHARP.
The reuse of the function in the NAnt script is also shown.



6) choose(NAnt contrib) : Executes an alternate set of tasks depending on conditions that are individually set on each group of tasks. Similar to if- else if.

Usage: 
<choose>
    <when test="${build.config == 'Debug'}">
        <!-- compile app in debug configuration -->
        ...
    </when>
    <when test="${build.config == 'Release'}">
        <!-- compile app in release configuration -->
        ...
    </when>
    <otherwise>
<fail>Build configuration '${build.config}' is not supported!</fail>
    </otherwise>
</choose>

Source: http://nantcontrib.sourceforge.net/release/0.85/help/tasks/choose.html

No comments:

Post a Comment