Czy powinienem przełączyć się z nant na msbuild?

Obecnie używam nant, ccnet (tempomat), svn, mbunit. Używam msbuild zrobić mój SLN budować tylko dlatego, że było prostsze do powłoki out.

Czy są jakieś zalety w zamianie całego mojego skryptu build na MSBuild? Muszę być w stanie uruchomić testy, testy stylu watir, xcopy deploy. Czy tak jest łatwiej?

Aktualizacja: jakieś atrakcyjne funkcje, które spowodowałyby, że przeniosę się z nant na msbuild?

Author: Chris, 2008-08-14

18 answers

Lubię MSBuild. Jeden powód jest taki .pliki csproj są pliki msbuild, a budowanie W VS jest tak samo jak budowanie w wierszu poleceń. Innym powodem jest dobre wsparcie ze strony TeamCity, czyli serwera CI, z którego korzystałem. Jeśli zaczniesz używać MSBuild i chcesz robić więcej niestandardowych rzeczy w procesie budowania, pobierz MSBuild Community Tasks . Dają Ci mnóstwo dodatkowych zadań. Nie używam NAnt od kilku lat i nie żałuję tego.

Również jako Ruben wspomina, że istnieją zadania SDC na CodePlex.

Dla jeszcze większej zabawy dostępny jest MSBuild Extension Pack na CodePlex, który zawiera zadanie na Twitterze.

 31
Author: Lance Fisher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-14 21:25:38

Moja rada jest wręcz przeciwnie-unikaj MSBuild jak zarazy. NANT jest o wiele łatwiejsze do skonfigurowania w celu automatycznego testowania, wdrożenia w wielu środowiskach produkcyjnych, integracji z cruisecontrol dla środowiska wejściowego, integracji z kontrolą źródła. Przeszliśmy przez tyle bólu z TFS / MSBuild (używając TFSDeployer, niestandardowych skryptów powershell, itp.), aby zrobić to, co byliśmy w stanie zrobić z NANT po wyjęciu z pudełka. Nie trać czasu.

 27
Author: Jim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-15 14:49:46

Najbardziej przekonujący powód, aby używać MSBuild (przynajmniej w. NET 3.5 i nowszych) - silnik kompilacji może budować jednocześnie.

Oznacza to ogromne przyspieszenie w Twoich kompilacjach, w których masz wiele rdzeni / procesorów.

Poprzednio do 3.5, MSBuild nie robił równoległych kompilacji.

 12
Author: Adam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-15 14:39:02

Uważam, że MSBuild i Nant są dość porównywalne. Jeśli używasz jednego z nich, generalnie nie przełączałbym się między nimi, chyba że w wybranym produkcie brakowało atrakcyjnej funkcji.

Osobiście używam MSBuild do każdego nowego projektu, ale twój przebieg może się różnić.

Mam nadzieję, że to pomoże!

Edit: @ChanChan - @ Jon wspomina, że Nant nie buduje aplikacji. NET 3.5. Może to być wystarczający powód, aby albo zmienić, albo przynajmniej użyć równolegle. Ponieważ przesunąłem się bardziej w kierunku MSBuild, prawdopodobnie nie jestem najbardziej poinformowaną osobą, która podkreśliłaby jakiekolwiek inne showstoppery z którąkolwiek technologią.

Edit: wygląda na to, że Nant buduje teraz aplikacje. NET 3.5.

 9
Author: Brad Leach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-15 18:39:59

NAnt jest już dostępny i jest znacznie bardziej dojrzałym produktem, a także IMO łatwiejszym w użyciu. Istnieje wiele społeczności know-how do wykorzystania, i jest to również cross-platform, jeśli jesteś zainteresowany budowaniem aplikacji, które mogą działać pod mono, a także. NET i Silverlight. Po wyjęciu z pudełka robi o wiele więcej niż MSBuild. O tak, i możesz wywołać MSBuild z NAnt (OK, z NAntContrib): -)

Po stronie negatywnej NAnt i jego siostrzany projekt NAntContrib wydaje się być w stagnacji, a ostatnia aktualizacja jest pod koniec 2007 roku.

