Jawaban:
Acara Pra dan Pasca Bangun dijalankan sebagai skrip batch. Anda dapat melakukan pernyataan bersyarat pada $(ConfigurationName)
.
Contohnya
if $(ConfigurationName) == Debug xcopy something somewhere
FYI, Anda tidak perlu menggunakan goto. Perintah shell IF dapat digunakan dengan kurung bulat:
if $(ConfigurationName) == Debug (
copy "$(TargetDir)myapp.dll" "c:\delivery\bin" /y
copy "$(TargetDir)myapp.dll.config" "c:\delivery\bin" /y
) ELSE (
echo "why, Microsoft, why".
)
"$(ConfigurationName)"
(perhatikan tanda kutip) jika Anda mendapatkan kode kesalahan 255
$(ConfigurationName)
kosong (baris perintah acara Post-build). if "$(Configuration)" == "Debug"
bekerja untukku. BTW, jika Anda ingin melakukan sesuatu di semua konfigurasi lain, gunakan if NOT "$(Configuration)" == "Debug"
.
Tambahkan acara pembuatan pos Anda seperti biasa. Kemudian simpan proyek Anda, buka di Notepad (atau editor favorit Anda), dan tambahkan kondisi ke grup properti PostBuildEvent. Ini sebuah contoh:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>
cd "$(ProjectDir)"
diperluas ke cd ""
.
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="$(ConfigurationName) == Debug"> <Exec Command="your command"/></Target>
. Variabel makro dan semuanya berfungsi seperti biasa.
Atau (karena acara dimasukkan ke file batch dan kemudian dipanggil), gunakan yang berikut ini (di kotak Bangun acara, bukan dalam file batch):
if $(ConfigurationName) == Debug goto :debug
:release
signtool.exe ....
xcopy ...
goto :exit
:debug
' Debug items in here
:exit
Dengan cara ini Anda dapat memiliki acara untuk konfigurasi apapun, dan masih mengelolanya dengan macro daripada harus melewati mereka ke dalam sebuah file batch, ingat bahwa %1
adalah $(OutputPath)
, dll
Error 1 The command "C:\MyProject\postbuild.bat" exited with code 99. MyProject
if
dan menggunakangoto :$(ConfigurationName)
Visual Studio 2015: Sintaks yang benar adalah (tetap di satu baris):
if "$(ConfigurationName)"=="My Debug CFG" ( xcopy "$(TargetDir)test1.tmp" "$(TargetDir)test.xml" /y) else ( xcopy "$(TargetDir)test2.tmp" "$(TargetDir)test.xml" /y)
Tidak ada kesalahan 255 di sini.
Pada Visual Studio 2019, .csproj
format modern mendukung penambahan kondisi langsung pada Target
elemen:
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Debug'">
<Exec Command="nswag run nswag.json" />
</Target>
UI tidak menyediakan cara untuk mengatur ini, tetapi tampaknya aman meninggalkan Configuration
atribut di tempat jika Anda membuat perubahan melalui UI.
Anda dapat meneruskan nama konfigurasi ke skrip post-build dan memeriksanya di sana untuk melihat apakah harus dijalankan.
Lulus nama konfigurasi dengan $(ConfigurationName)
.
Memeriksa itu didasarkan pada bagaimana Anda menerapkan langkah post-build - itu akan menjadi argumen baris perintah.
Ini berfungsi untuk saya di Visual Studio 2015.
Saya menyalin semua file DLL dari folder yang terletak di folder perpustakaan pada tingkat yang sama dengan folder solusi saya ke direktori target proyek yang sedang dibangun.
Menggunakan jalur relatif dari direktori proyek saya dan naik struktur folder dua langkah dengan .. \ .. \ lib
MySolutionFolder
.... MyProject
Lib
if $(ConfigurationName) == Debug (
xcopy /Y "$(ProjectDir)..\..\lib\*.dll" "$(TargetDir)"
) ELSE (echo "Not Debug mode, no file copy from lib")
Seperti pengaturan proyek apa pun, buildevents dapat dikonfigurasikan per Konfigurasi. Cukup pilih konfigurasi yang ingin Anda ubah dalam dropdown dialog Halaman Properti dan edit langkah pembuatan posting.
Di Visual Studio 2012 Anda harus menggunakan (saya pikir di Visual Studio 2010 juga)
if $(Configuration) == Debug xcopy
$(ConfigurationName)
terdaftar sebagai makro, tetapi tidak ditugaskan.
Bandingkan: Makro untuk Membangun Perintah dan Properti