Saat ini saya sedang mengembangkan aplikasi .NET, yang terdiri dari 20 proyek. Beberapa dari proyek tersebut dikompilasi menggunakan .NET 3.5, beberapa lainnya masih .NET 2.0 proyek (sejauh ini tidak ada masalah).
Masalahnya adalah bahwa jika saya memasukkan komponen eksternal saya selalu mendapatkan peringatan berikut:
"Found conflicts between different versions of the same dependent assembly".
Apa sebenarnya arti peringatan ini dan apakah mungkin ada kemungkinan untuk mengecualikan peringatan ini (seperti menggunakan #pragma disable di file kode sumber)?
Jawaban:
Peringatan ini berarti bahwa dua proyek mereferensikan perakitan yang sama (misalnya
System.Windows.Forms
) tetapi kedua proyek tersebut membutuhkan versi yang berbeda. Anda punya beberapa pilihan:Kompilasi ulang semua proyek untuk menggunakan versi yang sama (mis. Pindahkan semua ke .Net 3.5). Ini adalah opsi yang lebih disukai karena semua kode berjalan dengan versi dependensi yang dikompilasi dengannya.
Tambahkan pengalihan yang mengikat . Ini akan menekan peringatan. Namun, proyek .Net 2.0 Anda akan (saat runtime) terikat ke versi .Net 3.5 dari kumpulan bergantung seperti
System.Windows.Forms
. Anda dapat dengan cepat menambahkan pengalihan yang mengikat dengan mengklik dua kali pada kesalahan di Visual Studio.Gunakan
CopyLocal=true
. Saya tidak yakin apakah ini akan menekan peringatan. Ini akan, seperti opsi 2 di atas, berarti bahwa semua proyek akan menggunakan versi .Net 3.5 dari System.Windows.Forms.Berikut adalah beberapa cara untuk mengidentifikasi referensi yang menyinggung:
sumber
Pada dasarnya ini terjadi ketika majelis yang Anda rujuk memiliki "Salin Lokal" diatur ke "Benar", yang berarti bahwa salinan DLL ditempatkan di folder tempat sampah bersama dengan exe Anda.
Karena Visual Studio juga akan menyalin semua dependensi rakitan yang direferensikan, mungkin saja berakhir dengan dua build berbeda dari rakitan yang sama yang dirujuk. Ini lebih mungkin terjadi jika proyek Anda berada dalam solusi terpisah, dan karenanya dapat dikompilasi secara terpisah.
Cara saya mengatasinya adalah dengan mengatur Salin Lokal ke Salah untuk referensi dalam proyek perakitan. Hanya lakukan untuk aplikasi yang dapat dieksekusi / web di mana Anda memerlukan perakitan untuk menjalankan produk jadi.
Harapan itu masuk akal!
sumber
Saya ingin memposting solusi pauloya yang mereka berikan di komentar di atas. Saya percaya ini adalah solusi terbaik untuk menemukan referensi yang menyinggung.
Misalnya, ketika Anda mencari "konflik" di panel output Anda mungkin menemukan sesuatu seperti ini:
Seperti yang Anda lihat, ada konflik antara EF versi 5 dan 6.
sumber
update-package [your package name] -version 6.0.0 -reinstall
jawaban saya di sini stackoverflow.com/questions/22685530/…Saya memiliki masalah yang sama dengan salah satu proyek saya, namun, tidak satu pun di atas yang membantu menyelesaikan peringatan. Saya memeriksa detail logfile build, saya menggunakan AsmSpy untuk memverifikasi bahwa saya menggunakan versi yang benar untuk setiap proyek dalam solusi yang terpengaruh, saya mengecek entri yang sebenarnya di setiap file proyek - tidak ada yang membantu.
Akhirnya ternyata masalahnya adalah ketergantungan yang bersarang dari salah satu referensi yang saya miliki dalam satu proyek. Referensi ini (A) pada gilirannya memerlukan versi (B) yang berbeda yang direferensikan langsung dari semua proyek lain dalam solusi saya. Memperbarui referensi dalam proyek yang dirujuk menyelesaikannya.
Saya harap penjelasan di atas menunjukkan apa yang saya maksud, butuh beberapa jam untuk mencari tahu, jadi semoga orang lain juga mendapat manfaat.
sumber
Pada Visual Studio jika Anda klik kanan pada solusi dan Kelola paket nuget ada tab "Konsolidasi" yang mengatur semua paket ke versi yang sama.
sumber
Saya baru saja menerima pesan peringatan ini dan membersihkan solusinya dan mengkompilasi ulang (Build -> Clean Solution) dan hilang.
sumber
Saya memiliki masalah yang sama dan saya menyelesaikannya dengan mengubah yang berikut di web.config.
Itu terjadi pada saya karena saya menjalankan aplikasi menggunakan Newtonsoft.Json 4.0
Dari:
Untuk:
sumber
Saya punya cara lain untuk melakukan ini jika Anda menggunakan Nuget untuk mengelola dependensi Anda. Saya menemukan bahwa kadang-kadang VS dan Nuget tidak cocok dan Nuget tidak dapat mengenali bahwa proyek Anda tidak sinkron. Packages.config akan mengatakan satu hal tetapi jalur yang ditunjukkan dalam Referensi - Properti akan menunjukkan sesuatu yang lain.
Jika Anda ingin memperbarui dependensi Anda, lakukan hal berikut:
Dari Solution Explorer, klik kanan Proyek dan klik 'Kelola Paket Nuget'
Pilih tab 'Paket yang terinstal' di panel kiri. Rekam paket yang Anda instal. Anda mungkin ingin menyalin paket Anda. Konfigurasikan ke desktop Anda terlebih dahulu jika Anda memiliki banyak, sehingga Anda dapat mengeceknya dengan Google untuk melihat apa pkgs Nuget yang diinstal
Copot paket Anda. Tidak apa-apa, kita akan menambahkannya kembali.
Segera instal paket yang Anda butuhkan. Apa yang akan dilakukan Nuget tidak hanya membuat Anda mendapatkan versi terbaru, tetapi juga akan mengubah referensi Anda, dan juga menambahkan pengalihan yang mengikat untuk Anda.
Lakukan ini untuk semua proyek Anda.
Pada level solusi, lakukan Clean and Rebuild.
Anda mungkin ingin memulai dengan proyek yang lebih rendah dan bekerja dengan cara yang lebih tinggi, dan membangun kembali setiap proyek sambil berjalan.
Jika Anda tidak ingin memperbarui dependensi Anda, maka Anda dapat menggunakan konsol pengelola paket, dan menggunakan sintaks Pembaruan-Paket -ProjectName [namaProyek] [namaProject] -Versi [versionNumber]
sumber
Ini sebenarnya tergantung pada komponen eksternal Anda. Ketika Anda mereferensikan komponen eksternal dalam aplikasi .NET itu menghasilkan GUID untuk mengidentifikasi komponen itu. Kesalahan ini terjadi ketika komponen eksternal yang direferensikan oleh salah satu proyek Anda memiliki nama yang sama dan versi yang berbeda dengan komponen lain di majelis lain.
Ini kadang-kadang terjadi ketika Anda menggunakan "Browse" untuk menemukan referensi dan menambahkan versi perakitan yang salah, atau Anda memiliki versi komponen yang berbeda dalam repositori kode Anda seperti yang Anda instal di mesin lokal.
Cobalah untuk menemukan proyek mana yang memiliki konflik ini, hapus komponen dari daftar referensi, lalu tambahkan lagi memastikan Anda menunjuk ke file yang sama.
sumber
=> periksa akan ada beberapa contoh aplikasi yang diinstal sebagian.
=> pertama-tama hapus instalan itu dari aplikasi uninstall.
=> lalu, bersihkan, Bangun kembali, dan coba gunakan.
ini memecahkan masalah saya. Semoga ini membantu Anda juga. Salam Hormat.
sumber
Juga memiliki masalah ini - dalam kasus saya itu disebabkan oleh memiliki properti "Versi Khusus" pada sejumlah referensi yang disetel ke true. Mengubah ini menjadi salah pada referensi tersebut menyelesaikan masalah.
sumber
Jika menggunakan NuGet yang harus saya lakukan adalah:
klik kanan proyek dan klik Kelola Paket NuGet ..
klik roda gigi di kanan atas
klik tab Umum di Pengelola Paket NuGet di atas Sumber Paket
centang "Lewati Menerapkan pengalihan yang mengikat" di Binding Redirects
Bersihkan dan bangun kembali dan peringatan itu hilang
Peasy mudah
sumber
Saya baru saja menghabiskan waktu men-debug masalah yang sama. Catatan, masalah itu mungkin bukan antara proyek yang berbeda, tetapi sebenarnya antara beberapa referensi dalam satu proyek yang bergantung pada versi berbeda dari dll / perakitan yang sama. Dalam kasus saya, masalah adalah
FastMember.dll
versi referensi yang tidak cocok yang berasal dari dua paket NuGet yang berbeda dalam satu proyek. Ketika saya diberi proyek, itu tidak akan dikompilasi karena paket NuGet hilang dan VS menolak untuk mengembalikan paket yang hilang. Melalui menu NuGet, saya memperbarui secara manual semua NuGets ke versi terbaru, saat itulah peringatan muncul.Di Visual Studio
Tools > Options > Build and Run > MSBuld Project build output verbosity: (set to) Diagnostics.
Cari barisThere was a conflict between
diOutput
jendela. Di bawah ini adalah bagian dari output yang saya dapatkan:Perhatikan itu
Project file item includes which caused reference "C:\Users\ksd3jvp\Source\Temp\AITool\Misra\AMSAITool\packages\ClosedXML.0.94.2\lib\net46\ClosedXML.dll"
ClosedXML.dll
berasal dariClosedXML
NuGet dan itu tergantung padaFastMember.dll 1.3.0.0
. Di atas itu, ada jugaFastMember
Nuget di proyek, dan ituFastMember.dll 1.5.0.0
. Ketidakcocokan!Saya telah mencopot
ClosedXML
&FastMember
NuGets, karena saya telah mengikat pengalihan dan menginstal hanya versi terbaru dariClosedXML
Itu memperbaiki masalah!sumber
Ini juga terjadi pada saya. Satu dll direferensikan dua kali: sekali secara langsung (dalam referensi) dan sekali tidak langsung (dirujuk oleh proyek referensi lain). Saya menghapus referensi langsung, membersihkan & membangun kembali solusi. Masalah diperbaiki.
sumber
Dalam kasus saya, ada masalah dengan referensi MySQL. Entah bagaimana, saya bisa mendaftar tiga versi di bawah daftar semua referensi yang tersedia; untuk .net 2.0, .net 4.0 dan .net 4.5. Saya mengikuti proses 1 hingga 6 di atas dan itu berhasil untuk saya.
sumber
Hal lain yang perlu dipertimbangkan dan diperiksa adalah, pastikan Anda tidak memiliki layanan yang menggunakan folder bin itu. jika mereka menghentikan layanan dan membangun kembali solusi
sumber
Tampaknya ada masalah pada Mac Visual Studio saat mengedit file .resx. Saya tidak benar-benar tahu apa yang terjadi, tetapi saya mendapatkan masalah ini segera setelah saya mengedit beberapa file .resx pada Mac saya. Saya membuka proyek di Windows, membuka file dan seolah-olah belum diedit. Jadi saya mengeditnya, menyimpan, dan semuanya mulai bekerja lagi di Mac juga.
sumber
Saya memiliki masalah seperti itu ketika proyek saya memiliki referensi ke NETStandardLibrary dan salah satu majelis referensi diterbitkan untuk netcore. Baru saja mempublikasikannya sebagai netstandard dan masalah telah hilang
sumber
Inilah solusinya, gaya .NET Core 3.0: https://github.com/HTD/ref-check
Ketika Anda menemukan konflik apa, mungkin Anda akan dapat menyelesaikan konflik tersebut. Jika referensi yang bertentangan berasal dari paket lain, Anda kurang beruntung, atau Anda perlu menggunakan sumber.
Dalam kasus saya, paket-paket yang saling bertentangan seringkali milik saya sendiri, jadi saya bisa memperbaiki masalah ketergantungan dan menerbitkannya kembali.
sumber