2012-02-20 23 views
10

基本的な競合。RavenDBとSignalR Nugetパッケージの依存関係の競合

SignalRはNewtonsoft.Jsonバージョン4.0.7以上を望んでいますが、RavenDBはバージョン4.0.5を求めています。明らかに、それらを並べてインストールすることはできません。

ソースコードをダウンロードしてからローカルに取得した依存関係を調べるのではなく、そこから作成したバイナリをチェックする必要があります.NuGetで管理されている依存関係を維持する方法があります。 DLLの呼び出し(例えば、Mvcはそれぞれの新しいバージョンで動作します)?

+0

ランでJSON.NETのサポートを要求するpull request on SignalRをしました。 nugetのバージョン番号によると、newtonsoft.json 4.0.8は4.0.5と互換性があります。 RavenDbとNewtonsoft.Jsonのどちらかが間違っています。本当に迷惑です。 – terjetyl

+1

RavenDBが4.0.8をサポートしていることに注意してください。 –

+0

すごいです。数日待ってください。あなたの問題はすべて解決されています:) – dasheddot

答えて

3

数日前に同じ問題が発生していましたが、これは厄介なものです。依存関係をNuGetで管理し続けることができないことがわかりました。代わりに、SignalRを4.0.5に変更し、ローカルでコンパイルしました。

+0

ええと、SignalRは間違いなく私がローカルでやることになるでしょう。 – Rangoric

+0

ローカルでコンパイルすることで、SignalRソースコードを取得し、Newtonsoft.Jsonへの参照を変更し、コンパイルして、ソリューションにコンパイル済みコードを配置することを意味しますか? –

+0

はい、それは私が当時の意味でした。しかし、(!)RavenDB 2.0ではこれ以上対処する必要はありません。なぜなら、Newtonsoft.Jsonへの依存関係は内部化されているので、もはや対立がないからです! –

10

この競合を回避するにはさらに適切な方法があります。 .NETは、なぜそれを使用しない、redirect assembliesに私たちの可能性について示しますので ;)

あなただけの(配置assemblyBindingがすでに存在する場合に注意してください)あなたの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-4.0.8.0" newVersion="4.0.5.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 

このリダイレクトセットを使用すると、RavenDBパッケージとSignalRパッケージ(それぞれが別のバージョンのJSON.NETを参照する)を追加するだけで、修正が行われます。

さらに私もこの一つにすぎバージョン4.0.5(それは後方互換性がなければならないので)

+3

リダイレクトのことを知らなかった... –

+1

リダイレクトはかなり危険です。たとえば、Json.NETのユーザーnewverバージョンに再修正したとき、RavenDbはドキュメント内のGuidsでフィールドを欠落し始めました。 –

+1

私はこれを後で見なければならないでしょうが、私は両方のパッケージをインストールすることはできません。あなたはNuGetがリダイレクトを認識し、それに応じてパッケージをロードすると言っていますか?または、私はこれを行う必要がある特定の順序がありますか? (これが再び現れたら。 – Rangoric

関連する問題