<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <!-- Documenting T:NAnt.DotNet.Tasks.ScriptTask--> <head> <meta http-equiv="Content-Language" content="en-ca" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" type="text/css" href="../style.css" /> <title><script> Task</title> </head> <body> <table width="100%" border="0" cellspacing="0" cellpadding="2" class="NavBar"> <tr> <td class="NavBar-Cell"> <a href="http://nant.sourceforge.net"> <b>NAnt</b> </a> <img alt="->" src="../images/arrow.gif" /> <a href="../index.html">Help</a> <img alt="->" src="../images/arrow.gif" /> <a href="../tasks/index.html">Task Reference</a> <img alt="->" src="../images/arrow.gif" /> <script></td> <td class="NavBar-Cell" align="right"> v0.90</td> </tr> </table> <h1><script></h1> <p> Executes the code contained within the task. </p> <h5 xmlns="">Code</h5> <p> The <a href="../tasks/script.html"><script></a> task must contain a single <code>code</code> element, which in turn contains the script code. </p> <p> This code can include extensions such as functions, or tasks. Once the script task has executed those extensions will be available for use in the buildfile. </p> <p> If no extensions have been defined, a static entry point named <code>ScriptMain</code> - which must have a single <a href="../../sdk/NAnt.Core.Project.html">Project</a> argument - is required. </p> <h5 xmlns="">Namespaces</h5> <p> The following namespaces are imported by default: </p> <ul style="list-style-type: disc;"> <li>System</li> <li>System.Collections</li> <li>System.IO</li> <li>System.Text</li> <li>NAnt.Core</li> <li>NAnt.Core.Attributes</li> </ul> <h5 xmlns="">Assembly References</h5> <p> The assembly references that are specified will be used to compile the script, and will be loaded into the NAnt appdomain. </p> <p> By default, only the <code>NAnt.Core</code> and <code>mscorlib</code> assemblies are referenced. </p> <h3>Parameters</h3> <div class="table"> <table> <tr> <th>Attribute</th> <th style="text-align: center;">Type</th> <th>Description</th> <th style="text-align: center;">Required</th> </tr> <tr> <td valign="top" class="required">language</td> <td style="text-align: center;">string</td> <td> The language of the script block. Possible values are "VB", "vb", "VISUALBASIC", "C#", "c#", "CSHARP". "JS", "js", "JSCRIPT" "VJS", "vjs", "JSHARP" or a fully-qualified name for a class implementing <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemCodeDomCompilerCodeDomProviderClassTopic.asp">CodeDomProvider</a>. </td> <td style="text-align: center;">True</td> </tr> <tr> <td valign="top">mainclass</td> <td style="text-align: center;">string</td> <td> The name of the main class containing the static <code>ScriptMain</code> entry point. </td> <td style="text-align: center;">False</td> </tr> <tr> <td valign="top">prefix</td> <td style="text-align: center;">string</td> <td> The namespace prefix for any custom functions defined in the script. If ommitted the prefix will default to 'script' </td> <td style="text-align: center;">False</td> </tr> <tr> <td valign="top">failonerror</td> <td style="text-align: center;">bool</td> <td> Determines if task failure stops the build, or is just reported. The default is <b>true</b>. </td> <td style="text-align: center;">False</td> </tr> <tr> <td valign="top">if</td> <td style="text-align: center;">bool</td> <td> If <b>true</b> then the task will be executed; otherwise, skipped. The default is <b>true</b>. </td> <td style="text-align: center;">False</td> </tr> <tr> <td valign="top">unless</td> <td style="text-align: center;">bool</td> <td> Opposite of <code>if</code>. If <b>false</b> then the task will be executed; otherwise, skipped. The default is <b>false</b>. </td> <td style="text-align: center;">False</td> </tr> <tr> <td valign="top">verbose</td> <td style="text-align: center;">bool</td> <td> Determines whether the task should report detailed build log messages. The default is <b>false</b>. </td> <td style="text-align: center;">False</td> </tr> </table> </div> <h3>Nested Elements:</h3> <!--Element--> <h4> <a id="references"> </a> <<a href="../types/assemblyfileset.html">references</a>> </h4> <div class="nested-element"> Any required references. <p /></div> <h4> <a id="references"> </a> </<a href="../types/assemblyfileset.html">references</a>> </h4> <!--Element--> <h4> <a id="imports"> </a> <<a href="../types/namespaceimports.html">imports</a>> </h4> <div class="nested-element"> The namespaces to import. <p /></div> <h4> <a id="imports"> </a> </<a href="../types/namespaceimports.html">imports</a>> </h4> <!--Element--> <h4> <a id="code"> </a> <code> </h4> <div class="nested-element"> The code to execute. <p> Represents an element of which the XML is processed by its parent task or type. </p><p /></div> <h4> <a id="code"> </a> </code> </h4> <h3>Examples</h3> <ul class="examples"> <li> <p>Run C# code that writes a message to the build log.</p> <pre class="code"> <script language="C#"> <code> <![CDATA[ public static void ScriptMain(Project project) { project.Log(Level.Info, "Hello World from a script task using C#"); } ]]> </code> </script> </pre> </li> <li> <p>Define a custom function and call it using C#.</p> <pre class="code"> <script language="C#" prefix="test" > <code> <![CDATA[ [Function("test-func")] public static string Testfunc( ) { return "some result !!!!!!!!"; } ]]> </code> </script> <echo message='${test::test-func()}'/> </pre> </li> <li> <p>Use a custom namespace in C# to create a database</p> <pre class="code"> <script language="C#" > <references> <include name="System.Data.dll" /> </references> <imports> <import namespace="System.Data.SqlClient" /> </imports> <code> <![CDATA[ public static void ScriptMain(Project project) { string dbUserName = "nant"; string dbPassword = "nant"; string dbServer = "(local)"; string dbDatabaseName = "NAntSample"; string connectionString = String.Format("Server={0};uid={1};pwd={2};", dbServer, dbUserName, dbPassword); SqlConnection connection = new SqlConnection(connectionString); string createDbQuery = "CREATE DATABASE " + dbDatabaseName; SqlCommand createDatabaseCommand = new SqlCommand(createDbQuery); createDatabaseCommand.Connection = connection; connection.Open(); try { createDatabaseCommand.ExecuteNonQuery(); project.Log(Level.Info, "Database added successfully: " + dbDatabaseName); } catch (Exception e) { project.Log(Level.Error, e.ToString()); } finally { connection.Close(); } } ]]> </code> </script> </pre> </li> <li> <p> Run Visual Basic.NET code that writes a message to the build log. </p> <pre class="code"> <script language="VB"> <code> <![CDATA[ Public Shared Sub ScriptMain(project As Project) project.Log(Level.Info, "Hello World from a script task using Visual Basic.NET") End Sub ]]> </code> </script> </pre> </li> <li> <p>Define a custom task and call it using C#.</p> <pre class="code"> <script language="C#" prefix="test" > <code> <![CDATA[ [TaskName("usertask")] public class TestTask : Task { #region Private Instance Fields private string _message; #endregion Private Instance Fields #region Public Instance Properties [TaskAttribute("message", Required=true)] public string FileName { get { return _message; } set { _message = value; } } #endregion Public Instance Properties #region Override implementation of Task protected override void ExecuteTask() { Log(Level.Info, _message.ToUpper()); } #endregion Override implementation of Task } ]]> </code> </script> <usertask message='Hello from UserTask'/> </pre> </li> <li> <p> Define a custom function and call it using <a href="http://boo.codehaus.org/">Boo</a>. </p> <pre class="code"> <script language="Boo.CodeDom.BooCodeProvider, Boo.CodeDom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=32c39770e9a21a67" failonerror="true"> <code> <![CDATA[ [Function("test-func")] def MyFunc(): return "Hello from Boo !!!!!!" ]]> </code> </script> <echo message='${script::test-func()}'/> </pre> </li> </ul> <h3>Requirements</h3> <div style="margin-left: 20px;"> <b>Assembly:</b> NAnt.DotNetTasks (0.90.3780.0) </div> </body> </html>