[//]: # (TOC Begin)
[//]: # (TOC End)
Introduction
A project can have a set of properties. These might be set in the buildfile by the <property> task, or might be set outside NAnt. A property has a name and a value. Properties may be used in the value of task attributes. This is done by placing the property name between "${" and "}" in the attribute value. Properties may also be used in <expressions>.
Naming rules
A property name is a string of the following characters:
- letters (A-Z, a-z),
- digits (0-9),
- underscore characters (_),
- dash characters (-),
- dot characters (.),
In addition, a valid property name must start with a letter or an underscore and must end with a letter, digit or an uderscore.
Examples of valid property names include:
- propertyname
- property.name.with.dots
- property-name-with-dashes
- property.name-with.both-dots.and-dashes
- __prop---3-erty__
- __prop.1...erty__
- property1
- property1.0
- property2.0.0
- property-2-1_
- property-1-name_
- property-1.0-name
The following property names are not valid in NAnt:
- !@#!@$!@ (contains illegal characters)
- .aaaaa (starts with a dot)
- -aaaaa (starts with a dash)
- 1aaaaa (starts with a digit)
- aaaaa.aaa.a.a.a.a- (ends with a dash)
- aaaaa.aaa.a.a.a.a. (ends with a dot)
Built-in Properties
NAnt has these built-in properties:
Property | Description |
---|---|
nant.version | Deprecated. The version of NAnt. |
nant.filename | Deprecated. The full path to the NAnt assembly. |
nant.location | Deprecated. The base directory of the NAnt assembly. |
nant.project.basedir | Deprecated. The absolute path of the project's basedir. |
nant.project.buildfile | Deprecated. The absolute path of the buildfile. |
nant.project.name | Deprecated. The name of the project. |
nant.project.default | Deprecated. The name of the project's default target. |
nant.onsuccess | The name of a target to be executed when the build succeeds. |
nant.onfailure | The name of a target to be executed when the build fails. |
Framework related Properties
Property | Description |
---|---|
nant.settings.currentframework | The current target framework, eg. 'net-1.0'. |
nant.settings.currentframework.description | Deprecated. Description of the current target framework. |
nant.settings.currentframework.frameworkdirectory | Deprecated. The framework directory of the current target framework. |
nant.settings.currentframework.sdkdirectory | Deprecated. The framework SDK directory of the current target framework. |
nant.settings.currentframework.frameworkassemblydirectory | Deprecated. The framework assembly directory of the current target framework. |
nant.settings.currentframework.runtimeengine | Deprecated. The runtime engine of the current target framework if used eg. mono.exe. |
Platform related Properties
Property | Description |
---|---|
nant.platform.name | Deprecated. The name of the platform on which NAnt is currently running - either win32 or unix. |
nant.platform.win32 | Deprecated. Holds the value true if NAnt is running on the win32 platform; otherwise, false. |
nant.platform.unix | Deprecated. Holds the value true if NAnt is running on the unix platform; otherwise, false. |
Read-only Properties
A property can be explicitly marked read-only by setting the "readonly" attribute on the <property> task to true.
The value of a read-only property cannot be modified after it has been set.
When attempting to override a read-only property using the <property> task, the new value will be ignored and a warning message will be output in the build log. Attempting to override read-only properties using any other means (eg. other tasks) will result in a build failure.
Note: properties set on the command-line are always read-only.
Global Properties
Properties that should be accessible to all build files on a system can be defined in the <properties> node of the NAnt configuration file (NAnt.exe.config).
By changing the value of the property in the NAnt configuration file, the updated value will be accessible to all build files on the system:
<?xml version="1.0"?>
<configuration>
...
<nant>
...
<properties>
<!-- properties defined here are accessible to all build files -->
<property name="company.name" value="Foo Ltd." readonly="true" />
</properties>
</nant>
</configuration>
Individual build files can then use this property:
<?xml version="1.0"?>
<project name="test">
<echo message="Company: ${company.name}" />
</project>
The output of this build is:
[echo] Company: Foo Ltd.
Examples
The following build file demonstrates the use of property expansion:
<?xml version="1.0"?>
<project name="Property Test" default="test" basedir=".">
<property name="project.name" value="PropertyTest"/>
<property name="project.version" value="1.0.0"/>
<target name="test">
<echo message="Building ${project.name}-${project.version}"/>
</target>
</project>
The output of this build is:
[echo] Building PropertyTest-1.0.0
The following build file demonstrates the use of properties in <expressions>. It evaluates the length of the property project.name and displays it.
<?xml version="1.0"?>
<project name="Expression Test" default="test" basedir=".">
<property name="project.name" value="Expression Test"/>
<target name="test">
<echo message="Project name consists of ${string::get-length(project.name)} characters."/>
</target>
</project>
The output of this build is:
[echo] Project name consists of 15 characters.
See Also