<!--
  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>DotNetExec Task</title>
  </head>

  <body>
    <h2><a name="dotnetexec">DotNetExec</a></h2>

    <h3>Description</h3>

    <p>Executes a .NET assembly that's on your PATH or pointed to
    directly by the executable attribute.</p>

    <p>This task is an extension of Ant's <a
    href="http://ant.apache.org/manual/CoreTasks/exec.html">exec</a>
    task and supports all attributes and nested child elements of that
    task.  Use the executable attribute to specify the name of the
    assembly (including the extension).</p>

    <p>This task allows you to choose the .NET framework via the
    <code>vm</code> attribute.  The default value is "microsoft" on
    Windows and "mono" on all other platforms.  "microsoft" is a magic
    name that means "run the assembly as executable directly" - this
    may also work for Mono on Linux systems with the binfmt feature
    described in the <a
    href="http://www.go-mono.org/faq.html#q86">Mono FAQ</a>.</p>

    <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>
