2009-08-31 14 views
20

Częścią postu opartego na moim projekcie jest wykonanie napisanego przeze mnie programu do testowania głównej aplikacji. Niestety, proces budowania postów w visual studio blokuje oczekiwanie na wyjście pliku wykonywalnego. Tak więc utknąłem, zamykając mój program testowy, aby zakończyć proces tworzenia postów i uruchomić moją aplikację. Jak mogę to zmienić, aby VS nie czekał na powrót programu przed uruchomieniem? Dzięki.Zdarzenia kompilacji programu Visual Studio utknęły w oczekiwaniu na zakończenie pliku wykonywalnego przed uruchomieniem aplikacji w trybie debugowania.

Odpowiedz

1

Uruchomienie programu testowego przez start może działać. Zmień swój krok po kompilacji z tego:

runtest.exe 

do tego:

start runtest.exe 
+0

nie działa. Po prostu otwiera wiersz poleceń. Czy składnia jest nieprawidłowa? start "$ (ProjectDir) DDEClient \ program.exe" oryginalny był "$ (ProjectDir) DDEClient \ program.exe" – max

+0

Może 'cmd/c start "$ (ProjectDir) DDEClient \ program.exe"' ? – RichieHindle

+0

Brak szczęścia. Udało mi się go uruchomić, pisząc skrypt z automatycznym kluczem, który uruchamia moją aplikację za pomocą polecenia Uruchom. Dziękuję za pomoc. Zostało to docenione. – max

11

Wow, wydaje VS jest bardzo uparty o tym.

Możesz użyć tego małego tool, który może uruchamiać aplikacje bez pokazywania okien cmd (między innymi). W wydarzeniu post produkcji:

c:\path\to\cmdow /run app.exe 
+0

działa świetnie! dzięki –

+1

To narzędzie uruchomi skrypt budowania postu ASYNCHRONOUSLY! – Garfield

+0

Wygląda na to, że jest to najlepsze rozwiązanie, ale wymaga użycia osobnego narzędzia. Szukam polecenia wsadowego lub kodu C#, który umożliwiłby uruchamianie tego typu poleceń uruchamianych przez fire & forget ze zdarzenia budowania postu. –

0

Jeśli wykorzystują cruise control dla Twojego buduje, można umieścić to w sekcji wydawców, która pozwala budować, aby zakończyć przed uruchomieniem zadania wydawcy.

Dodatkowo, budowanie custom msbuild task jest dość banalne, jeśli wiesz, jak rozpracować proces w .net, to jest to naprawdę proste w msbuild. Aby to zrobić, możesz edytować plik .csproj lub skrypt kompilacji .proj, aby użyć tego niestandardowego zadania.

using System; 
using Microsoft.Build.Framework; 
using Microsoft.Build.Utilities; 

namespace MyTasks 
{ 
public class SimpleTask : Task 
{ 
    public override bool Execute() 
    { 
//something involving Process.Start 
     return true; 
    } 
} 
} 

Następnie w swoim skrypcie kompilacji lub pliku csproj dodajesz użycie utworzonego zadania i wywołujesz je.

3

To wydaje się być znany problem z VS 2010 (np here i here) i wydaje się, że nie zostanie ustalona że wkrótce.

Odnośnie ewentualnego obejścia, podobnego do wspomnianego przez @RichieHindle, jednej z osób MS Connect, proponuje:

START /WAIT cmd /c YourPostBuildTool.exe 
+0

Myślę, że ta opcja jest lepsza niż wersja programu Power Shell, ponieważ nie należy polegać na powłoce powershell. Mówiąc to, myślę, że w dzisiejszych czasach powershell ułatwiłoby wsparcie dla różnych platform. – Tyeth

14

Uważam również, że start sztuczka nie działa i pobierania odrębnego narzędzia, aby zakończyć takie proste zadanie wydawało się nadmierne. Po kilku dodatkowych poszukiwaniach znalazłem this SO post, który dał odpowiedź, która działała dla moich potrzeb.

Wystarczy zastąpić <actual-command-line-to-run> swoim poleceniem. Pamiętaj o podaniu pełnej ścieżki do pliku wykonywalnego i enkapsulacji go w "cudzysłowie", jeśli na twojej ścieżce znajdują się spacje.

powershell start-process <actual-command-line-to-run> 
+1

To działało dla mnie i imho jest najlepszym rozwiązaniem, ponieważ nie wymaga zewnętrznego narzędzia. –

+1

To samo, jedyne rozwiązanie, jeśli zostało znalezione, które działało bez zewnętrznego narzędzia. – misterfrb

+1

Jeśli próbujesz wywołać CMD z komendy 'Start-Process' z argumentami, musisz" podwójnie uciec "z twoich ofert - np. 'powershell start-process" cmd ""/K echo HelloWorld "" "' – Coruscate5

0

Spędziłem znaczną ilość czasu, próbując to zrozumieć. Musisz umieścić "cmd" jako pierwszą linię wydarzenia po kompilacji.

Przykładem może wyglądać następująco:

cmd 
xcopy /Y $(ProjectDir)$(OutputDir)* C:\SomePath\* 
Powiązane problemy