装配参考Catch-22

时间:2014-08-12 19:10:47

标签: asp.net .net .net-assembly

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

逻辑上,我想卸载当前版本,但它有很多依赖项,它撕裂了项目。我无法在6.x旁边安装3.5.0.0版本,因为我无法将第二个程序集添加到同名的.bin文件夹中。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

如果版本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>

将6.X替换为您的实际版本。

另一种选择是将程序集添加到不同的文件夹,并在AppDomain上使用AssemblyResolve事件来查找它。你可以使用这样的代码:

//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;
};

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