MSBuild está integrado con Visual Studio proporciona a los programadores menos fricción a utilizar el sistema de construcción. Básicamente se trata solo de tener que ir a "Build Solution" y todo funciona, en lugar de tener que usar Custom Build Steps y otras cosas similares, o, lo que es peor, forzar a los desarrolladores a crear mediante el lanzamiento de algún tipo de script externo.
Ahora, suelo preferir MSBuild en lugar de NAnt porque es más simple. Claro, NAnt tiene muchas más funciones, es más potente, etc., pero puede salirse de control rápidamente. Si usted y sus ingenieros de construcción tienen la disciplina para mantener los scripts NAnt simples, entonces todo está bien. Sin embargo, he visto demasiados sistemas basados en NAnt ir al sur hasta el punto en que nadie entiende lo que está haciendo nunca más, y no hay una manera real de depurarlo además de hacer el equivalente a un buen viejo printf. En el momento en que empiezas a utilizar alguna instrucción if/else o para el ciclo, ahí es donde, en mi humilde opinión, comienza a oler.
Por otro lado, MSBuild tiene una base sólida basada en metadatos y una sintaxis menos detallada. Su simplicidad (o la falta de características ... dependiendo de cómo lo vea) le obliga a escribir la lógica en el código .NET a través de nuevas tareas, en lugar de escribir la lógica en el marcado XML. Esto fomenta la reutilización y, sobre todo, le permite depurar su sistema de compilación en un depurador real.
El único problema con MSBuild es el error no tan ocasional (especialmente en la primera versión) o el comportamiento oscuro (aunque documentado). Y, si ese es el tipo de cosa que realmente te molesta, estar ligado a Microsoft.
http://stackoverflow.com/questions/476163/nant-or-msbuild-which-one-to-choose-and-when – webwesen
webwesen tiene descubrió un agujero recursivo en este universo, al ubicar una referencia a una pregunta que no había existido, ¿no debería ser al revés? – DevelopingChris