<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
 
  http://www.apache.org/licenses/LICENSE-2.0
  
  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
-->
<html>
  <head>
    <meta http-equiv="Content-Language" content="en-us"></meta>
    <link rel="stylesheet" type="text/css" href="style.css">
    <title>.NET Tasks</title>
  </head>

<h1>.NET tasks</h1>
<h2>Introduction</h2>

Ant support for .NET goes back to before .NET was released, and
continues to be expanded based on user demand. Users writing nothing but
a .NET application, may want to look at the .NET-based
<A href="https://nant.sourceforge.net/">NAnt</A> project, that supports
both the Microsoft and the Ximian managed <A
href="https://go-mono.com/">Mono</A> project's implementation of the
.NET framework.
<p>

Over time, the .NET tasks in Ant have tended to evolve to meet a few
limited needs. Firstly, developers working with complex deployment problems may
want to use ant to use the fairly advanced deployment tasks Ant ships
with. Secondly, anyone who has a cross-platform project can use these
tasks to cover the .NET side of the problem. Here, cross-platform can
mean more than just Java and .NET: the C++ tasks in the ant-contrib
project on sourceforge can be used with Ant to do native C++ and .NET
cross development if that is your need. Finally, Ant support for .NET
lets one automate .NET development under an automated build process,
such as AntHill or Cruise Control.

<p>

What this means is that the Ant tasks for .NET support do not get as
much rigorous use as the Java tools, and are evolving more slowly -that
includes the time for support calls to change. But as a consequence,
developers working on .NET support have more freedom to play around with
the code. It also means that the fairly unusual set of tasks supported
by ant enable a few interesting operations that can not be performed any
other way:
<ol>

<li>Integrating with a Java based SOAP Service -generating C# code from
the server's WSDL and running it against the server.
</li>
<li>Building and deploying a C#-based Web Service, then using the Apache
Axis tasks to create JUnit tests to call the endpoints.

<li>Patching .NET type libraries to work with more complex IDL than the
basic <code>&lt;importtypelib&gt;</code> wrapper around tlbimport supports. Hence the
disassembler and the reassembler.
</li>

</ol>
Needless to say, possible does not mean easy.
<A href="https://www.manning.com/hatcher/chap15.pdf">Chapter 15</A> of
Java Development with Ant covers the first of these, using the Ant1.5
version of the tasks. Going the other way -generating Java client
code and JUnit testcases is covered in
<A href="https://www.iseran.com/Steve/papers/interop/">The Wondrous curse
of Interop</A>. The final trick, IDL and Typelib abuse, is not
documented as we do not want to encourage such an ugly practise. It,
can, however, be done if absolutely necessary. 

<h3>Task List</h3>

<table border="0" >
<tr>
  <td><b>Task</b></td>
  <td><b>Description</b></td>
</tr>
<tr>
  <td><a href="csc.html">csc</a></td>
  <td>Compiles C# code</td>
</tr>

<tr>
  <td><a href="vbc.html">vbc</a></td>
  <td>Compiles VB.NET code</td>
</tr>

<tr>
  <td><a href="jsharpc.html">jsharpc</a></td>
  <td>Compiles J# files</td>
</tr>

<tr>
  <td><a href="ildasm.html">ildasm</a></td>
  <td>Disassembles .NET executables and libraries</td>
</tr>

<tr>
  <td><a href="ilasm.html">ilasm</a></td>
  <td>Assembles .il files</td>
</tr>

