CSharp (Apache Ant API)

org.apache.tools.ant.taskdefs.optional.dotnet
Class CSharp


java.lang.Object

  |

  +--org.apache.tools.ant.ProjectComponent

        |

        +--org.apache.tools.ant.Task

              |

              +--org.apache.tools.ant.taskdefs.MatchingTask

                    |

                    +--org.apache.tools.ant.taskdefs.optional.dotnet.CSharp

All Implemented Interfaces:
SelectorContainer

public class CSharp
extends MatchingTask

Compiles C# source into executables or modules. The task will only work on win2K until other platforms support csc.exe or an equivalent. CSC.exe must be on the execute path too.

All parameters are optional: <csc/> should suffice to produce a debug build of all *.cs files. References to external files do require explicit enumeration, so are one of the first attributes to consider adding.

The task is a directory based task, so attributes like includes="*.cs" and excludes="broken.cs" can be used to control the files pulled in. By default, all *.cs files from the project folder down are included in the command. When this happens the output file -if not specified- is taken as the first file in the list, which may be somewhat hard to control. Specifying the output file with 'outfile' seems prudent.

TODO

  1. is incremental build still broken in beta-1?
  2. is Win32Icon broken?
  3. all the missing options

History
0.3 Beta 1 edition To avoid having to remember which assemblies to include, the task automatically refers to the main dotnet libraries in Beta1.
0.2 Slightly different Split command execution to a separate class;
0.1 "I can't believe it's so rudimentary" First pass; minimal builds only support;

Since:
Ant 1.3
Version:
0.5
Author:
Steve Loughran steve_l@iseran.com

Field Summary
protected  boolean debug
          debug flag.
protected static java.lang.String DEFAULT_REFERENCE_LIST
          Fix C# reference inclusion.
protected  java.lang.String extraOptions
          any extra command options?
protected  java.lang.String mainClass
          main class (or null for automatic choice)
protected  java.lang.String targetType
          type of target.
protected  boolean unsafe
          enable unsafe code flag.
protected  boolean utf8output
          utf out flag
 
Fields inherited from class org.apache.tools.ant.taskdefs.MatchingTask
fileset, useDefaultExcludes
 
Fields inherited from class org.apache.tools.ant.Task
description, location, target, taskName, taskType, wrapper
 
Fields inherited from class org.apache.tools.ant.ProjectComponent
project
 
Constructor Summary
CSharp()
          constructor inits everything and set up the search pattern
 
Method Summary
 void Clear()
          reset all contents.
 void execute()
          do the work by building the command line and then calling it
protected  java.lang.String getAdditionalModulesParameter()
          get the argument or null for no argument needed
 boolean getDebug()
          query the debug flag
protected  java.lang.String getDebugParameter()
          get the debug switch argument
protected  java.lang.String getDefaultReferenceParameter()
          get default reference list
protected  java.lang.String getDefinitionsParameter()
          get the argument or null for no argument needed
protected  java.lang.String getDocFileParameter()
          get the argument or null for no argument needed
 java.lang.String getExtraOptions()
          Gets the ExtraOptions attribute
protected  java.lang.String getExtraOptionsParameter()
          get any extra options or null for no argument needed
 boolean getFailOnError()
          query fail on error flag
protected  java.lang.String getFileAlignParameter()
          get the argument or null for no argument needed
protected  java.lang.String getFullPathsParameter()
          Gets the fullPathsParameter attribute of the CSharp object
 boolean getIncludeDefaultReferences()
          query automatic reference inclusion flag
protected  java.lang.String getIncludeDefaultReferencesParameter()
          get the include default references flag or null for no argument needed
 boolean getIncremental()
          query the incrementalflag
protected  java.lang.String getIncrementalParameter()
          get the incremental build argument
 java.lang.String getMainClass()
          Gets the MainClass attribute
protected  java.lang.String getMainClassParameter()
          get the /main argument or null for no argument needed
protected  java.lang.String getNoConfigParameter()
          Gets the noConfigParameter attribute of the CSharp object
 boolean getOptimize()
          query the optimise flag
protected  java.lang.String getOptimizeParameter()
          get the optimise flag or null for no argument needed
protected  java.lang.String getOutputFileParameter()
          get the argument or null for no argument needed
protected  java.lang.String getReferenceFilesParameter()
          turn the path list into a list of files and a /references argument
protected  java.lang.String getReferencesParameter()
          get the reference string or null for no argument needed
 java.lang.String getTargetType()
          Gets the TargetType attribute
protected  java.lang.String getTargetTypeParameter()
          get the argument or null for no argument needed
 boolean getUnsafe()
          query the Unsafe attribute
protected  java.lang.String getUnsafeParameter()
          get the argument or null for no argument needed
