2017-08-07 49 views
0

我々は複数のバージョンのNewtonsoft.Json dllが共存できますか?

Newtonsoft.Json dll. 

プロジェクト文献2つの独立したプロジェクト(B)を有するプロジェクトBバージョンを使用しながらバージョン6.0.0.0を使用し10.0.0.0

プロジェクトBからdllを参照しようとすると(デシリアライゼーションを含むサービスを適用する)、例外がスローされます

Could not load file or assembly 'Newtonsoft.Json, Version=10.0.0.0,... 

enter image description here

私は、これは基本的にバージョンの競合であることを理解。ソリューションの1つは、プロジェクトのバージョンをAから更新することです。

しかし、私はこのアプローチを選択しないでください(依存関係や不明なエラーが発生する恐れがあります)、共存させることでこれを解決できますか?

+2

それぞれに固有の厳密な名前を付けます。それ以外の場合は、別のAppDomainで別のコードを分離する必要があります – MickyD

答えて

2

ProjectBでRuntime AssemblyBindingを追加し、両方のバージョンを10vにリダイレクトします。 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-10.0.0.0" newVersion="10.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
1

がすることを確認してくださいあなたの<HintPath>適切なDLLへの.csprojファイルポイントで

通常、私はそれで複数のプロジェクト、および異なるDLL との溶液を働いています問題ない。たぶんあなたはチェックするために新しい空白の解決策を試すことができます。

Start blank solution, add 2 new projects, install each with different version using nuget

using System; 
using System.Reflection; 
using Newtonsoft.Json; 

namespace ProjectA 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      object product = new 
      { 
       Name = "Apple", 
       Expiry = new DateTime(2008, 12, 28), 
       Sizes = new string[] {"Small"} 
      }; 

      string json = JsonConvert.SerializeObject(product); 
      Assembly assembly = Assembly.LoadFrom("Newtonsoft.Json.dll"); 
      Console.WriteLine($"Using version {assembly.GetName().Version}"); 
      Console.WriteLine($"Serialize just fine: {json}"); 
      Console.ReadKey(); 
     } 
    } 
} 

result

関連する問題