Yeni bir ASP.NET MVC 5 projesinde NuGet paketi referanslarını güncelledikten sonra JSON.NET ile derleme sürümü çakışmalarını nasıl düzeltebilirim?


89

VS 2013'te (Güncelleme 1) yeni bir ASP.NET MVC 5 web projesi oluşturdum ve ardından tüm NuGet paketlerini güncelledim. Projeyi oluşturduğumda şu uyarıyı alıyorum:

uyarı MSB3243: "Newtonsoft.Json, Sürüm = 6.0.0.0, Kültür = nötr, PublicKeyToken = 30ad4fe6b2a6aeed" ve "Newtonsoft.Json, Sürüm = 4.5.0.0, Kültür = nötr, PublicKeyToken = 30ad4fe6b2a6aeed" arasındaki çakışmayı çözmenin bir yolu yok.

Ancak web.config dosyasını kontrol ettiğimde, bir bağlama yönlendirmesinin yerinde olduğunu görüyorum:

  <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>

Bu tam olarak uyarının önerdiği şeydir.

Bu uyarıyı nasıl düzeltebilirim?


Evet, tamamen yeniden inşa ettim. Ayrıca NuGet'i en son sürümüne güncelledim, yeni bir çözüm oluşturdum ve aynı sorunu yeniden ürettim.
Jim Kuzu

Yanıtlar:


106

Uyarıyı düzeltmek için kullandığım adımlar:

  • VS'de projeyi kaldır
  • .Csproj dosyasını düzenleyin
  • Newtonsoft.Json montajına yönelik tüm referansları arayın
    • İki, bir ila v6 ve bir ila v5 bulundu
    • V5 referansını v6 ile değiştirin
  • Projeyi yeniden yükle
  • Derleme referans hatası oluştur ve bildir
  • Referansları görüntüleyin ve artık Newtonsoft.Json için iki tane olduğunu görün. Çözülemeyen birini kaldırın.
  • Yeniden oluştur - uyarı yok

12
Biri v6 ve diğeri v5 için olmak üzere iki referans buldum, ancak v5'i sildim (değiştirmedim). Bundan sonra "montaj referans hatası" veya UI'de Newtonsoft.Json'a iki referans gibi herhangi bir sorun yaşamadım. Ben değilim tahmin birisi yukarı dolmasıinstall.ps1
ta.speot.is

Çözüm için teşekkürler. Ben de eski referansı proje dosyasından sildim ve hiçbir sorun yaşamadım.
Charles Prakash Dasari

31
+1 - Böyle şeyler yapmam gerektiğinde beni çıldırtıyor. Bu nedenle, nuget paket yöneticisinde yükseltmeyi tıklamaktan her zaman çekiniyorum.
hylander0

1
Bu sorunu yaşıyordum ve orada olduğunu fark etmediğim fazladan referansı kaldırarak düzelttim. Bu, fazladan referansın orada olmasının temel nedeni olan Microsoft Connect hatasına bağlantıdır: connect.microsoft.com/VisualStudio/feedback/details/816725/… .
Martin Costello

1
Benim durumumda, 6.0 sürümünden şikayetçi olmasına rağmen, Newtonsoft.Json 11.0.1 ve 11.0.2'nin iki farklı sürümüne referans vardı.
Daniel Lobo

31

Bu sorunu yaşadım çünkü Microsoft.AspNet.WebApi'yi içeren ve Newtonsoft.Json 4.5.6'ya başvuran ve zaten sürüm 6 yüklü olan paketleri güncelledim. Versiyon 6'yı kullanmak yeterince akıllıca değildi.

Bunu çözmek için WebApi güncellemesinden sonra Tools> NuGet Package Manager> Pacakge Manager Console'u açtım ve şunu çalıştırdım:

 Update-Package Newtonsoft.Json

Günlük, 6.0.x ve 4.5.6 sürümlerinin en son sürümle güncellendiğini ve her şeyin yolunda olduğunu gösterdi.

Bunun tekrar gündeme geleceğini hissediyorum.


1
Çözümümde birden fazla proje içeren birden fazla farklı sürüm sorunu yaşıyordum, bu tamamen düzeltildi ve hepsini en son JSON.net'e güncelledi. Güzel!
c0d3p03t

