Bagaimana cara saya menyusun proyek Visual Studio dari baris perintah?

112

Saya membuat skrip siklus checkout, build, distribusi, pengujian, dan komit untuk solusi C ++ besar yang menggunakan Monotone , CMake , Visual Studio Express 2008, dan tes kustom.

Semua bagian lain tampak cukup mudah, tetapi saya tidak melihat cara mengkompilasi solusi Visual Studio tanpa mendapatkan GUI.

Skripnya ditulis dengan Python, tetapi jawaban yang memungkinkan saya menelepon: os.system sudah cukup.

John Mulder
sumber

Jawaban:

116

Saya tahu dua cara untuk melakukannya.

Metode 1 Metode
pertama (yang saya lebih suka) adalah menggunakan msbuild :

msbuild project.sln /Flags...

Metode 2
Anda juga dapat menjalankan:

vcexpress project.sln /build /Flags...

Opsi vcexpress segera kembali dan tidak mencetak output apa pun. Saya kira itu mungkin yang Anda inginkan untuk sebuah skrip.

Perhatikan bahwa DevEnv tidak didistribusikan dengan Visual Studio Express 2008 (Saya menghabiskan banyak waktu mencoba mencari tahu ketika saya pertama kali mengalami masalah serupa).

Jadi, hasil akhirnya mungkin:

os.system("msbuild project.sln /p:Configuration=Debug")

Anda juga akan ingin memastikan variabel lingkungan Anda benar, karena msbuild dan vcexpress tidak secara default di jalur sistem. Mulai lingkungan pembuatan Visual Studio dan jalankan skrip Anda dari sana, atau ubah jalur dengan Python (dengan os.putenv ).

Moses Schwartz
sumber
Ini juga berlaku untuk Visual Studio 2010 Express.
Samuel Harmer
msbuild tampaknya tidak dikirimkan dengan VS 2008
Lucky Luke
46

MSBuild biasanya berfungsi, tetapi saya pernah mengalami kesulitan sebelumnya. Anda mungkin lebih beruntung dengan

devenv YourSolution.sln /Build 
Jeffrey Hantin
sumber
MSBuild tidak bekerja dengan proyek Visual Fortran (* .vfproc). Terima kasih telah mengarahkan saya ke devenv.
Maik Beckmann
Saya harus menggunakan: devenv YourSolution.sln / Build tetapi bekerja dengan baik, terima kasih.
bobwah
7
Anda juga dapat menentukan konfigurasi:devenv YourSolution.sln /Build Debug
Josh Stribling
Bekerja dengan baik. Anda juga dapat membangun kembali menggunakan perintah di bawah inidevenv YourSolution.sln /rebuild
Abhineet
1
Juga seseorang dapat membangun kembali untuk mode rilis atau debug dengan hanya menambahkan debug atau rilis setelah satu spasi. Misalnya: devenv YourSolution.sln /rebuild releaseataudevenv YourSolution.sln /rebuild debug
Abhineet
20

Sejujurnya saya harus menambahkan 2 sen saya.

Anda dapat melakukannya dengan msbuild.exe . Ada banyak versi dari msbuild.exe .

C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ msbuild.exe C: \ Windows \ Microsoft.NET \ Framework64 \ v3.5 \ msbuild.exe C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild.exe
C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ msbuild.exe C: \ Windows \ Microsoft.NET \ Framework \ v3.5 \ msbuild.exe C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe

Gunakan versi yang Anda butuhkan. Pada dasarnya Anda harus menggunakan yang terakhir.

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild.exe

Jadi bagaimana melakukannya.

  1. Jalankan jendela COMMAND

  2. Masukkan path ke msbuild.exe

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild.exe

  1. Masukkan jalur ke solusi proyek seperti

"C: \ Users \ Clark.Kent \ Documents \ visual studio 2012 \ Projects \ WpfApplication1 \ WpfApplication1.sln"

  1. Tambahkan tanda apa pun yang Anda butuhkan setelah jalur solusi.

  2. Tekan ENTER

Perhatikan bahwa Anda bisa mendapatkan bantuan tentang semua kemungkinan bendera seperti

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild.exe / help

Pengembang
sumber
6
Saya sangat suka bagaimana Anda menambahkan detail untuk pengembang baru seperti di mana menemukan msbuild dll.
Ayushmati
8

Menggunakan msbuildseperti yang ditunjukkan oleh orang lain berhasil untuk saya, tetapi saya perlu melakukan lebih dari itu. Pertama-tama, msbuildperlu memiliki akses ke kompiler. Ini dapat dilakukan dengan menjalankan:

"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"

Kemudian msbuildtidak ada di $ PATH saya jadi saya harus menjalankannya melalui jalur eksplisitnya:

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" myproj.sln

Terakhir, proyek saya menggunakan beberapa variabel seperti $(VisualStudioDir). Sepertinya itu tidak diatur msbuildjadi saya harus mengaturnya secara manual melalui /propertyopsi:

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" /property:VisualStudioDir="C:\Users\Administrator\Documents\Visual Studio 2013" myproj.sln

Baris itu akhirnya memungkinkan saya untuk menyusun proyek saya.

Bonus : tampaknya alat baris perintah tidak memerlukan pendaftaran setelah 30 hari menggunakannya seperti edisi Visual Studio Community "gratis" berbasis GUI. Dengan persyaratan pendaftaran Microsoft, versi itu hampir tidak gratis. Gratis-seperti-di-facebook jika ada ...

josch
sumber
4

MSBuild adalah teman Anda.

msbuild "C:\path to solution\project.sln"
Adam Davis
sumber
1
Saya telah melihat itu gagal dalam situasi yang aneh karena perbedaan cara MSBuild dan DevEnv memproses file .sln.
Jeffrey Hantin
3

DEVENV bekerja dengan baik dalam banyak kasus, tetapi pada WIXPROJ untuk membangun penginstal WIX saya, yang saya dapatkan hanyalah kesalahan "CATASTROPHIC" di log Keluar.

Ini berfungsi: MSBUILD /Path/PROJECT.WIXPROJ / t: Build / p: Configuration = Release

peter.cyc
sumber