Solusi .NET 3.5 berakhir dengan peringatan ini saat kompilasi dengan msbuild.
Terkadang NDepend mungkin membantu tetapi dalam kasus ini tidak memberikan rincian lebih lanjut. Seperti Bob, saya akhirnya harus membuka setiap majelis di ILDASM sampai saya menemukan yang merujuk versi yang lebih lama dari majelis dependen.
Saya memang mencoba menggunakan MSBUILD dari VS 2010 Beta 2 (seperti yang ditunjukkan artikel Connect ini diperbaiki dalam versi CLR berikutnya) tetapi itu tidak memberikan rincian lebih lanjut baik (mungkin memperbaiki postingan Beta 2)
Apakah ada pendekatan yang lebih baik (lebih otomatis)?
Jawaban:
Ubah "proyek MSBuild build verbosity output" menjadi "Detail" atau lebih tinggi. Untuk melakukan ini, ikuti langkah-langkah ini:
Di halaman alat / opsi yang muncul, atur tingkat proyek verbosity output membangun MSBuild ke pengaturan yang sesuai tergantung pada versi Anda:
Lihat pesan MSBuild. The
ResolveAssemblyReferences
tugas, yang merupakan tugas dari yang MSB3247 berasal, akan membantu Anda debug isu ini.Kasus spesifik saya adalah referensi yang salah untuk SqlServerCe. Lihat di bawah. Saya punya dua proyek referensi dua versi SqlServerCe yang berbeda. Saya pergi ke proyek dengan versi yang lebih lama, menghapus referensi, lalu menambahkan referensi yang benar.
Anda tidak harus membuka setiap majelis untuk menentukan versi majelis yang dirujuk.
sumber
Mike Hadlow telah memposting aplikasi konsol kecil bernama AsmSpy yang dengan lebih baik mencantumkan referensi setiap rakitan:
Ini adalah cara yang jauh lebih cepat untuk sampai ke bagian bawah MSB3247 peringatan, daripada bergantung pada output MSBuild.
sumber
Kadang-kadang jawaban @ AMissico tidak cukup. Dalam kasus saya, saya tidak dapat menemukan kesalahan di jendela Output jadi saya memutuskan untuk membuat file log dan menganalisisnya, dengan melakukan langkah-langkah berikut:
Menyimpan build log ke file ... https://msdn.microsoft.com/en-us/library/ms171470.aspx
msbuild MyProject.proj /fl /flp:logfile=MyProjectOutput.log;verbosity=detailed
Temukan teks:
warning MS...
atau info peringatan spesifik: (mis. Baris 9293)Found conflicts between different versions...
dan detail lengkap kesalahan konflik akan berada di atas pesan ini (mis. Baris 9277)There was a conflicts between...
Visual Studio 2013
sumber
Saya menemukan bahwa (setidaknya dalam Visual Studio 2010) Anda perlu mengatur verbositas output ke setidaknya Detail untuk dapat menemukan masalah.
Mungkin masalah saya adalah referensi yang sebelumnya merupakan referensi GAC, tapi itu tidak lagi terjadi setelah mesin saya instal ulang.
sumber
Saya memiliki kesalahan yang sama dan tidak bisa mengatasinya dengan jawaban yang lain. Saya menemukan bahwa kita dapat "Mengkonsolidasikan" paket NuGet.
sumber
Peringatan ini dihasilkan untuk standar ASP.NET MVC 4 beta lihat di sini
sumber
Gunakan pembaca ketergantungan
Dengan menggunakan dep.exe Anda dapat mencantumkan semua dependensi bersarang dari seluruh folder. Dikombinasikan dengan alat unix seperti grep atau awk, ini dapat membantu Anda untuk menyelesaikan masalah Anda
Menemukan majelis yang dirujuk dalam lebih dari satu versi
Baris perintah yang tidak jelas ini menjalankan dep.exe kemudian mengirimkan output dua kali ke awk
Memahami bagaimana perakitan ini ditarik ke tempat sampah Anda
Dalam contoh ini, alat ini akan menunjukkan kepada Anda bahwa System.Web.Http 5.2.3 berasal dari ketergantungan Anda ke FooLib sedangkan versi 4.0.0 berasal dari BarLib.
Maka Anda memiliki pilihan di antara
Cara menjalankan hal ini di Windows
Jika Anda tidak memiliki shell tipe unix, Anda harus mengunduhnya sebelum dapat menjalankan
awk
dangrep
. Coba salah satu dari yang berikut inisumber
Saya punya masalah ini juga dan menggunakan saran AMissico juga menemukan masalah (Meskipun harus mengatur tingkat verbosity ke Detail.
Masalahnya sebenarnya cukup lurus ke depan meskipun setelah menemukan pelakunya.
Latar Belakang: Saya memutakhirkan proyek saya dari VS2008 ke VS2010. Dalam VS2008 kerangka kerja target adalah 3,5 dan ketika saya membawanya ke VS2010 saya mengubahnya menjadi 4 (Penuh). Saya juga memutakhirkan beberapa komponen pihak ketiga termasuk laporan Crystal.
Ternyata sebagian besar referensi Sistem di mana menunjuk pada versi 4.0.0.0 tetapi pasangan belum secara otomatis berubah (Sistem dan System.Web. Layanan) dan masih melihat 2.0.0.0. Laporan Crystal merujuk pada 4.0.0.0 dan di sinilah konflik terjadi. Cukup dengan meletakkan kursor di pustaka sistem pertama di explorer solusi, kursor ke bawah daftar dan mencari referensi ke 2.0.0.0, menghapus dan menambahkan kembali versi 4.0.0.0 yang lebih baru melakukan trik.
Yang aneh adalah bahwa sebagian besar referensi telah diperbarui dengan benar dan jika bukan karena laporan Crystal, saya mungkin tidak akan pernah memperhatikan ...
sumber
Saya membuat aplikasi berdasarkan aplikasi Mike Hadlow: AsmSpy .
Aplikasi saya adalah aplikasi WPF dengan GUI dan dapat diunduh dari server web rumah saya: AsmSpyPlus.exe .
Kode tersedia di: GitHub
sumber
Seperti yang disebutkan di sini , Anda perlu menghapus referensi yang tidak digunakan dan peringatan akan pergi.
sumber
ASP.NET build manager membangun situs web dengan menelusuri folder-folder secara alfabet, dan untuk setiap folder, ia menentukan dependensi dan membangun dependensi terlebih dahulu, kemudian folder yang dipilih.
Dalam hal ini folder yang bermasalah yaitu ~ / Kontrol, dipilih untuk dibangun di awal, dari alasan yang belum diketahui, ia membangun beberapa kontrol di sana sebagai rakitan terpisah alih-alih di dalam rakitan yang sama dengan kontrol lainnya (tampaknya terhubung ke fakta bahwa beberapa kontrol tergantung pada kontrol lain di folder yang sama).
Kemudian folder berikutnya yang dibangun (~ / File-Center / Control) tergantung pada folder root ~ / yang bergantung pada ~ / Kontrol, sehingga folder ~ / Kontrol sedang dibangun lagi hanya kali ini kontrol yang dipisahkan ke rakitan mereka sendiri sekarang bergabung dengan rakitan yang sama dengan kontrol lain dengan rakitan yang terpisah masih dirujuk.
Jadi pada titik ini, rakitan 2 (setidaknya) memiliki kontrol yang sama dan build gagal.
Meskipun kami masih tidak tahu mengapa ini terjadi, kami dapat mengatasinya dengan mengubah nama folder Kontrol menjadi ZControls, cara ini tidak dibangun sebelum ~ / File-Center / Control, hanya setelah dan dengan cara ini dibangun seperti seharusnya.
sumber
Perbaikan Cepat:
Klik kanan pada solusi -> Kelola paket NuGet untuk solusi -> Di bawah Konsolidasi Anda dapat melihat apakah ada versi berbeda dari paket yang sama diinstal. Copot versi yang berbeda dan instal versi terbaru.
sumber
Terkadang
AutoGenerateBindingRedirects
tidak cukup (bahkan denganGenerateBindingRedirectsOutputType
). Mencari semuaThere was a conflict
entri dan memperbaikinya secara manual satu per satu bisa membosankan, jadi saya menulis sepotong kecil kode yang mem-parsing keluaran log dan menghasilkannya untuk Anda (sesuai denganstdout
):Tip: gunakan MSBuild Binary dan Structured Log Viewer dan hanya menghasilkan pengalihan yang mengikat untuk konflik dalam proyek yang memancarkan peringatan (yaitu, hanya melewati
there was a conflict
baris tersebut ke file teks input untuk kode di atas [AssemblyConflicts.txt
]).sumber
Cara paling sederhana tanpa tanpa memperhitungkan ketergantungan (internal):
Dalam kasus saya, ada masalah dengan referensi MySQL. Entah bagaimana, saya bisa mendaftar tiga versi di bawah daftar semua referensi yang tersedia. Saya mengikuti proses 1 hingga 6 di atas dan itu berhasil untuk saya.
sumber
Penambahan Visual Studio untuk Komunitas Mac:
Karena jawaban AMissico mengharuskan perubahan tingkat log, dan ASMSpy maupun ASMSpyPlus tidak tersedia sebagai solusi lintas-platform, berikut ini adalah tambahan singkat untuk Visual Studio untuk Mac:
Ada di Komunitas Visual Studio → Preferensi ... → Proyek → Buat Log → verbosity
sumber
Jika Anda memiliki resharper, hapus semua referensi yang tidak digunakan pada solusi Anda.
sumber