2008-11-11 4 views
25

Dies ist wahrscheinlich einfach, aber ich bleibe stecken: Wenn ich eine Lösung in Visual Studio erstellen - wie extrahiert die genaue cmd-Zeile für den aktuellen Build-Befehl, um in der Lage sein, den gleichen Build von VisualStudio-Konsole zu tun?Wie bekomme ich cmd line Build Befehl für VS Lösung?

Im Ausgabefenster kann ich die einzelnen Projekte in der Lösung sehen, aber nicht die Befehle für die gesamte Lösung.

Ich bin auf VS2005.

Jede Hilfe wäre willkommen

Antwort

13

Zusätzlich zu dem, was @JohnIdol sagt richtig, habe ich festgestellt, dass Sie eine Reihe VS Umgebungsvariablen einrichten müssen. Ich habe nicht den Namen der Batch-Datei vor mir, aber Sie können ändern oder "ich denke" es verwenden. Es ist irgendwo in VS-Programmdateien Baum. Auch wenn ich mich erinnere, dass Sie nicht in einer Standard-Shell sein wollen, sondern in einer .NET-Setup-Shell für einige Pfade und ähnliches. Ich werde später Details hinzufügen, wenn ich auf einem Windows-PC mit VS bin.

EDIT: Die erwähnte Batch-Datei ist eine Verknüpfung im ProgFiles-Menü. Hier sind die Details seiner Eigenschaften.

%comspec% /k ""C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat""x86" 

Hier ist meine Batch-Datei, MSBuild verwenden, um die Lösung aufzurufen.

@echo off 

:: setup VS2005 command line build environment 
set VSINSTALLDIR=C:\Program Files\Microsoft Visual Studio 8 
set VCINSTALLDIR=C:\Program Files\Microsoft Visual Studio 8\VC 
set FrameworkDir=C:\WINDOWS\Microsoft.NET\Framework 
set FrameworkVersion=v2.0.50727 
set FrameworkSDKDir=C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0 
set DevEnvDir=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE 
set PATH=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\BIN;C:\Program Files\Microsoft Visual Studio 8\Com 
mon7\Tools;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\bin;C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\bin;C:\Program Files\Microsoft 
Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;%PATH% 
set INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\INCLUDE;C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;C:\Program Files\Microsoft Visual 
Studio 8\VC\PlatformSDK\include;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include;%INCLUDE% 
set LIB=C:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\LIB;C:\Program Files\Microsoft Visual Studio 8\VC\LIB;C:\Program Files\Microsoft Visual Studio 8\VC 
\PlatformSDK\lib;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;%LIB% 
set LIBPATH=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\LIB 

echo %0 %* 
echo %0 %* >> %MrB-LOG% 
cd 
if not ""=="%~dp1" pushd %~dp1 
cd 
if exist %~nx1 (
     echo VS2005 build of '%~nx1'. 
     echo VS2005 build of '%~nx1'. >> %MrB-LOG% 
     set MrB-BUILDLOG=%MrB-BASE%\%MrB-WORK%.%MrB-NICEDATE%.%MrB-NICETIME%.build-errors.log 
     msbuild.exe %~nx1 /t:Rebuild /p:Configuration=Release > %MrB-BUILDLOG% 
     findstr /r /c:"[1-9][0-9]* Error(s)" %MrB-BUILDLOG% 
     if not errorlevel 1 (
       echo ERROR: sending notification email for build errors in '%~nx1'. 
       echo ERROR: sending notification email for build errors in '%~nx1'. >> %MrB-LOG% 
       call mrb-email "Mr Build isn't happy about build errors in '%~nx1'" %MrB-BUILDLOG% 
     ) else (
       findstr /r /c:"[1-9][0-9]* Warning(s)" %MrB-BUILDLOG% 
       if not errorlevel 1 (
         echo ERROR: sending notification email for build warnings in '%~nx1'. 
         echo ERROR: sending notification email for build warnings in '%~nx1'. >> %MrB-LOG% 
         call mrb-email "Mr Build isn't happy about build warnings in '%~nx1'" %MrB-BUILDLOG% 
       ) else (
         echo Successful build of '%~nx1'. 
         echo Successful build of '%~nx1'. >> %MrB-LOG% 
       ) 
     ) 
) else (
     echo ERROR '%1' doesn't exist. 
     echo ERROR '%1' doesn't exist. >> %MrB-LOG% 
) 
popd 
+0