Główną zaletą MSBuild jest to, że jest dostarczany z.NET Framework, więc jest to jeden produkt mniej do zainstalowania; i jest bardziej aktywny rozwój dzieje się (choć w miejscach, aby dogonić starszych NAnt).

Osobiście uważam, że jego składnia jest trochę trudniejsza do zrozumienia, ale jestem pewien, że dalsze narażanie się na ti ułatwi sprawę.

Wniosek? Jeśli jesteś praca z istniejącymi skryptami NAnt, trzymanie się ich, nie jest warte kłopotów z portowaniem. Jeśli rozpoczynasz nowy projekt i czujesz się pełen przygód, daj szansę MSBuild.

 3
Author: David Keaveny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-17 04:20:01

Przełączyliśmy się również z nant na msbuild. Jeśli twój build jest dość standardowy, to nie będziesz miał większych problemów z jego skonfigurowaniem, ale jeśli masz wiele specyficznych zadań build, będziesz musiał napisać niestandardowe zadania ms build, ponieważ jest mniej niestandardowych zadań dla msbuild.

Jeśli chcesz wyświetlać rozsądne wyniki budowania, będziesz musiał zadzierać z niestandardowymi rejestratorami itp. Cały zespół nie jest tak dojrzały jak nant.

Ale realną korzyścią jest integracja z kontrolą źródeł TFS i usług raportowania. Jeśli nie używasz TFS jako systemu kontroli źródła, to nie jest tego warte.

 2
Author: mirkov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-04 07:37:23
  • nie przełączaj się, chyba że masz bardzo przekonujący powód (przynajmniej).
  • NAnt jest open source i gdyby nie to nie byłbym w stanie dostosować naszego systemu budowania, MSBuild nie jest.
  • NAnt może łatwo uruchomić MSBuild, nie jestem pewien, czy na odwrót.
  • Skrypty MSBuild są już napisane dla Ciebie, jeśli używasz VS2005 lub nowszego (pliki projektu są plikami MSBuild.)
  • Jeśli używasz NAnt i używasz VS do edycji plików projektu, ustawień i konfiguracji, będziesz musiał napisać narzędzie do konwertera / synchronizacji, aby zaktualizować pliki NAnt z plików projektu VS.
 2
Author: Ash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-11 11:20:35

@Brad Leach

Generalnie nie przełączałbym się między nimi, chyba że brakuje fascynującej funkcji

Jakie są przekonujące powody, aby korzystać z msbuild? są jakieś wady?

Jak na razie dostaję całkiem dobre, "nie kłopocz się" z twojej odpowiedzi.

 1
Author: DevelopingChris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-14 03:49:42

Myślę, że są stosunkowo porównywalne zarówno pod względem funkcji, jak i łatwości użytkowania. Po prostu z bycia C# oparte uważam msbuild łatwiejsze do pracy niż nants, choć to nie jest przekonujący powód do przełączania.

Czego dokładnie nant nie robi dla Ciebie? A może po prostu masz nadzieję, że jest jakaś fajna funkcja, której możesz przegapić? :)

Jedną bardzo fajną rzeczą w C# jest to, że jeśli masz. NET framework, masz wszystko, czego potrzebujesz, aby uruchomić msbuild. Jest to fantastyczne, gdy pracujesz w dużych zespołach / projektach i mieć obrót ludźmi / sprzętem.

Osobiście wolę bułeczki od obu:)

 1
Author: Andrew Grant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-14 06:07:42

Głównym powodem, dla którego nadal używam nAnt nad msbuild dla moich zautomatyzowanych kompilacji, jest to, że mam bardziej szczegółową kontrolę nad kompilacjami. Ze względu na to, że msbuild używa pliku kompilacji csproj, wszystkie źródła w tym projekcie są kompilowane w jednym zestawie. Co powoduje, że mam wiele projektów w moim rozwiązaniu dla dużych projektów, w których oddzielam logikę. Dobrze z nant, mogę zorganizować mój build gdzie mogę skompilować to, co chcę do wielu zestawów z jednego projektu.

