我们有2个独立项目( A 和 B )参考
Newtonsoft.Json dll.
项目 A 使用版本6.0.0.0,而项目 B 使用版本10.0.0.0
现在,当我尝试从项目B引用dll(以应用涉及反序列化的服务)时,它会抛出异常
Could not load file or assembly 'Newtonsoft.Json, Version=10.0.0.0,...
我理解这基本上是版本冲突。其中一个解决方案是从项目 A 更新版本。
然而,假设我不会选择这种方法(担心它会破坏依赖性或任何未知错误),我可以通过使它们共存来解决这个问题吗?
答案 0 :(得分:4)
在ProjectB中添加运行时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 :(得分:1)
确保.csproj文件中的<HintPath>
指向适当的dll
通常我正在使用其中包含多个项目的解决方案,以及不同的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();
}
}
}