Hi there,
our software is a big project in .NET which consists of 8 solutions
(each containing about 5-8 projects, where some of them have more than
220 classes/forms)

1.)
the first time we tried to run NAnt the first problem occurred: the
resource file generation takes a lot of time (we have a background virus
scanner), about 2-3 seconds for 1 file. so we downloaded a nightly build
(0.85 26.03.05) and made some changes to the
VSNet.ManagedProjectBase::WriteCompilerOptions() .. we killed the 2
lines for compiling the resources over the VSNet.Resource object and
replaced it with a new procedure called WriteResxOptions. Here we simply
used the existing DotNet.ResgenTask, added all resources and executed
it. It works properly and imperceptible fast.

2.)
another issue comes along with our own "Office.dll" (not in GAC). We
also have MS Office installed and got a Primary Interop Assembly from
MS. The problem: NAnt preferred the Office.dll from MS installed in GAC.
Maybe thats not the general solution but changing the priority of GAC
and NAnt assembly folders (3. GAC 4.AF -> 4.AF 3.GAC) in
VSNet.ManagedAssemblyReference::ResolveAssemblyReference() solved that.
Maybe you have to think about it :)

3.)
now we could build our solutions within 900 seconds. it's a long time if
you are waiting in front of your monitor :( devenv.exe needs the half of
time (420s). something must slow down the whole process. After running
NAnt with our .NET Profiler application, we could see that the most time
is spend in resolving assemblies and their referenced assemblies.
So we had an idea: lets cache already resolved assemblies. We wrote a
file based assembly cache class (because the VSNet.ReferencesResolver
gets disposed if a new solution task starts) and merged it with the
existing code

4.)
We use third party controls too. so if new versions get released,
everybody must have the same version installed to compile the project. A
little new task helps us to compile with different versions: UpLicxTask
(currently only implemented in
VSNet.ManagedProjectBase::WriteResxOptions())... Everytime a .licx file
should be compiled, a UpLicxTask is executed. it replaces the version
stored in .licx file, with the version installed in GAC (works only with
GAC assemblies at the moment)

Other things:
- The project GUIDs are compared but there is no check if the projects
in the solution have the same GUID, so NAnt only builds one project (of
them with the same GUID)
- Maybe there should be a "suppress resgen output" attribute in solution
task, because if you have 200 resx files to compile, the output is
really annoying


Summary:
- New Task: UpLicxTask
- Patched: VSNet.ReferencesResolver (cache resolved assemblies)
- Patched: VSNet.ManagedProjectBase (use resgen task for resources)
- Patched: VSNet.ManagedAssemblyReference (changed assembly folders
priority)


however, after all that work in the last week, now we have NAnt that
compiles our underlying library (2 solutions, 25 projects) and the
software itself in 250s (remember, it took around 900s before) on a 3Ghz
machine.
theres no way for devenv.exe to do it faster :) we love NAnt, thanks for
that great work

Thats our first contribution to the NAnt project (which is wonderful for
huge software applications)

Its some code we fixed up, so i decided not to put it in this mailing.
If you are interested in the changes we made, i will publish the
affected files on the mailinglist or to anybody who wants :)

greets from germany

Christian Leh


-------------------------------------------------------
This SF.net email is sponsored by Demarc:
A global provider of Threat Management Solutions.
Download our HomeAdmin security software for free today!
http://www.demarc.com/Info/Sentarus/hamr30
_______________________________________________
nant-developers mailing list
nant-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nant-developers

Reply via email to