Danke das ist wirklich hilfreich – JohnIdol

3

Sie können Msbuild über die Befehlszeile starten. Msbuild versteht .sln (Lösung) Dateien. Sie können die .sln-Datei und die Erstellungskonfiguration (Debug, Release usw.) über die Befehlszeile angeben.

http://msdn.microsoft.com/en-us/library/ms164311.aspx
Hier ist die Dokumentation, was Sie mit msbuild tun können. MSBuild.exe wird mit dem .NET-Framework nicht mit Visual Studio installiert. Sie finden es in c: \ windows \ microsoft.net \ framework \ v3.5 (oder v2.0.50727)

Ich suchte ein wenig und fand, dass Sie auch eine Befehlszeile mit Visual Studio mit devenv bauen können. exe/build, weitere Infos hier:
http://msdn.microsoft.com/en-us/library/xee0c8y7(VS.80).aspx

+0

mit Links meinen Beitrag bearbeitet. – Mendelt

+0

danke - Ich suchte mehr nach einer Möglichkeit, eine bestimmte Befehlszeile zu erhalten (welche Parameter verwendet VS bei der Ausführung von Msbuild) – JohnIdol

3

Wenn Sie die genaue Befehlszeile, um zu sehen, wie durch VS vorgesehen (und nicht arbeitet es aus), dann könnten Sie die MSBuild.exe mit Ihrem eigenen Konsole app versuchen zu ersetzen, die alle Parameter in eine Datei ausdruckt .

Sie könnten auch alle mitgelieferten Umgebungsvariablen ausgeben, um zu überprüfen, welche von VS im Hintergrund bereitgestellt werden.

19

Navigieren Sie zu Ihrem Menü Programme> Microsoft Visual Studio 2005> Visual Studio Tools>Visual Studio 2005 Eingabeaufforderung.

Diese Eingabeaufforderung enthält alle erforderlichen .NET-Umgebungsvariablen für die Befehlszeilensitzung. Sie können Verzeichnis zu Ihrer Lösung Verzeichnis ändern (zum Beispiel c: \ projects \ MySolution) und

Msbuild.exe mySolution.sln 

Sie führen die verschiedenen Optionen sehen können zur Verfügung mit msbuild /? \ Windows \ Microsoft.NET \ Framework \ v2.0.50727

Oben msbuild /:

Msbuild befindet sich unter C?Quick-Option-Check, können Sie die MSBuild Command Line Reference Seite für weitere Erläuterungen zu seiner Verwendung verweisen. Und how to build specific targets in solutions.

+2

yep - aber wie finde ich genau heraus, welche Optionen verwendet werden, wenn ich ein laufe manuelle Erstellung? – JohnIdol

+0

Bearbeiten Sie für weitere Informationen für Sie. – icelava

+0

Funktioniert auch für VS2010. http://blogs.msdn.com/b/vcblog/archive/2010/01/11/vcbuild-vs-c-msbuild-on-the-command-line.aspx –

5

Für VS .NET 2003 können Sie devenv.exe verwenden, um die Lösung/das Projekt über die Befehlszeile zu erstellen.

devenv solutionfile.sln /build solutionconfig 

z. Verwendung in Batch-Datei:

call "C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\vsvars32.bat" 

devenv Tools.sln /build "Release" 
+0

Ha ... es ist erstaunlich, wie das Hinzufügen " call "keyword ändert das Verhalten! LOL dummer Fehler meinerseits. Vielen Dank! –

+0

Dies funktioniert auch für Visual Studio 2005, aber die vsvars32.bat-Datei befindet sich unter: C: \ Programme \ Microsoft Visual Studio 8 \ Common7 \ Tools –

4

Ich möchte nur dem Bejoy auf das Beispiel danken. Ich hatte große Probleme mit der Neuerstellung der Lösung beim Setup-Pre-Build-Event, weil sie die meisten Makros entfernt haben und das hat mir sehr geholfen.

Hier ist meine Lösung auf Basis von Bejoy des (unter Berücksichtigung, dass .bat Datei im Setup-Stammordner befindet, den Teil der Lösung ist): mehr ausführlichen Informationen

call "%VS100COMNTOOLS%\vsvars32.bat" 

devenv "%CD%\..\soulutionfile.sln" /build "Release"