Saya punya solusi studio visual. Saya punya banyak proyek dalam solusinya. Ada satu proyek utama yang bertindak sebagai permulaan dan menggunakan proyek lain. Ada satu proyek yang mengatakan "ProjectX". Rujukannya ditambahkan ke proyek utama. The ProjectX referensi lain .NET dll (katakanlah abc.dll) yang bukan bagian dari solusi.
Sekarang abc.dll ini harus disalin ke folder bin / debug proyek utama, tetapi tidak disalin di sana. Mengapa tidak disalin, ada alasan yang diketahui?
RestoreProjectStyle
solusi yang tersedia . Idenya adalah mengatur<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
untuk setiap proyek .Net Framework dalam solusinya.Jawaban:
Saya menemukan bahwa jika ProjectX mereferensikan abc.dll tetapi tidak secara langsung menggunakan salah satu tipe yang didefinisikan dalam abc.dll, maka abc.dll TIDAK akan disalin ke folder output utama. (Ini akan disalin ke folder keluaran ProjectX, untuk membuatnya sangat membingungkan.)
Jadi, jika Anda tidak secara eksplisit menggunakan salah satu jenis dari abc.dll di mana saja di ProjectX, maka letakkan deklarasi dummy di suatu tempat di salah satu file di ProjectX.
Anda tidak perlu melakukan ini untuk setiap kelas - sekali saja cukup untuk membuat salinan DLL dan semuanya berfungsi seperti yang diharapkan.
Tambahan: Perhatikan bahwa ini mungkin bekerja untuk mode debug, tetapi BUKAN untuk rilis. Lihat jawaban @ nvirth untuk detailnya.
sumber
Hanya sidenote jawaban Overlord Zurg.
Saya telah menambahkan referensi dummy dengan cara ini, dan itu berfungsi dalam mode Debug:
Tetapi dalam mode Release, dll tergantung masih tidak bisa disalin.
Namun ini berhasil:
Informasi ini sebenarnya menghabiskan waktu berjam-jam untuk mencari tahu, jadi saya pikir saya membagikannya.
sumber
AbcDll.AnyClass
digunakan sebagai bidang publik atau properti di kelas publik, maka itu akan berhasil. Jika Anda menggunakannya dalam tubuh metode seperti ini kompiler tidak melihatnya . Ini akan menunda memuat rakitan ini, bukan apa yang Anda inginkan terjadi.Ya, Anda harus mengatur
Copy Local
ketrue
. Namun, aku cukup yakin Anda juga harus referensi yang perakitan dari proyek utama dan setCopy Local
untuktrue
juga - itu tidak hanya disalin dari perakitan tergantung.Anda dapat pergi ke
Copy Local
properti dengan mengklik rakitan di bawahReferences
dan menekan F4.sumber
Ini terlihat apik ketika Anda membuatnya menjadi atribut perakitan
Penggunaannya akan:
sumber
Berlari ke masalah yang sama ini. Info latar belakang: sebelum membangun, saya telah menambahkan Project X baru ke solusinya. Proyek Y tergantung pada Proyek X dan Proyek A, B, C tergantung pada Proyek Y.
Kesalahan build adalah bahwa proyek, A, B, C, Y, dan X dll tidak dapat ditemukan.
Penyebab root adalah bahwa Proyek X yang baru dibuat menargetkan .NET 4.5 sedangkan sisanya dari proyek solusi menargetkan .NET 4.5.1. Proyek X tidak membangun menyebabkan sisa Proyek tidak membangun juga.
Pastikan setiap Proyek yang baru ditambahkan menargetkan versi .NET yang sama dengan solusi lainnya.
sumber
Tidak yakin apakah ini membantu tetapi bagi saya, berkali-kali saya merujuk DLL (yang secara otomatis menambahkannya ke folder bin tentu saja). Namun DLL itu mungkin memerlukan DLL tambahan (tergantung pada fungsi apa yang saya gunakan). Saya TIDAK ingin referensi yang ada di Proyek saya karena mereka hanya perlu berakhir di folder yang sama dengan DLL yang sebenarnya saya gunakan.
Saya melakukannya di Visual Studio dengan "Menambahkan file yang ada". Anda harus dapat menambahkannya di mana saja kecuali folder Add_data. secara pribadi saya hanya menambahkannya ke root.
Kemudian ubah properti file itu menjadi ...
Build Action = Tidak Ada (memiliki set ini untuk sesuatu seperti Konten benar-benar menyalin versi "root" ke root, ditambah salinan di Bin).
Salin ke folder keluaran = Salin jika Lebih Baru (Pada dasarnya menempatkannya di folder BIN hanya jika hilang, tetapi tidak melakukannya setelah itu)
Ketika saya mempublikasikan .. DLL tambahan saya hanya ada di folder BIN dan tidak ada tempat lain di lokasi Publikasikan (yang saya inginkan).
sumber
Anda juga dapat memeriksa untuk memastikan DLL yang Anda cari tidak termasuk dalam GAC. Saya percaya Visual Studio pintar tidak menyalin file-file itu jika sudah ada di GAC pada mesin build.
Saya baru-baru ini berlari dalam situasi ini di mana saya telah menguji paket SSIS yang membutuhkan rakitan untuk ada di GAC. Sejak itu saya lupa itu dan bertanya-tanya mengapa DLL itu tidak keluar saat membangun.
Untuk memeriksa apa yang ada di GAC (dari Prompt Perintah Pengembang Visual Studio):
Atau keluaran ke file untuk membuatnya lebih mudah dibaca:
Untuk menghapus unit:
Saya juga harus mencatat, bahwa setelah saya menghapus file-file dari GAC, mereka benar output di direktori \ bin setelah membangun (Bahkan untuk rakitan yang tidak secara langsung direferensikan dalam proyek root). Ini pada Visual Studio 2013 Pembaruan 5.
sumber
Dalam kasus saya, itu adalah hal yang paling bodoh, yang disebabkan oleh perilaku default TFS / VS yang tidak saya setujui.
Karena menambahkan dll sebagai referensi ke proyek utama tidak berhasil, saya memutuskan untuk menambahkannya sebagai "Item yang Ada", dengan Salin Lokal = Selalu. Bahkan kemudian file itu tidak ada di sana.
Ternyata itu, meskipun file hadir pada Solusi VS dan semuanya dikompilasi secara lokal dan di server, VS / TFS tidak menambahkan sebenarnya menambahkan file ke kontrol sumber. Sama sekali tidak termasuk dalam "Perubahan yang Ditangguhkan". Saya harus secara manual pergi ke Explorer Kontrol Sumber dan secara eksplisit klik ikon "Tambahkan item ke folder".
Bodoh karena saya sudah berkembang selama 15 tahun di VS. Saya pernah mengalami ini sebelumnya, saya hanya tidak ingat dan entah bagaimana saya melewatkannya karena semuanya masih dikompilasi karena file menjadi referensi biasa, tetapi file yang ditambahkan sebagai Item yang Ada tidak disalin karena tidak ada pada server kontrol sumber.
Saya harap ini menghemat waktu seseorang, karena saya kehilangan 2 hari hidup saya untuk ini.
sumber
gitignore
pola, jadi ketika menambahkan sebagai referensi itu tidak menambah proyek. Anda HARUS menambahkan file secara manual ke kontrol sumber !!!Ini adalah sedikit perubahan pada contoh nvirth
sumber
Saya akan menambahkannya ke acara Postbuild untuk menyalin pustaka yang diperlukan ke direktori keluaran. Sesuatu seperti XCopy pathtolibrary targetdirectory
Anda dapat menemukannya di properti proyek -> Bangun Acara.
sumber
Isu:
Menemukan masalah serupa untuk DLL paket NuGet (Newtonsoft.json.dll) di mana output build tidak termasuk DLL yang direferensikan. Tapi kompilasi berjalan lancar.
Memperbaiki:
Telusuri proyek Anda dalam editor teks dan cari referensi dengan tag di dalamnya. Suka Benar atau Salah. "Pribadi" adalah sinonim untuk "Salin Lokal." Di suatu tempat dalam tindakan, MSBuild mengambil untuk menemukan dependensi, ia menemukan ketergantungan Anda di tempat lain dan memutuskan untuk tidak menyalinnya.
Jadi, buka setiap file .csproj / .vbproj dan hapus tag secara manual. Rebuild, dan semuanya berfungsi di Visual Studio dan MSBuild. Setelah berhasil, Anda dapat kembali dan memperbarui ke tempat yang Anda pikir perlu.
Referensi:
https://www.paraesthesia.com/archive/2008/02/13/what-to-do-if-copy-local-works-in-vs-but.aspx/
sumber
TIDAK PERLU DUMMY DALAM KODE
Hanya:
atau / dan memastikan bahwa referensi dalam proyek yang dapat dieksekusi telah
"Copy Local"
disetel keTRUE
(yang merupakan " kesalahan " saya) tampaknya bahwa "menimpa" pengaturan di pangkalan-proyek referensi perpustakaan ...sumber
Jika Anda mengklik kanan rakitan yang direferensikan, Anda akan melihat properti yang disebut Salin Lokal . Jika Salin Lokal disetel ke true, maka perakitan harus disertakan dalam nampan. Namun , ada masalah dengan Visual studio, yang kadang-kadang tidak termasuk dll yang direferensikan dalam folder bin ... ini adalah solusi yang bekerja untuk saya:
sumber
TLDR; Visual Studio 2019 mungkin hanya perlu restart.
Saya mengalami situasi ini menggunakan proyek berdasarkan proyek Microsoft.NET.Sdk.
Secara khusus:
Project1
: target.netstandard2.1
Microsoft.Extensions.Logging.Console
melalui NugetProject2
: target.netstandard2.1
Project1
melalui referensi ProyekProject2Tests
: target.netcoreapp3.1
Project2
melalui referensi ProyekPada pelaksanaan pengujian, saya menerima pesan kesalahan yang menunjukkan bahwa
Microsoft.Extensions.Logging.Console
tidak dapat ditemukan, dan itu memang tidak ada di direktori output.Aku memutuskan untuk bekerja di sekitar masalah ini dengan menambahkan
Microsoft.Extensions.Logging.Console
untukProject2
, hanya untuk menemukan bahwa Visual Studio Nuget Manajer tidak daftarMicrosoft.Extensions.Logging.Console
sebagai dipasang diProject1
, meskipun kehadiran itu dalamProject1.csproj
berkas.Sederhana mematikan dan memulai kembali Visual Studio menyelesaikan masalah tanpa perlu menambahkan referensi tambahan. Mungkin ini akan menghemat seseorang 45 menit dari kehilangan produktivitas :-)
sumber
Anda dapat mengatur proyek utama dan membangun jalur output ProjectX ke folder yang sama, maka Anda bisa mendapatkan semua dll yang Anda butuhkan di folder itu.
sumber
Pastikan bahwa dll dependen yang digunakan oleh Anda tidak memiliki target .net framework lebih tinggi dari target .net framework dari aplikasi proyek Anda.
Anda dapat memeriksa ini dengan memilih proyek Anda, lalu tekan ALT + ENTER, lalu pilih Aplikasi dari sisi kiri dan kemudian pilih Target Framework dari proyek Anda.
Misalkan, dependen dll Target Framework = 4.0 dan Application dll Target Framework = 3.5 kemudian ubah ke 4.0
Terima kasih!
sumber
Selain yang umum di atas, saya punya solusi multi-proyek untuk diterbitkan. Rupanya beberapa file menargetkan kerangka kerja yang berbeda.
Jadi solusi saya: Properti> Versi Tertentu (Salah)
sumber
Tambahkan DLL sebagai item yang ada ke salah satu proyek dan harus diurutkan
sumber
VS2019 V16.6.3
Bagi saya masalahnya adalah entah bagaimana file .proj utama berakhir dengan entri seperti ini untuk proyek yang DLLnya tidak disalin ke folder bin proyek induk:
Saya secara manual menghapus baris
<Private>True</Private>
dan DLL kemudian disalin ke folder bin proyek utama pada setiap build dari proyek utama.Jika Anda pergi ke referensi proyek masalah di folder referensi proyek utama, klik dan lihat properti ada pengaturan "Salin Lokal". Tag pribadi sama dengan pengaturan ini, tetapi bagi saya untuk beberapa alasan mengubah salinan lokal tidak berpengaruh pada tag pribadi dalam file .proj.
Mengganggu saya tidak mengubah nilai salinan lokal untuk referensi, tidak tahu bagaimana itu bisa diatur seperti itu dan hari lain sia-sia melacak masalah bodoh dengan VS.
Terima kasih untuk semua jawaban lain yang membantu saya dalam menentukan penyebabnya.
HTH
sumber