2015-07-23 13 views
5

używam Xorax IncrediBuild zbudować Visual Studio 2013 (lub nowsze) rozwiązania i projekty, są one głównie .vcxproj z gronem .csproj nich.Korzystanie IncrediBuild z devenv.exe vs MSBuild.exe

Zajęło mi trochę kopania, ale nauczyłem się, że:

Tak więc, w przypadku projektów Visual Studio, istnieją dwa tryby:

  • BuildConsole.exe MyProj.vcxproj który wykorzystuje DevEnv.exe

  • BuildConsole.exe MyProj.vcxproj /usemsbuild który wykorzystuje MSBuild.exe

I "Chciałbym się dowiedzieć, czy nie e są wszelkie różnice między używaniem dwóch silników.

Zrobiłem kilka testów i zauważył, że:

  • IncrediBuild "Inicjowanie ..." faza trwa nieco dłużej w przypadku DevEnv.exe.

  • BuildConsole.exe generuje oczywiście inne wyjście.

  • Nie (lub nieistotna) różnica w wydajności kompilacji.

W przypadku budowy indywidualny C/C++ (.vcxproj rodzimych projektów), jak i całych rozwiązań (.sln) jakie są wady i zalety korzystania z DevEnv.exe porównaniu MSBuild.exe?

+0

Nie wiem, czy robię coś nie tak, ale jest to całkowicie subiektywne. Mam 78 projektów i zrobiłem "Rebuild All" przy użyciu kompilacji VS2017 i zajęło mi to 2:36 (m: ss), a wraz z Incredibuildem wzrósł do 5m i właśnie go zatrzymałem. No cóż ... zarówno przy użyciu DevEnv. –

Odpowiedz

5

** Zastrzeżenie: Pracuję w IncrediBuild **

Ustaliliśmy wspólnie z Microsoft, który w celu uzyskania buduje które zachowują się w taki sam sposób jak budowa od wewnątrz Visual Studio (bez IncrediBuild), powinien devenv być użytym. MSBuild wykonuje kompilacje w nieco inny sposób niż VS zarówno w wynikach kompilacji, które produkuje, jak iw sposobie, w jaki zachowuje się podczas wykonywania niestandardowych kroków i innych drobnych rzeczy. Jeśli użytkownik chce, aby kompilacje IncrediBuild zachowywały się w taki sam sposób, jak przyzwyczajeni do budowania z Visual Studio, należy zastosować domyślny sposób (IncrediBuild wykonujący DevEnv). Jeśli użytkownik jest użyty do wykonywania swoich kompilacji przy użyciu MSBuild, niezależnie od tego, czy z linii poleceń, czy przez TFS, należy użyć przełącznika UseMSBuild. Chcieliśmy umożliwić użytkownikom wybór sposobu działania IncrediBuild w zależności od sposobu, w jaki są do tego przystosowani, tak samo jak Microsoft wspierający zarówno DevEnv, jak i MSBuild.

Dodatkowe komentarze:

  1. etap Inicjalizacja jest rzeczywiście już podczas korzystania devenv, od obciążeń devenv i analizuje rozwiązania oraz pliki .vcxproj w inny sposób niż msbuild. Im więcej projektów ma rozwiązanie, tym dłużej powinna zajść ta faza. Zwiększenie czasu potrzebnego do ukończenia tej fazy zwykle kompensowane jest w dużej mierze wzrostem prędkości w czasie rzeczywistym - podczas budowania wielu projektów w tym samym czasie.
  2. Devenv jest wysoce zalecany dla naszej funkcji Przewidywanego Wykonywania, która może zapewnić do 20% dodatkowego przyspieszenia kompilacji ze względu na powyższy sposób pracy, który nie byłby możliwy przy użyciu MSBuild.
+0

Odpowiedź została przyjęta. Dzięki! – mloskot

+0

Nie sądzę, że zasługuje na oddzielne pytanie SO, więc zapytam tutaj. Czy możesz też rzucić trochę światła na to, co robi BuildConsole.exe, jeśli używasz go z silnikiem DevEnv.exe, jeśli przeszedłeś .vcxproj i nie ma odpowiedniego pliku .sln? Czy generuje tymczasowy plik .sln? – mloskot

1

Microsoft jest pretty explicit o tym:

przypadku zadań związanych z wbudowanych, obecnie zaleca się stosowanie MSBuild zamiast devenv. Aby uzyskać więcej informacji, zobacz Polecenie wiersza polecenia MSBuild.

notatkę w dokumentacji devenv od VS2010, pierwsza wersja VS, który rozpoczął wspieranie projektów z MSBuild Budynek C++, a także zmieniono domyślnego rozszerzenia pliku projektu z .vcproj do vcxproj.

Mądrość tego rodzaju porady można wywnioskować tylko wtedy, gdy nie są one jednoznaczne. Jeden gotowy, widziałeś, Devenv.exe jest dość ciężki proces z wieloma zależnościami DLL, trwa trochę czasu. Kolejny, z którym możesz się martwić sposobem, w jaki teraz to robisz, oryginalnym wskazówkiem było użycie Devenva.com zamiast Devenv.exe. Te zależności są także kłopotliwe, takie, które stają na przeszkodzie lub po prostu upadają, gdy Devenv.exe działa w nietypowym środowisku uruchomieniowym, takim jak usługa. Przykładowa historia z piekła rodem to this Q+A, trzy odpowiedzi i żadna nie wygląda poprawnie. Są inni.

Prostą poradą jest użycie zalecanego sposobu.

+0

Hans, cieszę się, że mogę przyjąć twoją odpowiedź. Pomimo, że nie otrzymałem wiele szczegółów na temat zalet i wad dwóch silników obsługiwanych przez IncrediBuild, ale zdaję sobie sprawę, że może to być pytanie "bez odpowiedzi", chyba że ludzie Xoreaxa dzwonią. Dzięki! – mloskot

+0

FYI, zmieniłem odpowiedź na avi, ponieważ potwierdza więcej istotnych szczegółów. – mloskot

Powiązane problemy