protected  java.lang.String getUtf8OutputParameter()
          Gets the utf8OutpuParameter attribute of the CSharp object
 int getWarnLevel()
          query warn level
protected  java.lang.String getWarnLevelParameter()
          get the warn level switch
protected  java.lang.String getWin32IconParameter()
          get the argument or null for no argument needed
protected  java.lang.String getWin32ResParameter()
          get the argument or null for no argument needed
protected  boolean notEmpty(java.lang.String s)
          test for a string containing something useful
 void setAdditionalModules(java.lang.String params)
          Semicolon separated list of modules to refer to.
 void setDebug(boolean f)
          set the debug flag on or off.
 void setDefinitions(java.lang.String params)
          Semicolon separated list of defined constants.
 void setDestDir(java.io.File dirName)
          Set the destination directory of files to be compiled.
 void setDestFile(java.io.File file)
          Set the name of exe/library to create.
 void setDocFile(java.io.File f)
          file for generated XML documentation
 void setExtraOptions(java.lang.String extraOptions)
          Any extra options which are not explicitly supported by this task.
 void setFailOnError(boolean b)
          If true, fail on compilation errors.
 void setFileAlign(int fileAlign)
          Set the file alignment.
 void setFullPaths(boolean enabled)
          If true, print the full path of files on errors.
 void setIncludeDefaultReferences(boolean f)
          If true, automatically includes the common assemblies in dotnet, and tells the compiler to link in mscore.dll.
 void setIncremental(boolean f)
          set the incremental compilation flag on or off.
 void setMainClass(java.lang.String mainClass)
          Sets the name of main class for executables.
 void setNoConfig(boolean enabled)
          A flag that tells the compiler not to read in the compiler settings files 'csc.rsp' in its bin directory and then the local directory
 void setOptimize(boolean f)
          If true, enables optimization flag.
 void setOutputFile(java.io.File params)
          Set the output file
 void setReferenceFiles(Path path)
          Path of references to include.
 void setReferences(java.lang.String s)
          Semicolon separated list of DLLs to refer to.
 void setSrcDir(java.io.File srcDirName)
          Set the source directory of the files to be compiled.
 void setTargetType(java.lang.String ttype)
          Set the type of target.
 void setUnsafe(boolean unsafe)
          If true, enables the unsafe keyword.
 void setUtf8Output(boolean enabled)
          If true, require all compiler output to be in UTF8 format.
 void setWarnLevel(int warnLevel)
          Level of warning currently between 1 and 4 with 4 being the strictest.
 void setWin32Icon(java.io.File fileName)
          Set the filename of icon to include.
 void setWin32Res(java.io.File fileName)
          Sets the filename of a win32 resource (.RES) file to include.
protected  void validate()
          validation code
 
Methods inherited from class org.apache.tools.ant.taskdefs.MatchingTask
addAnd, addContains, addCustom, addDate, addDepend, addDepth, addFilename, addMajority, addNone, addNot, addOr, addPresent, addSelector, addSize, appendSelector, createExclude, createExcludesFile, createInclude, createIncludesFile, createPatternSet, getDirectoryScanner, getSelectors, hasSelectors, selectorCount, selectorElements, setCaseSensitive, setDefaultexcludes, setExcludes, setExcludesfile, setFollowSymlinks, setIncludes, setIncludesfile, setProject, XsetIgnore, XsetItems
 
Methods inherited from class org.apache.tools.ant.Task
getDescription, getLocation, getOwningTarget, getRuntimeConfigurableWrapper, getTaskName, handleErrorOutput, handleOutput, init, isInvalid, log, log, maybeConfigure, perform, setDescription, setLocation, setOwningTarget, setRuntimeConfigurableWrapper, setTaskName
 
Methods inherited from class org.apache.tools.ant.ProjectComponent
getProject
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_REFERENCE_LIST


protected static final java.lang.String DEFAULT_REFERENCE_LIST
Fix C# reference inclusion. C# is really dumb in how it handles inclusion. You have to list every 'assembly' -read DLL that is imported. So already you are making a platform assumption -shared libraries have a .dll;"+ extension and the poor developer has to know every library which is included why the compiler cant find classes on the path or in a directory, is a mystery. To reduce the need to be explicit, here is a long list of the core libraries used in Beta-1 of .NET ommitting the blatantly non portable (MS.win32.interop) and the .designer libraries. (ripping out Com was tempting) Casing is chosen to match that of the file system exactly so may work on a unix box too. there is no need to reference mscorlib.dll, cos it is always there

See Also:
Constant Field Values

debug


protected boolean debug
debug flag. Controls generation of debug information.


unsafe


protected boolean unsafe
enable unsafe code flag. Clearly set to false by default


mainClass


protected java.lang.String mainClass
main class (or null for automatic choice)


extraOptions


protected java.lang.String extraOptions
any extra command options?