I like this route, ponieważ to powstrzymuje mnie od posiadania wielu plików projektu w moim rozwiązaniu. Mogę mieć jeden projekt z folderami dzielącymi Warstwy, a następnie użyć nant, aby zbudować każdą warstwę w swoim własnym złożeniu.

Jednak używam zarówno nant, jak i msbuild w połączeniu do niektórych zadań budowania, takich jak budowanie aplikacji WPF. O wiele łatwiej jest skompilować aplikację WPF z celem msbuild w nant.

Aby to zakończyć i punktem mojej odpowiedzi jest to, że lubię używać ich obok siebie, ale kiedy używam msbuild w tej konfiguracji, zwykle służy do prostej kompilacji, nie wykonuje żadnych zadań automatyzacji budowania, takich jak kopiowanie plików do katalogu, generowanie dokumentacji pomocy lub uruchamianie testów jednostkowych na przykład.

 1
Author: Dale Ragan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-15 14:55:25

Właściwie wciąż próbuję rozwiązać to pytanie, ale jest jedna wielka premia dla MSBuild tutaj: używanie tego samego pliku kompilacji do lokalnej ciągłej integracji poprzez wywołanie msbuild.exe bezpośrednio, jednocześnie będąc w stanie korzystać z ciągłej integracji po stronie serwera VSTS z tym samym plikiem kompilacji (choć najprawdopodobniej różne właściwości/ustawienia).

Tj. w porównaniu do wsparcia TeamCity dla skryptów MSBuild, VSTS tylko obsługuje skrypty MSBuild! Zhakowałem wokół tego w przeszłości przez exec ' ING NAnt z MSBuild; widziałem, że inni polecają tę praktykę, jak również odwrotnie, ale wydaje mi się kludgey, więc staram się tego nie robić, jeśli mogę tego uniknąć. Tak więc, gdy używasz "pełnego stosu Microsoft" (VSTS i TFS), sugerowałbym trzymanie się skryptów MSBuild.

 1
Author: Jess Chadwick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-30 07:41:58

Nant ma więcej funkcji po wyjęciu z pudełka, ale MSBuild ma znacznie lepszą strukturę podstawową (metadane elementów), co znacznie ułatwia budowanie skryptów MSBuild wielokrotnego użytku.

MSBuild zajmuje trochę czasu, aby zrozumieć, ale jak już to zrobisz, to bardzo miło.

Materiały dydaktyczne:

 1
Author: Konstantin Tarkus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-28 23:58:04

Nie widzę powodu do zamiany. Sam MsBuild blokuje cię w używanym frameworku. Jeśli używasz NAnt, możesz go używać w wielu frameworkach i użyć powłoki do msbuild, aby faktycznie wykonać zadanie budowania za Ciebie.

Jestem fanem NAnt pod tym względem, ponieważ oddziela cię to trochę od frameworka.

Stworzyłem framework, który umieszcza konwencje w zautomatyzowanych kompilacjach i zbudowałem go na NAnt. Nazywa się UppercuT i jest szalenie łatwy w użyciu Ramy.

Automatyczne tworzenie jest tak proste, jak (1) Nazwa rozwiązania, (2) ścieżka kontroli źródła, (3) Nazwa firmy dla większości projektów!

Http://code.google.com/p/uppercut/

Kilka dobrych wyjaśnień tutaj:

 1
Author: ferventcoder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-18 15:03:31

MSBuild jest zintegrowany z Visual Studio daje programistom mniej tarcia do korzystania z systemu budowania. To głównie sprowadza się do nich tylko trzeba iść "rozwiązanie budowania" i to wszystko działa, zamiast konieczności korzystania z niestandardowych kroków budowania i innych tego typu rzeczy, lub, co gorsza, zmuszając deweloperów do budowania przez uruchomienie jakiegoś zewnętrznego skryptu.

Teraz najczęściej wolę MSBuild niż NAnt, ponieważ jest to prostsze. Oczywiście, NAnt ma o wiele więcej funkcji, jest bardziej wydajny itp., ale może szybko uzyskać wymknęło się spod kontroli. Jeśli ty i twoi inżynierowie macie dyscyplinę, aby Skrypty NAnt były proste, to wszystko jest w porządku. Jednak zbyt wiele systemów opartych na NAnt idzie na południe do punktu, w którym nikt już nie rozumie, co robi, i nie ma prawdziwego sposobu, aby go debugować, poza wykonaniem odpowiednika starego dobrego printf. W momencie, gdy zaczniesz używać jakiejś instrukcji if / else lub pętli for, to tam, IMHO, zaczyna pachnieć.

