Saya memiliki proyek Visual Studio C ++ yang mengandalkan file DLL eksternal. Bagaimana cara membuat Visual Studio menyalin file DLL ini secara otomatis ke direktori keluaran (debug / rilis) ketika saya membangun proyek?
visual-studio
visual-c++
dll
Tikar
sumber
sumber
$ (OutDir) ternyata merupakan jalur relatif di VS2013, jadi saya harus menggabungkannya dengan $ (ProjectDir) untuk mencapai efek yang diinginkan:
BTW, Anda dapat dengan mudah men-debug skrip dengan menambahkan 'echo' di awal dan mengamati teks yang diperluas di jendela keluaran build.
sumber
Detail di bagian komentar di atas tidak berfungsi untuk saya (VS 2013) ketika mencoba menyalin dll keluaran dari satu proyek C ++ ke folder rilis dan debug dari proyek C # lain dalam solusi yang sama.
Saya harus menambahkan post build-action berikut (klik kanan pada proyek yang memiliki output .dll) lalu properti -> properti konfigurasi -> build event -> post-build event -> command line
sekarang saya menambahkan dua baris ini untuk menyalin dll keluaran ke dalam dua folder:
sumber
(Jawaban ini hanya berlaku untuk C # bukan C ++, maaf saya salah membaca pertanyaan aslinya)
Saya telah melalui DLL neraka seperti ini sebelumnya. Solusi terakhir saya adalah menyimpan DLL yang tidak dikelola di DLL yang dikelola sebagai sumber daya biner, dan mengekstraknya ke folder sementara saat program diluncurkan dan menghapusnya saat dibuang.
Ini harus menjadi bagian dari infrastruktur .NET atau pinvoke, karena sangat berguna .... Itu membuat DLL terkelola Anda mudah dikelola, baik menggunakan Xcopy atau sebagai referensi Proyek dalam solusi Visual Studio yang lebih besar. Setelah Anda melakukan ini, Anda tidak perlu khawatir tentang acara pasca-pembangunan.
MEMPERBARUI:
Saya memposting kode di sini di jawaban lain https://stackoverflow.com/a/11038376/364818
sumber
Tambahkan COPY bawaan di file project.csproj :
sumber
Anda juga dapat merujuk ke jalur relatif, contoh berikutnya akan menemukan DLL dalam folder yang terletak satu tingkat di atas folder proyek. Jika Anda memiliki beberapa proyek yang menggunakan DLL dalam satu solusi, ini menempatkan sumber DLL di area umum yang dapat dijangkau ketika Anda menetapkan salah satu dari mereka sebagai Proyek Startup.
The
/y
salinan pilihan tanpa konfirmasi. The/d
pilihan pemeriksaan untuk melihat apakah file ada di target dan jika tidak hanya salinan jika sumber memiliki timestamp yang lebih baru dari target.Saya menemukan bahwa setidaknya versi Visual Studio yang lebih baru, seperti VS2109,
$(ProjDir)
tidak ditentukan dan harus digunakan$(ProjectDir)
sebagai gantinya.Meninggalkan folder target di
xcopy
harus default ke direktori output. Itu penting untuk memahami alasan$(OutDir)
saja tidak membantu.$(OutDir)
, setidaknya dalam versi terbaru Visual Studio, ditetapkan sebagai lintasan relatif ke folder keluaran, sepertibin/x86/Debug
. Menggunakannya sendiri sebagai target akan membuat sekumpulan folder baru mulai dari folder keluaran proyek. Ex:… bin/x86/Debug/bin/x86/Debug
.Menggabungkannya dengan folder proyek akan membawa Anda ke tempat yang tepat. Ex:
$(ProjectDir)$(OutDir)
.Namun
$(TargetDir)
akan memberikan direktori keluaran dalam satu langkah.Daftar makro MSBuild Microsoft untuk versi Visual Studio saat ini dan sebelumnya
sumber