<tr>
  <td><a href="wsdltodotnet.html">wsdltodotnet</a></td>
  <td>Generates .NET code (C# or VB) from a WSDL file</td>
</tr>

<tr>
  <td><a href="importtypelib.html">importtypelib</a></td>
  <td>Imports a COM type library into .NET</td>
</tr>

</table>

<hr>
<h3>Common .NET Datatypes </h3>

There are some datatypes that are common to the core compiler classes:
csc, vbc and  jsharpc

<h4>Resource</h4>

This is a resource that is included in the build. Ant uses this for
dependency checking -if resources included this way have changed, the
executable or library will be rebuilt.
<p>
<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td valign="top"><b>Attribute</b></td>
    <td valign="top"><b>Description</b></td>
    <td align="center" valign="top"><b>Required</b></td>
  </tr>
  <tr>
    <td valign="top">File</td> 
    <td valign="top">the resource to include</td>
    <td align="center" valign="top">Yes</td>
  </tr>
  <tr>
    <td valign="top">name</td> 
    <td valign="top">the name of the resource. 
    Optional unless the resource is
    marked as public or private</td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">embed</td> 
    <td valign="top">flag to control whether the resource
    is embedded in the assembly, or just linked to it</td>
    <td align="center" valign="top">No -default is true</td>
  </tr>
  <tr>
    <td valign="top">public</td> 
    <td valign="top">VB only: flag to control if a resource should be 
    public or private. Set to true for public, false for private
    and leave undefined for for neither. </td>
    <td align="center" valign="top">No</td>
  </tr>
</table>

<h5>Examples</h5>

<pre>
&lt;resource file="app.ico" name="icon"/&gt;
&lt;resource file="splash.jpg"/&gt;
&lt;resource name="splash" file="splash.jpg" public="false"/&gt;
</pre>

<h4>Define</h4>

This is a definition; in .NET these can either be defined or undefined,
unlike C++ #defines, which can be either undefined or arbitrary text.
The Ant compilation tasks can unconditionally add definitions, or
conditionally set a compile-time definition if an ant property is
defined or not.
<p>

Dependency Logic: the tasks are not (yet) clever enough to remember what
the last definitions were and trigger a rebuild when they change. Clean
build the code when the defines are likely to be different.
<p>
<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td valign="top"><b>Attribute</b></td>
    <td valign="top"><b>Description</b></td>
    <td align="center" valign="top"><b>Required</b></td>
  </tr>
  <tr>
    <td valign="top">name</td> 
    <td valign="top">the name of the definition</td>
    <td align="center" valign="top">Yes</td>
  </tr>
  <tr>
    <td valign="top">if</td> 
    <td valign="top">name of a ant property to test for;
    the definition is only set if this property is defined.</td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">unless</td> 
    <td valign="top">name of a ant property to test for;
    the definition is only set if this property is undefined.</td>
    <td align="center" valign="top">No</td>
  </tr>
</table>

<h5>Examples</h5>

<pre>
&lt;define name="unsafe"/&gt;
&lt;define name="debug" if="build.debug"/&gt;
&lt;define name="dotnet" unless="build.mono"/&gt;
</pre>

<hr>
<h3> Change Log </h3>

<h4>Ant1.6</h4>
This revision goes along with NET 1.1, though there is no reason why
it should not work on other versions.
<p>

<ol>
<li>vbc task</li>
<li>jsharpc task</li>
<li>mono support</li>
<li>ilasm</li>
<li>tlbimport</li>
<li>Reference filesets in the compiler tasks</li>
<li>definitions in the compiler tasks</li>
<li>multiple source filesets in the compiler tasks. If these are used, the
implicit fileset is disabled</li>
</ol>

The compile tasks: vbc, jsharpc, and csc, all contain lots of common code
in a shared base class: if you can use one you should be able to use
another.

<h4>Ant 1.5</h4>
This revision goes along with NET 1.0 (SP1)
<ol>
<li>CSC: added filealign</li>
<li>CSC: added reference to office.dll</li>
<li>CSC: dependency checking! only if destFile is set!
<li>WsdlToDotnet written
</ol>

<h4>Version 0.5</h4>
This revision goes along with NET 1.0 (SP1)
<ol>
<li>CSC: added filealign</li>
<li>CSC: added reference to office.dll</li>
<li>CSC: dependency checking! only if destFile is set!
<li>WsdlToDotnet written
</ol>

<h4>Version 0.4</h4>
This is the beta-2 revision of the tasks.
<ol>
<li>ILASM: pulled the owner attribute, added keyfile for giving binaries a strong name
(MD5 hash of the checksum)</li>
<li>CSC: added win32res , noConfig, utf8output, fullpaths</li>
<li>CSC: </li>
</ol>

<h4>Version 0.3</h4>

The changes here reflect Beta-1 of the dotnet SDK and experience of use in
more complex projects. This build does not work with the older SDK,
primarily because the automatic reference feature references libraries
only found in the new SDK version.
<p>
External changes</p>
<ul>
<li>Recursive inclusion of .cs and .il files</li>

<li>Documentation enhanced, includes examples and details of all parameters</li>

<li>The csc task automatically includes the common dotnet assemblies, so
there is no need to remember to refer to 'System.dll', 'System.Web.Services',
 etc. This feature can be disabled by setting the 'includeDefaultReferences'
 flag to false. </li>

 <li> References can also be referred to using the ReferenceFiles parameter, which
is an ant path specification. The old 'references' string is still retained.</li>
<li> An 'extraoptions' attribute enables the build file to include any CSC options
which are not explicitly supported in the CSC task. </li>
</ul>

Internal changes
<ul>
<li>Some minor refactoring (move common code a method)</li>
<li>Application of Jedits JavaStyle task resulted in a major reshaping of
the codebase and the insertion of a blank line every second line. Significant
effort was required to revert some (but not all) changes.</li>
<li>Removed throws clause from methods which can't throw exception
</ul>

The test harness has been expanded to include unicode source file
(the build works but the rest of the system has 'issues' with high unicode
package and method names)

<h4>Version 0.2</h4>
First public edition, added to the ant cvs tree. Tested on the PDC build of
the dotnet SDK only, and still immature. The command execution code was
refactored out into a 'NetCommand' class for re-use. The Ilasm task was added
at this time.

<h4>Version 0.1</h4>
Initial proof of concept; very rudimentary support for CSC only.

    <p class="copyright">
      Apache Ant, Apache .NET Ant Library, Ant, .NET Ant Library, Apache, the Apache feather logo, and the Apache Ant project logos are trademarks of The Apache Software Foundation.
    </p>
</body>
</html>