1
Bu, sorunumu çözen en kolay ve en dolaysız çözümdü. Teşekkürler!
youngrrrr

21

Bu bölümü proje dosyasından silip sorunu çözdüm.

<ItemGroup>
<Reference Include="Newtonsoft.Json">
  <HintPath>..\packages\Newtonsoft.Json.6.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>


Budur. Sanırım Newtonsoft.Json.6.0.1 / 6.0.3 / 6.0.5'in hiçbiri bağlayıcı yeniden yönlendirme ile eşleşmiyor '' oldVersion = "0.0.0.0-6.0.0.0" '' Ancak doğru olanı nasıl yazacağımı bilmiyorum
fantastory

Bu benim de sorunumdu, onu neyin eklediğinden emin değilim.
amnezi

Benim için çalıştı. V6.0 ve v12.0 arasındaki çakışma ile ilgili hata. Öğe grubu referansı v11.0 idi. Bu yüzden ne olduğundan emin değilim, ancak öğe grubunu kaldırmak, derleme hatasını ortadan kaldırana kadar sorunu çözmüş gibi görünüyor.
Brian.S

14

Newtonsoft.Json 11.0.1'den 12.0.2'ye yükselttim. Proje dosyasını Notepad ++ ile açarken ikisini de keşfettim

<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>

ve

<ItemGroup>
    <Reference Include="Newtonsoft.Json">
      <HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
    </Reference>
  </ItemGroup>

11.0.1 sürümünün ipucu yolu ile referansı saran ItemGroup'u sildim.

Bu sorunları bulmak delicesine sinir bozucu olabilir. Dahası, geliştiriciler genellikle önceki proje kurulumlarıyla aynı adımları izler. Önceki kurulumlar sorunla karşılaşmadı. Her ne sebeple olursa olsun proje dosyası zaman zaman yanlış güncellenir.

Umutsuzca Microsoft'un bu görsel stüdyo DLL cehennemi sorunlarını ortaya çıkmadan düzeltmesini diliyorum. Çok sık meydana gelir ve genellikle deneme yanılma yoluyla düzeltilinceye kadar ilerlemenin durmasına neden olur.


1
Sorun buydu. Teşekkürler!
George Fabish

1
Ayrıca iki giriş yaptım. Hem tam olarak aynı sürüm hem de bu hata. İkinci <Referans ... - Düğümü sildim ve mesaj gitti. Bu ipucu için teşekkürler!
Telefisch

13

Yukarıdakilerden hiçbiri işe yaramazsa, bunu web.config veya app.config içinde kullanmayı deneyin:

<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>

Bu, daha yüksek sürümü kullanan mevcut bir projeniz olduğunda ve aynı paketin daha eski bir sürümünü kullanan bir bağımlılık eklediğinizde, eski sürümü yenisine yönlendirdiğinizde en uygun olanıdır.
Ismail Hawayel

8

Montaj yönlendirme hatalarınızın nihai çözümü

Tamam, umarım bu, herhangi bir (mantıklı) montaj referansı tutarsızlığını çözmeye yardımcı olur ...

  1. Hatayı kontrol edin.

Web sitesinde gezinin

  1. Derleme yeniden yönlendirmesinden sonra web.config'i kontrol edin. Yoksa bir tane oluşturun.

Mevcut web.config derleme yeniden yönlendirmesi

  1. Montaj için referansa sağ tıklayın ve Özellikler'i seçin.

Referans listesinde, ilgili projede montaj

  1. Özellikler tablosunda Sürümü (Çalışma Zamanı sürümünü değil) kontrol edin. Anlaşıldı.

Montaj versiyonunu gösteren özellikler tablosu

  1. NewVersion niteliğine yapıştırın.

güncellenmiş newVersion ile web.config derleme yeniden yönlendirmesi

  1. Kolaylık sağlamak için, oldVersion'ın son bölümünü yüksek, yuvarlak ve hayali bir şeyle değiştirin.

güncellenmiş oldVersion ile web.config derleme yeniden yönlendirmesi

Sevin.