targetType


protected java.lang.String targetType
type of target. Should be one of exe|library|module|winexe|(null) default is exe; the actual value (if not null) is fed to the command line.
See /target


utf8output


protected boolean utf8output
utf out flag

Constructor Detail

CSharp


public CSharp()
constructor inits everything and set up the search pattern

Method Detail

setReferences


public void setReferences(java.lang.String s)
Semicolon separated list of DLLs to refer to.

Parameters:
s - The new References value

getReferencesParameter


protected java.lang.String getReferencesParameter()
get the reference string or null for no argument needed

Returns:
The References Parameter to CSC

setReferenceFiles


public void setReferenceFiles(Path path)
Path of references to include. Wildcards should work.

Parameters:
path - another path to append

getReferenceFilesParameter


protected java.lang.String getReferenceFilesParameter()
turn the path list into a list of files and a /references argument

Returns:
null or a string of references.

getDefaultReferenceParameter


protected java.lang.String getDefaultReferenceParameter()
get default reference list

Returns:
null or a string of references.

setIncludeDefaultReferences


public void setIncludeDefaultReferences(boolean f)
If true, automatically includes the common assemblies in dotnet, and tells the compiler to link in mscore.dll. set the automatic reference inclusion flag on or off this flag controls the string of references and the /nostdlib option in CSC

Parameters:
f - on/off flag

getIncludeDefaultReferences


public boolean getIncludeDefaultReferences()
query automatic reference inclusion flag

Returns:
true if flag is turned on

getIncludeDefaultReferencesParameter


protected java.lang.String getIncludeDefaultReferencesParameter()
get the include default references flag or null for no argument needed

Returns:
The Parameter to CSC

setOptimize


public void setOptimize(boolean f)
If true, enables optimization flag.

Parameters:
f - on/off flag

getOptimize


public boolean getOptimize()
query the optimise flag

Returns:
true if optimise is turned on

getOptimizeParameter


protected java.lang.String getOptimizeParameter()
get the optimise flag or null for no argument needed

Returns:
The Optimize Parameter to CSC

setIncremental


public void setIncremental(boolean f)
set the incremental compilation flag on or off.

Parameters:
f - on/off flag

getIncremental


public boolean getIncremental()
query the incrementalflag

Returns:
true iff incremental compilation is turned on

getIncrementalParameter


protected java.lang.String getIncrementalParameter()
get the incremental build argument

Returns:
The Incremental Parameter to CSC

setDebug


public void setDebug(boolean f)
set the debug flag on or off.

Parameters:
f - on/off flag

getDebug


public boolean getDebug()
query the debug flag

Returns:
true if debug is turned on

getDebugParameter


protected java.lang.String getDebugParameter()
get the debug switch argument

Returns:
The Debug Parameter to CSC

setDocFile


public void setDocFile(java.io.File f)
file for generated XML documentation

Parameters:
f - output file

getDocFileParameter


protected java.lang.String getDocFileParameter()
get the argument or null for no argument needed

Returns:
The DocFile Parameter to CSC

setWarnLevel


public void setWarnLevel(int warnLevel)
Level of warning currently between 1 and 4 with 4 being the strictest.

Parameters:
warnLevel - warn level -see .net docs for valid range (probably 0-4)

getWarnLevel


public int getWarnLevel()
query warn level

Returns:
current value

getWarnLevelParameter


protected java.lang.String getWarnLevelParameter()
get the warn level switch

Returns:
The WarnLevel Parameter to CSC

setUnsafe


public void setUnsafe(boolean unsafe)
If true, enables the unsafe keyword.

Parameters:
unsafe - The new Unsafe value

getUnsafe


public boolean getUnsafe()
query the Unsafe attribute

Returns:
The Unsafe value

getUnsafeParameter


protected java.lang.String getUnsafeParameter()
get the argument or null for no argument needed

Returns:
The Unsafe Parameter to CSC

setMainClass


public void setMainClass(java.lang.String mainClass)
Sets the name of main class for executables.

Parameters:
mainClass - The new MainClass value

getMainClass


public java.lang.String getMainClass()
Gets the MainClass attribute

Returns:
The MainClass value

getMainClassParameter


protected java.lang.String getMainClassParameter()
get the /main argument or null for no argument needed

Returns:
The MainClass Parameter to CSC

setExtraOptions


public void setExtraOptions(java.lang.String extraOptions)
Any extra options which are not explicitly supported by this task.

Parameters:
extraOptions - The new ExtraOptions value

getExtraOptions


public java.lang.String getExtraOptions()
Gets the ExtraOptions attribute

Returns:
The ExtraOptions value

getExtraOptionsParameter


protected java.lang.String getExtraOptionsParameter()
get any extra options or null for no argument needed

