2013-02-24 3 views
20

Chcę zbudować .vcxproj przez msbuild z zewnątrz Visual Studio. Problemem jest to, że jest dużo $ (SolutionDir) wewnątrz Plik .vcxproj, który najwyraźniej jest poprawnie ustawiony tylko po załadowaniu rozwiązania.

Kiedy zastąpić $ (SolutionDir) o rzeczywistej ścieżki absolut to działa, problemem jest to, że inni ludzie na innych maszynach pracują z tym samym pliku projektu ...

Czy ktoś zna jakieś rozwiązanie lub włamać się do Rozwiąż ten problem?

Dzięki, każda pomoc jest doceniana.

Simon

Odpowiedz

30

Można ustawić zmienną przekazując argumenty parametrów:

/p:SolutionDir=path 

Więc zamiast edytować plik rozwiązania, można utworzyć skrypt kompilacji, który konfiguruje środowisko i wykonuje msbuild odpowiednio , pozostawiając plik Visual Studio tak, jak jest do prac programistycznych.

6

Możesz użyć ścieżki względnej. Not sure about VS2010 jak w pytaniu, ale gwarantowane działa od VS2012. Jeśli folder projektu znajduje się tuż pod folderem rozwiązania, wówczas ścieżka względna to .. \ To przy okazji można połączyć z argumentem parametru z poprzedniej odpowiedzi.

<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir> 
+0

Przechodzenie do katalogów nie działa w wersjach kontrolnych TFS podczas przesłaniania .targets na przykład. Potrzebujesz absolutnych ścieżek. – Shiv

+0

Należy to podać w elemencie '' odpowiedniego pliku '* .csproj'. Czuję, że jest to ważna informacja z twojej odpowiedzi. –

5

Rozwiązanie, aby jawnie przekazać SolutionDir jako argument jest dla mnie niewystarczające. Mianowicie, jeśli projekt, który chcę zbudować, ma zależności z różnymi konfiguracjami kompilacji, kompilacja kończy się niepowodzeniem z błędem This project doesn't contain the Configuration and Platform combination of <my target configuration>.

Ma to sens, ponieważ nie określiłem docelowej konfiguracji dla zależności, a zatem próbuje ona kierować tę samą konfigurację co projekt, który buduję, a którego nie ma (w moim przypadku).

Ponieważ plik rozwiązania zawiera konfiguracje kompilacji dla wszystkich projektów w roztworze (z uwzględnieniem konfiguracji rozwiązania), chcemy skorzystać z tego rozwiązania, aby rozwiązać ten problem. Na szczęście, msbuild pozwala nam zbudować rozwiązanie i przekazać konkretny projekt docelowy jako argument, który spowoduje tylko, że projekt zostanie zbudowany (wraz z jego zależnościami).

msbuild MySolution.sln /t:MyProject 
Powiązane problemy