views:

332

answers:

3

I'm always compile my project, and copy the dll's from the dependency projects to the UI bin folder. after a few days with 'copy & paste' operations each time that I recompile my project, I concluded that I need a tool that will do it to me automatically. after a few searches a founded that this tool is nAnt.

I search for information how to start using it, but I did not found much. so, my question is:

  • What is nAnt in a few words?
  • How can I benefit from it?

EDIT: I can't just add a reference to the dependencies projects because it will lead to a circular dependency.

A: 

nAnt is an automated build tool derived from Java's Ant. It is hosted here: http://nant.sourceforge.net/.

You can use it to automate the building and testing of your software.

codekaizen
+7  A: 

NAnt is a build tool that builds .NET projects and solutions (based on the original Ant for Java). It is also an XML-based "scripting" language where you order "tasks" to do the build work, including the types of things you are talking about--and MUCH, MUCH more!

We use NAnt as our build scripting tool (triggered on every source-control checkin by Cruise Control.NET, a.k.a. CCNET, our Continuous Integration tool) to do our automated builds. It includes things like:

  1. Building the solution
  2. Running our Unit Tests to make sure the build didn't "break"
  3. Deploying our web project to our development server
  4. Zipping and archiving a build into a build folder for historical tracking and "backout"

Another solution is MSBuild, which is actually what Visual Studio uses. It is very similar.

Do note: You CANNOT build Setup & Deployment projects with NAnt's solution task (you also cannot do this with MSBuild). To get around this, we have started running devenv.com (Visual Studio without a UI) with command-line arguments--using NAnt's "exec" task instead of the built-in "solution" task--to build the whole solution, including Setup & Deployment Packages. We have also uses WiX and MSBuild in the past...

Finally, for the specific issue you outline, you should really just consider one of these options:

  • Simply add the dependent projects to the Web Site solution as Project References and you will get the DLLs there automatically
  • Consider creating a PostBuild task (look on the Project Properties window) that does an xcopy on a successful build

You really can't go wrong investing time in NAnt, and eventually CCNET as your project complexity increases. You can have CCNet watch your source control for checkins or run nightly, AND you can set up dependent projects, so that, for example, if your dependency project builds, it can kick off a build of your web site and/or run Unit Tests to see if anything broke.

Tony Heupel
VS project files are most MSBuild based, so if you use NAnt, you will have to write NAnt script for the projects or delegate the tasks once again to MSBuild. So using MSBuild directly is always an easier option now. Luckily the Mono guys have made a cross platform MSBuild implementation, which makes NAnt less important than before.
Lex Li
Au contraire! You **can** go wrong investing time in NAnt. MSBuild subsumes NAnt's functionality in a way more compatible with VS.NET and with several other advantages listed in Kevin's answer and elsewhere. In my opinion, any time spent learning NAnt now is a waste of time unless you have to support a legacy NAnt build system.
Ray Burns
+7  A: 

Microsoft (for better or worse) created the MsBuild system which a project file (.csproj, .vbproj, etc) are scripts for. These .proj files direct the MsBuild system to build the project via the XML. This is essentially what nAnt is doing as well. So, generaly, MsBuild functionality == nAnt functionality.

While I've certainly spend quite a lot more time with MsBuild vs nAnt so I can't be a truly expert opinion, from my experience, if you are using Visual Studio, it is probably a better track to go down by staying with MsBuild for building your projects since it's most likely already in tune with your development process. Since you almost certainly are already using .proj files (i.e. .csproj if you are doing C#) it doesn't make much sense to me to create another build file: just use the one you already have and customize it as you see fit. I'm unaware of anything that nAnt offers at this point that MsBuild does not except for the fact that it is more in alignment with the Open Source mode.

Again, since my experience with nAnt is limited, I can't say that this is still true, but when I last used nAnt, it was quite a bit more verbose to accomplish the same tasks as compared to MsBuild, which, if still true, would be another reason to me to use MsBuild instead.

Your need to drop binaries as a post-build task is a common one easliy accomplished with MsBuild or nAnt. For the aformentioned reasons, I'd suggest looking to MsBuild first to see how this would work then looking at nAnt only if MsBuild doesn't fit your bill. I say this just because as mentioned, you are already soaking in MsBuild today (the MsBuild engine is already installed on your computer too) so why not take the path of least resistence? Certainly if MsBuild doesn't do what you want and nAnt does, by all means take that route. But copying files would be 5 lines or so of xml in your existing MsBuild (i.e. .csproj) file. Here is some documentation from MSDN: http://msdn.microsoft.com/en-us/library/3e54c37h.aspx

A previous poster mentioned using CruiseControl with nAnt. Cruise control can easily use MsBuild too:

http://ccnetlive.thoughtworks.com/ccnet/doc/CCNET/MsBuild%20Task.html

so if you want automated (Continuous Integration) builds, you can use CC.NET. MS Team Foundation Server is a alternaive to CC.NET if you can stomach the cost or are a startup (via MS BizSpark program you can use it free for a few years I think).

I don't have anything against nAnt--it's just that with what you mentioned you want to do it doesn't seem like you need it. MsBuild can do it and you don't need to install anything new or even create a file. You just need to do a 5-line (roughly) xml entry in your .proj file

Kevin Won