Kami menggunakan TeamCity untuk integrasi berkesinambungan dan ini membangun rilis kami melalui file solusi (.sln). Saya telah menggunakan Makefiles di masa lalu untuk berbagai sistem tetapi tidak pernah msbuild (yang saya dengar agak mirip dengan Makefiles + XML mashup). Saya telah melihat banyak posting tentang cara menggunakan msbuild secara langsung daripada file solusi tetapi saya tidak melihat jawaban yang sangat jelas tentang mengapa melakukannya.
Jadi, mengapa kita harus repot bermigrasi dari file solusi ke 'makefile' MSBuild? Kami memang memiliki beberapa rilis yang berbeda dengan #define (build khusus) tetapi untuk sebagian besar semuanya berfungsi.
Kekhawatiran yang lebih besar adalah bahwa sekarang kita harus memelihara dua sistem ketika menambahkan proyek / kode sumber.
MEMPERBARUI:
Bisakah orang menjelaskan siklus hidup dan saling mempengaruhi dari tiga komponen berikut?
- File .sln Visual Studio
- Banyak file .csproj tingkat proyek (yang saya pahami skrip msbuild "sub")
- Skrip msbuild khusus
Apakah aman untuk mengatakan bahwa .sln dan .csproj dikonsumsi / dipelihara seperti biasa dari dalam Visual Studio IDE GUI sementara skrip msbuild kustom ditulis tangan dan biasanya mengkonsumsi .csproj individual yang sudah ada "apa adanya"? Itu salah satu cara saya melihat pengurangan tumpang tindih / duplikat dalam pemeliharaan ...
Akan menghargai beberapa cahaya tentang ini dari pengalaman operasional orang lain
sumber
So, why should we bother migrating from solution files to an MSBuild 'makefile'?
Pertama, Anda harus memberi tahu Anda mengapa Anda mempertimbangkannya? Apakah file solusinya tidak cukup?Because it's reputed to be better practice
dimana?Jawaban:
Fakta pertama adalah bahwa file solusi secara ajaib menjadi file MSBuild ketika MSBuild mengeksekusinya - yang adalah apa yang terjadi ketika Anda membangun solusi di visual studio. Selain itu, semua file proyek tersebut hanya file msbuild yang dikelola oleh visual studio. Bahkan, file proyek menangani sebagian besar pekerjaan kotor yang sebenarnya di sini tidak masalah jika Anda membangun dari solusi atau membangun dari skrip msbuild kustom.
Kami juga menggunakan TeamCity untuk membangun dan menerbitkan aplikasi dan kami biasanya akan berakhir dengan skrip msbuild khusus untuk sebagian besar proyek. Peran yang dimainkan skrip ini - yang tidak mudah dengan file solusi - mengemas proyek untuk penyebaran atau distribusi. Biasanya skrip ini menangani beberapa aspek operasional lebih banyak hal - seperti membangun proyek web ke folder tertentu atau menyalin dalam konfigurasi yang sedang berjalan sebagai lawan dari konfigurasi pengembangan. Pengangkatan berat cenderung ditangani dalam file proyek sendiri - skrip build hanya mereferensikannya, kami tidak mencoba dan membuat ulang roda itu. Secara keseluruhan ini berfungsi dengan baik dan tidak terlalu banyak kode duplikat.
sumber
Makefile untuk msbuild adalah file .sln (atau file vcproj).
Baris perintah msbuild tipikal adalah:
Inti dari menggunakan msbuild adalah agar Anda dapat membuat skrip dan mengotomatiskan proses pembuatan. Apakah Anda menyadarinya atau tidak, TeamCity telah menggunakan msbuild selama ini.
sumber
Izinkan saya menawarkan pendapat saya tentang pertanyaan ini.
Meskipun Anda tentu saja dapat menggunakan file .SLN sebagai 'proses pembangunan', file itu sendiri sebenarnya bukan merupakan proses pembangunan. File Solusi benar-benar hanya bagian dari Visual Studio dan digunakan untuk pengembangan. Tetapi Visual Studio hanyalah bagian dari proses build dan release. Anda tidak dapat mengandalkan Solusi untuk mengelola bangunan Anda, dan Solusi tentu saja tidak menawarkan situasi bangunan yang dapat diskalakan.
Seluruh tujuan membangun proses pembangunan adalah untuk menciptakan bangunan yang andal. Dengan kata lain, proses build sangat andal sehingga tidak peduli konfigurasi build, Anda akan mendapatkan output build yang dapat diprediksi. Setiap saat, setiap mesin. Hasil dari bangunan yang dapat diprediksi dan andal adalah bahwa pengujian, penyebaran, dan proses rilis kemudian dapat sangat otomatis, lebih lanjut mengurangi risiko kesalahan manusia.
Membangun proses pembangunan membutuhkan investasi, tetapi dalam kasus tertentu, investasi diperlukan. Berikut adalah beberapa faktor yang mendukung proses msbuild:
Biarkan saya memberi contoh untuk memperluas poin terakhir saya. Perusahaan saya saat ini melakukan pengembangan SharePoint. Pengembangan SharePoint minimal memerlukan fondasi SharePoint yang harus diinstal untuk melakukan pembangunan di proyek SharePoint. Berbicara dalam hal server build yang ringan, sama sekali tidak praktis untuk meminta server build untuk menginstal SharePoint. SharePoint tidak hanya binatang buas dengan persyaratan tinggi tetapi juga akan memiliki implikasi kinerja yang serius pada build - dan build seharusnya secepat dan ramping mungkin. Memanfaatkan MSBuild memungkinkan saya untuk menghilangkan persyaratan instalasi ini di server build. Bahkan, server build kami tidak memiliki persyaratan instalasi selain kerangka NET. (Diperlukan oleh MSBuild) dan Node.
Sebagai referensi, saya akan merekomendasikan untuk memeriksa buku ini oleh Sayed Ibrahim Hashimi: http://www.amazon.com/Inside-Microsoft-Build-Engine-Foundation/dp/0735645248/ref=sr_1_fkmr0_1?ie=UTF8&qid=1412014650&sr= 8-1-fkmr0 & kata kunci = msbuild + andal + build
sumber
Ini persis pertanyaan yang saya tanyakan pada diri sendiri beberapa bulan yang lalu! Kami memiliki segalanya yang diatur dengan baik:
Dan kemudian, ketika datang ke reproduktifitas, menjadi jelas bahwa ini mendapat skor rendah. Ketika Anda membiarkan TeamCity menjadi skrip build Anda, menjadi sulit untuk mereproduksi hasil yang serupa, andal, pada mesin pengembangan Anda sendiri.
Saat Anda memiliki skrip build, skrip build tahu semua yang perlu dilakukan dan memiliki semua variabel di tempatnya. Saat Anda menggunakan server CI sebagai skrip build Anda, dan beberapa masalah terjadi, seperti tes kompleks gagal atau perlu membangun paket deployment secara manual (seperti contoh saya), Anda harus menyatukan semua langkah build build secara manual.
Jadi, singkatnya , mengapa skrip membangun (MS)? Karena Anda akan memiliki lebih banyak persyaratan ketika datang ke bangunan Anda. Anda mungkin ingin menjalankan beberapa tes dan menghasilkan beberapa artefak dari itu. Anda mungkin ingin melakukan penyebaran. Dan ketika semua yang Anda inginkan harus bisa dijalankan, apakah itu di server build atau mesin Anda, itu tidak bisa berakhir di mana pun kecuali dalam skrip build.
sumber