Returns:
The ExtraOptions Parameter to CSC

setSrcDir


public void setSrcDir(java.io.File srcDirName)
Set the source directory of the files to be compiled.

Parameters:
srcDirName - The new SrcDir value

setDestDir


public void setDestDir(java.io.File dirName)
Set the destination directory of files to be compiled.

Parameters:
dirName - The new DestDir value

setTargetType


public void setTargetType(java.lang.String ttype)
                   throws BuildException
Set the type of target.

Parameters:
ttype - The new TargetType value
Throws:
BuildException - if target is not one of exe|library|module|winexe

getTargetType


public java.lang.String getTargetType()
Gets the TargetType attribute

Returns:
The TargetType value

getTargetTypeParameter


protected java.lang.String getTargetTypeParameter()
get the argument or null for no argument needed

Returns:
The TargetType Parameter to CSC

setWin32Icon


public void setWin32Icon(java.io.File fileName)
Set the filename of icon to include.

Parameters:
fileName - path to the file. Can be relative, absolute, whatever.

getWin32IconParameter


protected java.lang.String getWin32IconParameter()
get the argument or null for no argument needed

Returns:
The Win32Icon Parameter to CSC

setWin32Res


public void setWin32Res(java.io.File fileName)
Sets the filename of a win32 resource (.RES) file to include. This is not a .NET resource, but what Windows is used to.

Parameters:
fileName - path to the file. Can be relative, absolute, whatever.

getWin32ResParameter


protected java.lang.String getWin32ResParameter()
get the argument or null for no argument needed

Returns:
The Win32Res Parameter to CSC

setUtf8Output


public void setUtf8Output(boolean enabled)
If true, require all compiler output to be in UTF8 format.

Parameters:
enabled - The new utf8Output value

getUtf8OutputParameter


protected java.lang.String getUtf8OutputParameter()
Gets the utf8OutpuParameter attribute of the CSharp object

Returns:
The utf8OutpuParameter value

setNoConfig


public void setNoConfig(boolean enabled)
A flag that tells the compiler not to read in the compiler settings files 'csc.rsp' in its bin directory and then the local directory

Parameters:
enabled - The new noConfig value

getNoConfigParameter


protected java.lang.String getNoConfigParameter()
Gets the noConfigParameter attribute of the CSharp object

Returns:
The noConfigParameter value

setFullPaths


public void setFullPaths(boolean enabled)
If true, print the full path of files on errors.

Parameters:
enabled - The new fullPaths value

getFullPathsParameter


protected java.lang.String getFullPathsParameter()
Gets the fullPathsParameter attribute of the CSharp object

Returns:
The fullPathsParameter value

setDefinitions


public void setDefinitions(java.lang.String params)
Semicolon separated list of defined constants.

Parameters:
params - The new definitions value

getDefinitionsParameter


protected java.lang.String getDefinitionsParameter()
get the argument or null for no argument needed

Returns:
The Definitions Parameter to CSC

setAdditionalModules


public void setAdditionalModules(java.lang.String params)
Semicolon separated list of modules to refer to.

Parameters:
params - The new additionalModules value

getAdditionalModulesParameter


protected java.lang.String getAdditionalModulesParameter()
get the argument or null for no argument needed

Returns:
The AdditionalModules Parameter to CSC

setOutputFile


public void setOutputFile(java.io.File params)
Set the output file

Parameters:
params - The new outputFile value

setDestFile


public void setDestFile(java.io.File file)
Set the name of exe/library to create.

Parameters:
file - The new outputFile value

getOutputFileParameter


protected java.lang.String getOutputFileParameter()
get the argument or null for no argument needed

Returns:
The OutputFile Parameter to CSC

setFailOnError


public void setFailOnError(boolean b)
If true, fail on compilation errors.

Parameters:
b - The new FailOnError value

getFailOnError


public boolean getFailOnError()
query fail on error flag

Returns:
The FailFailOnError value

setFileAlign


public void setFileAlign(int fileAlign)
Set the file alignment. Valid values are 0,512, 1024, 2048, 4096, 8192, and 16384, 0 means 'leave to the compiler'


getFileAlignParameter


protected java.lang.String getFileAlignParameter()
get the argument or null for no argument needed

Returns:
The OutputFile Parameter to CSC

Clear


public void Clear()
reset all contents.


notEmpty


protected boolean notEmpty(java.lang.String s)
test for a string containing something useful

Parameters:
s - string in
Returns:
true if the argument is not null or empty

validate


protected void validate()
                 throws BuildException
validation code

Throws:
BuildException - if validation failed

execute


public void execute()
             throws BuildException
do the work by building the command line and then calling it

Overrides:
execute in class Task
Throws:
BuildException - if validation or execution failed


Copyright 2000-2002 Apache Software Foundation. All Rights Reserved.