Saya memiliki beberapa file dll di folder \ lib folder proyek saya. Di halaman properti dll, saya telah memilih "Build Action" sebagai "Content" dan "Copy to Output Directory" sebagai "Copy always".
Setelah membangun saya benar-benar mendapatkan dll disalin tetapi mereka berada di dalam \ bin \ Release \ lib dan bukan di \ bin \ Release.
Apakah ada cara untuk menyalin file dll ke \ bin \ Release (dan bukan ke \ bin \ Release \ lib) tanpa menulis skrip post-build atau menggunakan nant dll?
sumber
ContentWithTargetPath
kompilasi inkremental jeda (diuji pada VS 2017 15.9.9)Simpan
$(ProjectDir)\Lib
file tersebut, tetapi tambahkan file tersebut " Sebagai link " ke root .csproj Anda. Sekarang mereka akan disalin ke bin \ Debug (atau folder keluaran lainnya) tanpa berada di lib.EDIT: Jawaban ini ditulis kembali ketika ContentWithTargetPath tidak tersedia di versi VS / MSBuild yang saya gunakan. Meninggalkan jawaban ini di sini untuk orang-orang yang mungkin harus menggunakan versi VS. Tolong berhenti mengomentari ini, kita semua tahu ada cara yang lebih baik sekarang.
sumber
Jika tujuan utama Anda adalah menyertakan DLL tanpa mengacaukan direktori akar proyek, solusi lainnya adalah memindahkan DLL ke Proyek Bersama yang terpisah dan menambahkannya sebagai referensi dalam proyek asli.
(Perhatikan bahwa posting ini tidak secara langsung menjawab pertanyaan ini karena tidak mempertahankan folder dan struktur proyek, tetapi saya menemukan pendekatan ini berguna karena saya dapat merestrukturisasi proyek saya dalam kasus saya dan karena saya ingin menghindari beberapa kelemahan dari pendekatan lain di sini.)
Langkah
Solution -> Add -> New Project -> Shared Project
Build Action: Content
danCopy to Output Directory: Copy Always
)References -> Add Reference -> Shared Projects
Penyiapannya terlihat seperti ini:
sumber
Tambahkan dll-files sebagai referensi untuk proyek, dan pada referensi set "Salin lokal" ke true.
sumber
Jika Anda perlu menyalin file dari direktori Libs ke folder root VS2017:
Ke folder lain, termasuk folder Libs (RecursiveDir)
sumber
Tampaknya di VisualStudio 2015 bahwa jika dll yang Anda 'tambahkan dengan tautan' berada dalam subfolder dari proyek yang sama - mereka akan secara otomatis meletakkan folder, dan hasilnya juga ditempatkan di folder seperti yang Anda lihat.
Jika dll berada di proyek atau direktori lain pada disk yang tidak berada dalam subfolder dari proyek tersebut , Anda dapat 'Menambahkan dengan tautan', dan semuanya akan diletakkan di direktori root dengan baik.
sumber
Metode alternatif adalah membiarkan item sebagai tipe
None
. Di explorer solusi, klik yang ingin Anda terapkan dan setelContent
propertinyaTrue
.Catatan: Saya melakukan ini di VS2019, dan banyak hal dapat berubah dari versi ke versi.
Untuk membuatnya bekerja, sekarang klik kanan pada proyek Anda, dan pilih "Unload Project". Kemudian klik kanan pada proyek yang dibongkar dan pilih "Edit project_name.vcxproj".
Di editor, pergi ke bagian bawah file dan masukkan target ini tepat sebelum
</Project>
tag tambahan:Sekarang klik kanan pada proyek yang dibongkar dan pilih "Reload Project". Pilih untuk menyimpan dan menutup jika Anda diminta.
Saya juga menyetel
OutputDirectory
ke:$(SolutionDir)bin\$(Configuration)\$(Platform)\
dan
IntermediateDirectory
ke:$(SolutionDir)obj\$(Configuration)\$(ProjectName)\$(Platform)\
di halaman Project Properties General. Ini menempatkan output dalam folder "bin", dan perantara dalam folder "obj" di root solusi Anda.
Catatan: Tidak
$(SolutionDir)
ditentukan saat Anda menjalankan MSBuild dari baris perintah. Ada trik yang dapat Anda gunakan untuk menentukannya ke folder tempat file .sln berada menggunakan GetDirectoryNameOfFileAbove. (kiri sebagai latihan untuk pembaca). Juga, sepertinya pada tahun 2019 mereka menangani ini dengan benar di baris perintah. Ya :) The$(SolutionDir)
berisi garis miring terbalik, maka tidak ada setelah itu. Hasil dari masing-masing harus memiliki garis miring terbalik.Sekarang, jika Anda memiliki Pro atau lebih tinggi, jangan lakukan ini setiap kali Anda perlu membuat proyek. Itu akan payah. Sebaliknya, setelah Anda menyiapkan proyek sesuai keinginan Anda, pilih
Project -> Export Template
. Anda memberinya nama, dan lain kali Anda ingin membuat proyek seperti itu, cukup pilih nama itu di dialog Proyek Baru. (Dalam versi yang lebih lama, saya pikir iniFiles -> Export Teamplate...
.)sumber
Saya memiliki masalah yang sama dengan Visual Studio 2010 / C # Project.
Untuk rakitan (yaitu memiliki antarmuka .NET) gunakan folder "Referensi" di bawah proyek Anda di Solution Explorer. Klik kanan, pilih "Tambahkan item yang ada" dan temukan rakitan .dll Anda.
File .dll umum dapat ditempatkan dalam subfolder (seperti "\ lib" disebutkan di atas) dan di properti pilih:
Ini bekerja untuk saya persis seperti yang diinginkan - selama pembuatan, .DLL disalin ke direktori keluaran tanpa subfolder "\ lib".
sumber