Z drugiej strony MSBuild ma solidne podstawy oparte na metadane i mniej wyrazista składnia. Jego prostota (lub brak funkcji... w zależności od tego, jak to widzisz) zmusza cię do pisania logiki w kodzie. NET poprzez nowe zadania, zamiast pisania logiki w znacznikach XML. Zachęca to do ponownego użycia, a przede wszystkim pozwala na rzeczywiste debugowanie systemu kompilacji w prawdziwym debugerze.

Jedynym problemem z MSBuild jest niezbyt okazjonalny błąd (szczególnie w pierwszej wersji) lub niejasne (choć udokumentowane) zachowanie. I, jeśli to jest coś, co naprawdę przeszkadza ci bycie przywiązanym do Microsoftu.

 1
Author: Ludovic Chabant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-16 17:36:47

Przesiadłem się z NANT na MSBuild. Projekt działa w. Net 4.0.

Moje doświadczenie w Nant było dobre. Projekt jakby umarł. A kiedy pojawiła się. Net 4.0, nadszedł czas, aby ponownie ocenić proces budowania.

Odkąd nant został ostatnio wydany MSBuild ma różne sposoby. W tym momencie MSBuild jest drogą do zrobienia. Jest łatwy w użyciu, ma wiele rozszerzeń. Przepisałem Skrypty w półtora dnia. Skrypt MSBuild jest o 1/3 wielkości skryptów Nant.

Wiele z praca w skrypcie Nant polegała na konfigurowaniu różnych środowisk. W MsBuild/. Net 4.0 jest wbudowany.

 1
Author: Chuck Conway,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-11 14:52:13

Używam MSBuild obok Nant, ponieważ obecna wersja Nant nie może jeszcze skompilować aplikacji. NET 3.5(tak było, gdy po raz pierwszy pojawił się. NET 2.0).

 0
Author: Jon Limjap,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-14 03:53:09

Jedynym powodem, dla którego mogę zobaczyć za pomocą msbuild jest to, jeśli chcesz użyć zautomatyzowanego serwera budowania, takiego jak tempomat. Jeśli nie zamierzasz się zamienić, to zostawiłbym to w spokoju.

 0
Author: AdamSane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-14 04:06:00

Używam Nant i kocham go. Używałem MSBuild i nienawidziłem go z tego powodu:

  1. Microsoft zmusza cię do przestrzegania ich własnej procedury budowania, która jest tak nieodłączna dla ich działań, że przynajmniej nie byłem w stanie tego zrobić (musiałem skompilować NET1.1, więc musiałem zmieszać Nant i MSbuild). Wiem, że możesz stworzyć swój własny plik MSBuild, ale myślałem, że jest to skomplikowane w zrozumieniu i utrzymaniu.

  2. Itemtypy do wykonywania operacji na plikach są po prostu zbyt trudne do naśladowania. Możesz mieć Nant robi dokładnie te same rzeczy i znacznie łatwiejsze i bezpośrednie (musiałem utworzyć listę ItemType, a następnie przejść do operacji na plikach).

  3. W MsBuild musisz stworzyć własne zadanie dll, w Nant możesz to zrobić lub możesz osadzić kod C# w swoim skrypcie, więc znacznie łatwiej jest przejść i po prostu zbudować cały projekt.

  4. Nant współpracuje z Net1. 1, MsBuild nie.

  5. Aby zainstalować nant, mogę nawet rozpakować i zlokalizować we własnym repozytorium, aby go uruchomić. Na instalacja MsBuild jest znacznie trudniejsza, ponieważ zależy od wielu rzeczy z Visual Studio, itp. (może się mylę, ale to chyba prawda).

Cóż, to są moje opinie...

 0
Author: Kat Lim Ruiz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-30 17:21:25