NAnt Release Notes |
NAnt Release Notes |
When the "destfile" attribute specifies a non-existent path, the base directory(ies) will be created. (bug #2997300).
Catch UnauthorizedAccessException in PathScanner to prevent NAnt from crashing when using the Scan() function to search for file(s) in directory with special permissions.
When the "output" attribute specifies a non-existent path, the base directory(ies) will be created. (bug #2985057).
For certain tasks (NDoc, Exec, MSBuild, etc) the console output is unorganized and difficult to read. (bug #2981604).
Cleanup the output to show assembly information and functions only when "verbose" attribute is set to "true". (bug #2981386).
When the "zipfile" attribute specifies a non-existent path, the base directory(ies) will be created. (bug #2981389).
As of this release, only the following namespaces are imported by default:
Starting from this release, only NAnt.Core
and mscorlib
will be referenced by default.
In previous releases, all loaded assemblies would implicitly be referenced.
Changes to constructors break backward compatibility (bug 2782705).
Identifiers containing a dot or backslash are falsely rejected.
The target framework cannot be initialized if the .NET Framework SDK is not installed (bug #1859708).
Added the following assemblies to the list of reference assemblies:
Fixes bug #1848648.
A newline is implicitly added when writing a message to a file (bug #2807728).
When "output" parameter is specified, standard output is redirected properly. (bug #1010223).
The value of UseRuntimeEngine
is not respected
when overriden by derived classes (bug #1850383).
When source file is newer than destination file, then an error is reported if "overwrite" is not set to true.
Solution Folders result in build failure (bug #1732361).
"verbose" feature is now worked as documented (bug #1911292).
Improved backward compatibility with older unzip implementations.
Gets the newline string defined for this environment.
Gets the description of the current target framework.
Gets the CLR version of the current target framework.
Gets a comma-separated list of frameworks filtered by the specified FrameworkTypes.
For example:
<target name="build-all"> <foreach item="String" in="${framework::get-frameworks('installed compact')}" delim="," property="framework"> <property name="nant.settings.currentframework" value="${framework}" /> <call target="${framework}" /> </foreach> </target> <target name="build"> ... </target>
Gets the version of the current target framework.
Return a value indicating whether NAnt is running on Windows.
Extracts files from a tar archive.
When installing NAnt from source on Unix (using make install), a nant.pc is now installed in $prefix/lib/pkgconfig.
To allow for staged installs, our makefile now also supports the DESTDIR variable:
$ make DESTDIR=/tmp/local install
This function is deprecated, use platform::is-windows() instead.
Added "winres" attribute to specify a Win32 resource file.
The "encoding" attribute can be used to specify the encoding when writing messages to a file.
<echo file="build.cmd" encoding="ascii">...</echo>
Allow referenced assemblies to be specified using <references> element on <test>:
<nunit2> <test> <assemblies basedir="build/tests"> <include name="Cegeka.HealthCare.DocGen.Tests.dll" /> <include name="Cegeka.HealthCare.Util.Tests.dll" /> </assemblies> <references basedir="build/lib"> <include name="Cegeka.HealthCare.Common.dll" /> <include name="Cegeka.HealthCare.DocGen.dll" /> <include name="Cegeka.HealthCare.Util.dll" /> </assemblies> </test> </nunit2>Previously, all referenced assemblies needed to be either in the GAC, or in the directory containing the test assembly.
Introduced support for targeting a specific platform, as defined in the solution or project.
Added "preserveWhitespace" parameter to retain the original format of the XML files.
Added "overwrite" parameter to control whether to overwrite files even if they are newer than corresponding entries in the archive.
Prior to NAnt 0.85, build authors would use a "nant.tasks.*" property to check whether a given task was available.
With the introduction of expression support in NAnt 0.85, we provided a more powerful alternative through the task::exists function.
As of this release, the "nant.tasks.*" properties are therefore no longer set by NAnt.
Removed support for the "nant.failure" property to set the target that should be executed when the build fails.
This property was deprecated in NAnt 0.83 in favor of the "nant.onfailure" attribute.
As of this release, setting the "nant.failure" attribute will no longer have any effect.
In NAnt 0.85, support for the '=' operator to check for equality was deprecated in favor of the '==' operator.
As from this release, the '=' operator is no longer recognized.
Introduced support for relational operators between version values.
Since NAnt 0.84, task authors have been able to specify the
location of the command-line tool by applying a ProgramLocationAttribute
to
classes deriving from ExternalProgramBase
.
The ProgramLocationAttribute
allows task authors
to specify whether the tool is located in the framework directory
(eg. C:\WINDOWS\Microsoft.NET\Framework\v1.1.4432) or the
SDK directory (eg. C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1)
without actually having to deal with the complexity of knowing
the actual path to these directories (for each supported framework).
In NAnt 0.86, we've taken this one step further. Each defined framework now has a (ordered) list of directories that can be scanned to locate a framework tool. The list of directories can be easily tuned for each framework by modifying the <tool-paths> nodes in the NAnt configuration file.
An example of such a node for the Mono 3.5 profile:
<tool-paths> <directory name="${path::combine(prefix, 'lib/mono/3.5')}" /> <directory name="${path::combine(prefix, 'lib/mono/2.0')}" /> <directory name="${path::combine(prefix, 'lib/mono/1.0')}" /> </tool-paths>
The directories configured in the <tool-paths> node of the current target framework will be scanned in the order in which they are defined.
The tool paths are implicitly used when a given tool cannot
be located on the location specified by the ProgramLocationAttribute
.
As such, this only applies to tasks deriving from ExternalProgramBase
.
To expose this functionality to build authors, we've added a framework::get-tool-path function that can be used to search for a given tool.
For example:
<exec program="${framework::get-tool-path('gacutil.exe')}" managed="strict"> <arg value="/i" /> <arg file="Cegeka.HealthFramework.dll" /> </exec>
Introduced support for forcing a managed application to run on the currently targeted CLR.
This was previously only possible by modifying the <startup> section of the application configuration file or by using constructs specific to each CLR (eg. using COMPLUS_VERSION environment variable for the MS CLR), which made build scripts non-portable.
Developers extending NAnt, can now control this by setting the
Managed
property for tasks deriving from
ExternalProgramBase
.
For build authors, forcing a managed application to run on a
specific version of a CLR can be done by setting the
"managed" attribute of <exec>
to strict.
For example:
<exec program="nunit-console.exe" managed="strict"> <arg value="/noshadow" /> <arg file="Cegeka.HealthFramework.Tests.dll" /> </exec>
Support for targeting .NET Framework 3.5 and Mono 3.5 Profile is now available.
Note: this does not apply to the <solution>
task.
Added experimental support for targeting Silverlight 2.0 and Moonlight 2.0.
Note: this does not apply to the <solution>
task.
Defines a set of patterns, mostly used to include or exclude certain files.
Patterns can be grouped to sets, and later be referenced by their
id
.
For example:
<patternset id="binaries"> <include name="bin/**/*" /> <exclude name="bin/*.tmp" /> </patternset> <patternset id="docs"> <include name="requirements/**/*" /> <exclude name="design/**/*.doc" /> </patternset> <patternset id="client.sources"> <include name="client/**/*.cs" /> <exclude name="client/**/*.vb" /> </patternset> <patternset id="server.sources"> <include name="server/**/*.cs" /> <exclude name="server/**/*.vb" /> </patternset> <patternset id="sources"> <patternset refid="client.sources" /> <patternset refid="server.sources" /> </patternset> <target name="deploy"> <copy todir="${dist.path}"> <fileset basedir="${build.path}"> <patternset refid="binaries" /> <patternset refid="docs" /> <patternset refid="sources" /> <exclude name="**/*.sdf" /> </fileset> </copy> </target>
Initial start-up time and project initialization have been reduced dramatically by lazy configuration of supported target frameworks.
Compiler options that were introduced in .NET Framework 2.0 are now also available when targeting .NET Compact Framework 2.0.
mjs
when targeting Mono.
The reference assemblies of a given target framework are no longer limited to the assemblies in, what is known as, the framework assembly directory.
Instead, these are now defined using one or more <reference-assemblies> filesets in the <framework> node of the NAnt configuration file.
Added a "casesensitive" attribute to control whether pattern matching must be case-sensitive.
The default is true on Unix and false on on other platforms.
<solution>
task).
Global types can now be (re)defined in task containers
(such a <if>
,
<foreach>
).
For example:
<project name="container-type" default="build"> <if test="${platform::is-win32()}"> <fileset id="sources"> <include name="**/*.cs" /> <!-- exclude Unix-specific classes --> <exclude name="**/Unix/*.cs" /> </fileset> </if> <if test="${platform::is-unix()}"> <fileset id="sources"> <include name="**/*.cs" /> <!-- exclude Win32-specific classes --> <exclude name="**/Win32/*.cs" /> </fileset> </if> <target name="build"> <csc output="IvsController.dll"> <sources refid="sources" /> <references> <include name="System.dll" /> <include name="System.Data.dll" /> <include name="System.Xml.dll" /> </references> </csc> </target> </project>
Up until now, only tasks could be executed in these containers.
/langversion
and /platform
commandline options of the C# compiler are now exposed as
attributes.
/keycontainer
and /keyfile
commandline options [Mono / .NET 2.0 or higher].
/platform
commandline option of the JScript.NET
compiler is now exposed using the "platform" attribute.
/platform
commandline option of the VB.NET
compiler is now exposed using the "platform" attribute. [.NET 2.0 or higher]
/keycontainer
and /keyfile
commandline options. [.NET 2.0 or higher]
/keycontainer
and /keyfile
commandline options.
<solution>
task.
The NAnt.Core.Attributes.FileSetAttribute is obsolete. Task developers should use the NAnt.Core.Attributes.BuildElementAttribute instead:
For example:
[FileSetBuildElement("fileset")] public FileSet CopyFileSet { get { return _fileset; } set { _fileset = value; } }
<solution>
task
doesn't support COM, OCX apps built in Visual C++ (bug
#1078641).
document()
function is not
considered to be relative to the base URI of stylesheet containing the function
call (bug
#1078896).
<nunit2>
task.
<csc>
task will target .NET 2.0. Previous versions of
NAnt would target .NET 1.0 by default.<arg>
element (used by, for example, the <exec>
task) would automatically add quotes for both "file" and "value" attributes in
the command line generated by the task. That automatic quoting has been removed
for "value" attributes (but not for "file" attributes). This change may break
build files that assume that both arguments specified using the "file" and
"value" attributes will automatically be quoted.<nunit2>
task been
updated to support
NUnit 2.2. Assemblies built using previous versions of NUnit should
either be rebuilt using
NUnit 2.2 or a
binding redirect should be configured in the application configuration
file of the test assembly.
XmlLogger
is now buffered until build has finished, and
XmlLogger
can now also be used as a listener.
<nowarn>
child element.
<warnaserror>
child
element. [.NET 2.0 or higher]<lib>
element is
obsolete, in favor of <lib>
child element on <references>
and <modules>
element.<cvs>
tasks.
<certificates>
elements.
lc.exe
commandline tool to compile license files whenever
available.
<fileset>
support
for specifiying build files to execute.
<nunit>
task has
been deprecated, and will be moved to NAntContrib
in a future release. NUnit 1.0 test assemblies will remain supported through
NAntContrib, but we strongly advise you to upgrade to NUnit 2.x.
<script>
task.<script>
task is now
supported on Mono.<script>
task will now also be scanned for functions and filters.
obj\<configuration>
directory relative to project directory. The compiled resource files will not
be removed when the task finishes, by doing this resource files will now only
be recompiled if the compiled resource file in the object directory is no
longer up-to-date. This matches the behaviour of VS.NET.
<nowarn>
child element. [.NET 2.0 or higher]
<warnaserror>
child
element. [.NET 2.0 or higher]<imports>
child
element, and deprecated "imports" attribute.<lib>
element is
obsolete, in favor of <lib>
child element on <references>
and <modules>
element.
<nowarn>
child element. [.NET 2.0 or higher]<lib>
element is
obsolete, in favor of <lib>
child element on <references>
and <modules>
element.<fileset>
for
managing assembly files.
<includes>
and <excludes>
elements in favor of <include>
and <exclude>
elements.<includesList>
element in favor of <includesfile>
.<excludesfile>
element.
Task.LogPrefix
property has been deprecated. Messages that are
written to build log by a given task, will now automatically get prefixed with
the task name. This behaviour can be disabled by the new -e[macs]
commandline
option.
XmlLogger
will now correctly handle null-characters in the build output.<resources>
element
of the compiler tasks.
filename
attribute was renamed to file
to improve
consistency with other tasks.
filename
attribute was renamed to file
to improve
consistency with other tasks.
Some existing build scripts may stop working now or in the next release due to the following changes:
<call>
task now executes the given target and all its
dependencies. In previous versions of NAnt only the target itself would be
executed.todir
attribute of the <copy>
and <move>
tasks no longer defaults to the project base directory. It must now be set
explicitly.force
attribute of the <call>
task has been
deprecated and has no longer any effect. The <call>
task
will now always execute the specified target, regardless of the fact that this
target has already been executed before.files
and attachments
attributes of
the <mail>
task have been replaced by fileset support.nant.onfailure
property would be executed when the build
fails. However, NAnt actually executed a target identified by the nant.failure
property (if available). This has now been corrected and the old syntax (nant.failure
)
is now deprecated.<param>
element of the <style>
task
has been deprecated in favor of a <parameters>
collection
with nested <parameter>
elements. The <parameter>
element now also supports a namespaceuri
, if
and unless
attribute. See the documentation of the <style>
task for
more information.Plain
formatter was implicitly
added in the <nunit2>
task. In NAnt 0.8.4, the Plain
formatter will only implicitly be added if no other formatters are specified.
In this case, a warning message will be output to the build log encouraging
build authors to explicitly add this formatter for forward compatibility. In
future versions of NAnt, the Plain
formatter will no longer
implicitly be added.<param>
child element of the <style>
task has been deprecated in favor of a nested <parameters>
collection.
<csc>
, <jsc>
,
<vbc>
and <vjc>
tasks: when dynamixprefix
is set to "true" and prefix is set to the root namespace of the assembly for
the nested <resources>
element, the compiler tasks will now
compile resources with IDs matching these generated by VS.NET. Support for the
generation of satellite assemblies was also added to these tasks.<call>
task now executes the given target and all its
dependencies. In previous versions of NAnt only the target itself would be
executed.force
attribute of the <call>
task has been
deprecated and has no longer any effect. The <call>
task
will now always execute the specified target, regardless of the fact that this
target has already been executed before.
todir
attribute no longer defaults to the project base
directory. It must now be set explicitly.flatten
attribute to allow all matching files to be
copied to a single directory.
<lib>
element.
level
attribute to allow messages to be output with a
specific level.
httpproxy
attribute of the <get>
task is
deprecated, use the new <proxy>
child element instead.<credentials>
child element used for authenticating
the request with the Internet resource.ignoreerrors
attribute in favor of the failonerror
attribute.timeout
attribute to allow length of time to wait for a
response or the request to timeout to be specified.
<uptodatefiles
child element for uptodate fileset
support.<if uptodatefile="...">
now behaves as documented, meaning
that nested tasks will only be executed if the file specifies in the
uptodatefile attribute actually exists and the file specified in the uptodatefile
attribute is more recent or the same lastwritetime than the file(s) specifies
in the comparefile
attribute and <comparefiles>
fileset.
<lib>
element.
files
and attachments
attributes
have been replaced by fileset support.todir
attribute no longer defaults to the project base
directory. It must now be set explicitly.flatten
attribute to allow all matching files to
be moved to a single directory.
<properties>
child element.buildfile
is now a required attribute, which makes it harder to
accidently write an infinitely looping build.
<nantschema>
task does not generate the
correct XML Schema definition for collections and arrays. This tasks needs to
be updated. Please use with caution.
<ndoc>
task to using version 1.2 of NDoc.
<nunit2>
task to use version 2.1 of NUnit.Plain
formatter was implicitly
added. In NAnt 0.8.4, the Plain
formatter will only implicitly be
added if no other formatters are specified. In this case, a warning message
will be output to the build log encouraging build authors to explicitly add
this formatter for forward compatibility. In future versions of NAnt, the Plain
formatter will no longer implicitly be added.outputdir
attribute for <formatter>
element
to control the directory where the test result file will be stored (if the usefile
attribute is "true").
overwrite
attribute to the <property>
task
to control whether the value of the specified property should be overwritten
when the property already exists.<resgen>
task when
using a fileset.
<assemblyfolders>
fileset element that allows a
set of folders to be set, that should be searched to resolve assembly
references.includevsfolders
attribute was added to
control whether these folders should be searched for assembly references.<excludeprojects>
fileset that allows a set of
projects to be excluded.outputdir
attribute can now be specified, which overrides the
directory where compiled targets will be placed.<webmap>
element was added that maps URL's of web
projects to local path, thereby removing the need to configure the web server
to allow access to these project files.<param>
child element has been deprecated in
favor of a nested <parameters>
collection.
<lib>
element.
<lib>
element.
includeemptydirs
attribute to control whether empty
directories should be included in the generated zip file.
basedir
for fileset was specified.
basedir
of fileset is set to the root directory
of a drive in Windows.
ProgramLocationAttribute
that can be assigned to a task to
indicate that it wraps an executable that is part of either the .NET Framework
or the .NET Framework SDK, and have NAnt figure out the full path to the
executable using the framework settings in the NAnt configuration file.
FileSetAttribute
has been deprecated. The BuildElementAttribute
should be used instead.
FrameworkConfigurableAttribute
that can be assigned to a
task attribute to allow the default values of that attribute to be configured
from the framework configuration section in the NAnt configuration file for the
currently active framework.
<proxy>
and <credentials>
data
types that are used to provide proxy settings and authentication information
for tasks that connect to external resources (eg. the <get>
task).