2012-12-14 5 views
5

Wir erhalten einen Assembly-Konflikt, nachdem wir Newtonsoft.Json aktualisiert haben. Ich habe Probleme zu verstehen, wo die bestimmte Version, auf die in dem Fehler verwiesen wird, stammt. In der Datei web.config befindet sich nichts, das auf eine bestimmte Version verweist.Assembly-Konflikt in Newtonsoft.Json

System.IO.FileLoadException: Kann nicht Datei oder Assembly 'Newtonsoft.Json, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed' oder eine ihrer Abhängigkeiten laden. Die Manifestdefinition der angegebenen Assembly stimmt nicht mit der Assembly Referenz überein. (Ausnahme von HRESULT: 0x80131040)

Würde GAC-ing die beiden Versionen der Montage arbeiten, um das Problem zu lösen?

Antwort

3

GACing sie funktionieren, aber es wird einen Wartungsalbtraum erstellen. Tu es nicht!

Ich glaube, Sie haben 2 Möglichkeiten:

  1. die Version verwenden, die mit Sitecores kamen, die auf der Version von Sitecores abhängen Sie ausgeführt werden.
  2. Lassen Sie die eine Sitecore-Version unverändert und verwenden Sie ilmerge, um die benötigte Newtonsoft.Json-Version mit Ihrer eigenen Assembly zu kombinieren.

würde ich 1 empfehlen, wenn Sie wie eine der neuesten Funktionen der Bibliothek nicht brauchen (Dynamik ... etc)

+0

Ist es nicht möglich Montage Versionen zu umleiten? Ich weiß nicht, welchen Effekt (wenn überhaupt) es auf Sitecore haben wird ... http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx – jammykam

+0

Sie können versuchen, aber beide Versionen der Baugruppe müssen das gleiche öffentliche Token haben. Ich bin mir nicht sicher, dass das der Fall ist. Außerdem müssen Sie berücksichtigen, dass Sitecore mit der älteren Version getestet wurde und neuere Versionen von Json.net brechende Änderungen aufweisen, sodass Sie möglicherweise etwas durch die Umleitung der Assembly als SiteCore brechen können, wie von @jammykam erwähnt. – marto

17

Wie @jammykam commented in marto Antwort Sie die Assembly umleiten. Ich habe das in der Vergangenheit mit Newtonsoft und Sitecore ohne Probleme gemacht. Sie können einen Blick auf meine Sitecore Content as Service code werfen, wo ich es funktioniert habe.

Sie sind in diesen Zeilen in der Datei web.config speziell interessiert: https://github.com/HedgehogDevelopment/sitecore-content-service/blob/master/Sitecore/Web/Web.config#L3499

<dependentAssembly> 
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-4.0.8.0" newVersion="4.5.0.0" /> 
</dependentAssembly> 
+0

das hat meinen Nachmittag gerettet, danke! –

+0

Danke @ Sean-Kearney. Ihre Datei web.config hat uns vor der Hölle gerettet. – Ben

+0

Auch das Gegenteil funktioniert natürlich auch, wenn man downgrade muss was in meinem Fall ... oldVersion = "0.0.0.0-6.0.0.0" newVersion = "4.5.0.0" –

Verwandte Themen