Bu cevap bana çok zaman kazandırdı! Özel bir C # kitaplığı kullanan bir web uygulamam vardı, her ikisi de aynı nuget paketini kullanıyordu, ancak web uygulaması kitaplıktan daha eski bir sürüme sahip ve yeniden yönlendirme kitaplığın kullandığı sürümü içermiyordu.
War Gravy

4

Unutmayın, bağlama yönlendirmesi ile

oldVersion = "0.0.0.0-6.0.0.0"

Dll'nin eski sürümlerinin 0.0.0.0 sürümleri ile 6.0.0.0 sürümleri arasında olduğunu söylüyorsunuz.


1
oldVersionAslında burada biraz yanlış bir isim var, söylediğiniz şey, assembly / exe'nizin aralıktaki bir sürüme referansla oluşturulmuş 0.0.0.0-6.0.0.0olması ve gerçekte kurulu (ve tercih edilen) sürümün altındaki değer olmasıdır newVersion(eski sürüm şu şekilde daha iyi ifade edilir: "beklenen sürüm" ve yeni sürüm, "mevcut mevcut sürüm" olarak daha iyi ifade edilir)
hiçbir şey gerekli değil

2

Hiç kimse aşağıdakilerden bahsetmedi, ki bu benim anlayışıma göre doğru çözüm:

Nuget yüklü olduğu projenin csproj gidin ve ayarlamak AutoGEneratedBindingRedirectsiçin false.

<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>

MSDN'deki tam makale.


1

Paketimi güncelledim ve hatta yeniden yükledim - ancak yine de belirtilen OP ile aynı hatayı alıyordum. Aşağıdakileri yaparak başvurulan dll'yi manuel olarak düzenledim.

Newtonsoft.json.dll dosyasını referansımdan kaldırdım, sonra .dll dosyasını bin dizininden el ile sildim. Daha sonra newtonsoft.json.dll dosyasını nuget paket klasöründen manuel olarak proje kutusuna kopyaladım, ardından .dll dosyasına göz atarak referansı ekledim.

Şimdi projem yeniden inşa ediliyor.


0

Benzer bir sorun yaşadım ve durumumdaki başkaları için bir cevap göndermek istedim.

Birden çok başka C # sınıfı kitaplık projesiyle ASP.NET Web Uygulaması çalıştıran bir çözümüm var.

ASP.NET Web Uygulamam json kullanmıyordu, ancak diğer projeler.

Ben böyle düzelttim:

  1. Şu anda herhangi bir json sürümünü kullanan tüm projelerde NuGet Güncellemesini kullanarak en son sürümü (6) kullanan tüm projelerde emin oldum - bu sorunu çözmedi
  2. NuGet kullanarak web uygulamasına json ekledim - bu sorunu çözdü (nedenini inceleyelim):

Adım 2, her şeyden önce json için, hangi sürüme sahip olursa olsun, tüm projelerin en son sürümü (6) kullanmasını öneren bir yapılandırma bilgisi eklemekti. Derleme bağlamasını Web.Config konsoluna eklemek büyük olasılıkla düzeltmedir.

Ancak, 2. adım aynı zamanda eski bir kodu da temizledi. Daha önce Web Uygulamamızda json'un eski bir sürümünü (5) kullandığımız ve referans (şüpheliyim: manuel olarak) kaldırıldığında NuGet klasörlerinin silinmediği ortaya çıktı. En son json (6) eklenerek eski klasörler (json v5) kaldırıldı. Bu da düzeltmenin bir parçası olabilir.


0

Veverke, AutoGEneratedBindingRedirects'i false olarak ayarlayarak bağlama yönlendirmelerinin oluşturulmasını devre dışı bırakmanın mümkün olduğunu belirtti. Bu soru gönderildikten sonra bunun yeni bir şey olup olmadığından emin değilim, ancak Araçlar / Seçenekler / Nuget Paket Yöneticisi'nde değiştirilebilen "Bağlama yönlendirmelerini uygulamayı atla" seçeneği vardır. Varsayılan olarak kapalıdır, yani yönlendirmeler uygulanacaktır. Ancak bunu yaparsanız, gerekli bağlama yönlendirmelerini manuel olarak yönetmeniz gerekecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.