Saya membuat proyek web ASP.NET MVC 5 baru di VS 2013 (Pembaruan 1) kemudian memperbarui semua paket NuGet. Saat saya membangun proyek, saya mendapatkan peringatan berikut:
peringatan MSB3243: Tidak ada cara untuk menyelesaikan konflik antara "Newtonsoft.Json, Version = 6.0.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed" dan "Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed".
Namun, ketika saya memeriksa web.config, saya melihat bahwa pengalihan yang mengikat sudah ada:
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
</dependentAssembly>
Itulah yang disarankan peringatan itu.
Bagaimana cara memperbaiki peringatan ini?
Jawaban:
Berikut langkah-langkah yang saya gunakan untuk memperbaiki peringatan:
sumber
install.ps1
Saya mengalami masalah ini karena saya memperbarui paket, termasuk Microsoft.AspNet.WebApi yang memiliki referensi ke Newtonsoft.Json 4.5.6 dan saya sudah menginstal versi 6. Tidak cukup pintar untuk menggunakan versi 6.
Untuk mengatasinya, setelah pembaruan WebApi saya membuka Tools> NuGet Package Manager> Pacakge Manager Console dan menjalankan:
Update-Package Newtonsoft.Json
Log menunjukkan bahwa versi 6.0.x dan 4.5.6 semuanya diperbarui ke yang terbaru dan semuanya baik-baik saja.
Saya merasa ini akan muncul lagi.
sumber
Saya menemukan menghapus bagian ini dari file proyek memperbaiki masalah.
<ItemGroup> <Reference Include="Newtonsoft.Json"> <HintPath>..\packages\Newtonsoft.Json.6.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> </Reference>
sumber
Jika tidak ada satu pun cara di atas yang berfungsi, coba gunakan ini di web.config atau app.config:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/> </dependentAssembly> </assemblyBinding> </runtime>
sumber
Saya meningkatkan dari Newtonsoft.Json 11.0.1 ke 12.0.2. Membuka file proyek di Notepad ++ saya menemukan keduanya
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath> </Reference>
dan
<ItemGroup> <Reference Include="Newtonsoft.Json"> <HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> </Reference> </ItemGroup>
Saya menghapus ItemGroup yang membungkus referensi dengan jalur petunjuk ke versi 11.0.1.
Masalah ini bisa sangat menjengkelkan untuk ditemukan. Terlebih lagi, pengembang sering mengikuti langkah yang sama seperti penyiapan proyek sebelumnya. Pengaturan sebelumnya tidak mengalami masalah. Untuk alasan apa pun, file proyek terkadang tidak diperbarui dengan benar.
Saya sangat berharap Microsoft akan memperbaiki masalah neraka DLL studio visual ini dari bermunculan. Ini terjadi terlalu sering dan menyebabkan kemajuan berhenti sampai diperbaiki, seringkali dengan coba-coba.
sumber
Solusi terakhir untuk kesalahan pengalihan perakitan Anda
Oke, semoga ini membantu menyelesaikan setiap ketidaksesuaian referensi perakitan (waras) ...
Bersuka cita.
sumber
Ingatlah bahwa dengan pengalihan mengikat
Anda mengatakan bahwa versi lama dll adalah antara versi 0.0.0.0 dan versi 6.0.0.0.
sumber
oldVersion
sebenarnya sedikit keliru di sini, yang Anda katakan adalah bahwa assembly / exe Anda dibangun dengan referensi ke versi dalam kisaran0.0.0.0-6.0.0.0
dan bahwa versi yang benar-benar diinstal (dan lebih disukai) adalah nilai di bawahnewVersion
(versi lama akan lebih baik diutarakan sebagai "versi yang diharapkan" dan versi baru akan lebih baik diungkapkan sebagai "sebenarnya versi yang tersedia")Tidak ada yang menyebutkan hal berikut, yang menurut pemahaman saya adalah solusi yang tepat:
Pergi ke csproj proyek tempat nuget dipasang, dan setel
AutoGEneratedBindingRedirects
kefalse
.<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
Artikel lengkap di MSDN.
sumber
Saya memperbarui paket saya dan bahkan menginstalnya kembali - tetapi saya masih mendapatkan kesalahan yang sama persis dengan yang disebutkan OP. Saya secara manual mengedit dll yang direferensikan dengan melakukan hal berikut.
Saya menghapus newtonsoft.json.dll dari referensi saya, kemudian secara manual menghapus .dll dari bin directoy. Kemudian saya secara manual menyalin newtonsoft.json.dll dari folder paket nuget ke dalam bin proyek, kemudian menambahkan referensi dengan browsing ke file .dll.
Sekarang proyek saya dibangun lagi.
sumber
Saya memiliki masalah serupa dan hanya ingin memposting jawaban untuk orang lain dalam situasi saya.
Saya memiliki solusi yang menjalankan Aplikasi Web ASP.NET dengan beberapa proyek lib kelas C # lainnya.
Aplikasi Web ASP.NET saya tidak menggunakan json, tetapi proyek lain di mana.
Beginilah cara saya memperbaikinya:
Langkah 2 adalah pertama-tama menambahkan informasi konfigurasi untuk json, yang menyarankan bahwa semua proyek, gunakan versi terbaru (6) tidak peduli versi apa yang mereka miliki. Menambahkan assembly binding ke Web.Config kemungkinan besar adalah perbaikannya.
Namun, langkah 2 juga membersihkan beberapa kode lama. Ternyata kami sebelumnya telah menggunakan versi lama (5) json di Aplikasi Web kami dan folder NuGet tidak dihapus ketika referensi (saya curiga: secara manual) dihapus. Menambahkan json terbaru (6), menghapus folder lama (json v5). Ini mungkin bagian dari perbaikan juga.
sumber
Veverke menyebutkan bahwa dimungkinkan untuk menonaktifkan pembuatan pengalihan yang mengikat dengan menyetel AutoGEneratedBindingRedirects ke false. Tidak yakin apakah ini hal baru sejak pertanyaan ini dikirim, tetapi ada opsi "Lewati penerapan pengalihan pengikatan" di Alat / Opsi / Nuget Packet Manager, yang dapat diubah. Secara default tidak aktif, yang berarti pengalihan akan diterapkan. Namun jika Anda melakukan ini, Anda harus mengelola pengalihan pengikatan yang diperlukan secara manual.
sumber