Asp.net 组件参考Catch-22

Asp.net 组件参考Catch-22,asp.net,.net,.net-assembly,Asp.net,.net,.net Assembly,我正在尝试将MangoChat集成到现有的.Net项目中。Mango需要使用Newtonsoft.Json版本3.5.0.0,但是我当前的程序集版本是6.x 从逻辑上讲,我想卸载当前版本,但它有太多的依赖关系,它撕裂了项目。我无法在6.x之外安装3.5.0.0版,因为我无法使用相同的名称向.bin文件夹添加第二个程序集 我怎样才能解决这个问题 如果版本6.x与版本3.5.0.0兼容,则可以将绑定重定向添加到新版本。您应该将其添加到配置文件中: <configuration>

我正在尝试将MangoChat集成到现有的.Net项目中。Mango需要使用Newtonsoft.Json版本3.5.0.0,但是我当前的程序集版本是6.x

从逻辑上讲,我想卸载当前版本,但它有太多的依赖关系,它撕裂了项目。我无法在6.x之外安装3.5.0.0版,因为我无法使用相同的名称向.bin文件夹添加第二个程序集


我怎样才能解决这个问题

如果版本6.x与版本3.5.0.0兼容,则可以将绑定重定向添加到新版本。您应该将其添加到配置文件中:

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="[enter token here]" culture="neutral" />
                <bindingRedirect oldVersion="3.5.0.0-6.X" newVersion="6.X"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

您应该运行此代码一次,例如在应用程序启动期间。

处理上述所有内容。我喜欢web.config版本,但这是否假定向后兼容?(我猜这个程序集有)它不假设或保证向后兼容性。仅使用版本6.0而不是版本3.5。如果有任何破坏性的更改,您将得到一个错误。第二个选项更安全,但在这种情况下,您必须保留2个程序集,这不是很方便。我尝试在web.config中进行适当的更改,结果发现::无法加载文件或程序集“Newtonsoft.Json,Version=3.5.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6eed”或其依赖项之一。定位的程序集清单定义与程序集引用不匹配。(来自HRESULT:0x8013100的异常)fig得到了这个:好的,放弃它,我让它工作了。我将您的代码放在startup.cs中的Configuration(IAppBuilder app)方法中。对代码的可能添加可能是在“if”语句中添加第二个条件:&&args.Name.Contains(“Version=3.5.0.0”);这样,对于新版本的Newtonsoft.Json的所有其他请求仍将解析到该程序集。很好的代码,谢谢。
//Load assembly from alternative location
Assembly newtonsoftAssembly = Assembly.LoadFrom(@"C:\PathToYourAssembly.dll");
//Handle AssemblyResolve event
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
    //Check if your assembly was requested
    if (args.Name.Contains("Newtonsoft.Json"))
    {
        return newtonsoftAssembly;
    }
    return null;
};