Visual Studio 2008 memungkinkan saya mendeklarasikan perintah dan melampirkannya ke acara pasca-pembuatan untuk sebuah proyek. Seperti kebanyakan pengembang, saya menggunakannya secara teratur untuk menyalin file ke direktori keluaran aplikasi.
Saya sedang mengerjakan proyek di mana saya perlu menyalin file dari dua tempat berbeda ke dua tujuan berbeda, semuanya dalam satu proyek. Dengan kata lain, saya perlu menjalankan dua perintah xcopy yang berbeda dari acara pasca-pembangunan yang sama. Sepertinya event post-build hanya akan mengambil satu perintah, dan jika saya perlu memanggil beberapa perintah, saya harus meletakkan perintah di file * .bat dan memanggilnya dari event post-build.
Apakah itu benar, atau adakah cara yang lebih sederhana untuk memanggil dua perintah dari event post-build? Terima kasih sebelumnya atas bantuan Anda.
sumber
Penting: Saat menjalankan file batch, Anda harus menggunakan pernyataan "call" untuk menjalankan baris berikut. Jika Anda tidak menggunakan "call", eksekusi akan masuk ke .bat dan tidak kembali ke baris berikut. Sama seperti pada DOS prompt.
misalnya:
sumber
Ada opsi lain: Anda dapat memisahkan perintah dengan
&&
. Misalnyacopy $(TargetPath) d:\folder1 && copy $(TargetPath) d:\folder2
Ini tidak persis sama dengan memisahkan dengan baris baru: dengan
&&
, jika perintah sebelumnya gagal, perintah berikutnya tidak akan dijalankan.Memisahkan dengan baris baru lebih mudah dibaca, jadi Anda harus lebih memilihnya. Namun saya tahu setidaknya satu kasus bila
&&
berguna. Ini adalah skenario, ketika Anda menggunakan lembar properti untuk memiliki langkah pasca-pembuatan yang berbeda pada mesin yang berbeda. VS 2008 tidak mengizinkan pengaturan PostBuildStep di lembar properti secara langsung, tetapi Anda dapat menambahkan makro pengguna dengan perintah Anda dan memanggilnya dari pengaturan proyek utama. Makro adalah satu baris, sehingga Anda dapat menggunakan&&
beberapa perintah di sana.sumber
Setiap perintah harus berada di baris terpisah. Apa yang saya temukan adalah bahwa jika ada kesalahan dalam mengeksekusi salah satu dari perintah tersebut, keseluruhan post-build gagal dan Anda harus mencoba setiap perintah post-build satu per satu untuk men-debug.
sumber
Memisahkan perintah dengan & atau && atau; tidak berfungsi di VS2017. Tidak dapat mempercayai fungsi sederhana seperti itu tidak tersedia di VS2017. Visual studio mencoba mengeksekusi seluruh teks di jendela event post build sebagai satu string. Satu-satunya pilihan bagi saya sekarang adalah membuat skrip batch yang tidak terlalu saya sukai.
sumber
Menambah Womp 's jawabannya :
Jika Anda memiliki beberapa lembar properti dengan sesuatu yang harus dilakukan pada peristiwa build yang sama, Anda dapat melakukan hal berikut untuk merangkai perintah:
dimana
%(Command)
mengembang ke nilai sebelumnya dari perintah.Secara pribadi saya melakukan ini untuk semua acara pembangunan, meskipun saat ini saya tidak memiliki perintah yang diwariskan, karena ini memastikan tidak akan ada masalah jika saya menambahkan lembar properti nanti.
sumber
exit
pernyataan batch di mana saja di sepanjang rantai menyebabkan rantai tersebut dibatalkan. Memangexit 1
menyebabkan build gagal sementaraexit 0
hanya membatalkan langkah dan build berlanjut.Di Visual Studio 2017 Anda dapat melakukan ini:
sumber
Pendekatan yang disarankan oleh womp berfungsi di Visual Studio 2015/2017 (Windows), tetapi tidak berfungsi di Visual Studio untuk Mac (Pratinjau), yang tampaknya hanya menjalankan perintah pertama. Satu-satunya pendekatan yang saya temukan berfungsi di Visual Studio versi Mac dan Windows adalah merangkai 2 perintah MSBuild:
Contoh di atas menggunakan acara "AfterResolveReferences" tetapi seharusnya juga berfungsi untuk acara PostBuild.
sumber
Tidak ada solusi yang baik untuk masalah ini. Gagasan panggilan menyebabkan skrip lain berjalan. Saya perhatikan bahwa deteksi kesalahan tidak akan berfungsi. Masukkan 'exit / b 1' ke FailMe.cmd. Gunakan 'panggil FailMe.cmd' di langkah-langkah pembuatan posting. Perhatikan bahwa build tidak gagal? Saya menggunakan VS 2017 untuk membangun proyek C #. Sekarang coba dengan 'FailMe.cmd'. Build sekarang melaporkan kesalahan.
Jadi, Anda mungkin lebih baik hanya menggunakan satu skrip, jika pelaporan kesalahan itu penting.
sumber
Cukup awali "panggilan" ke skrip batch Anda. Sehingga pernyataan di bawah skrip Batch juga dijalankan setelah mengembalikan panggilan dari skrip batch.
sumber