库试图加载错误版本的程序集

Posted

技术标签:

【中文标题】库试图加载错误版本的程序集【英文标题】:Library trying to load wrong version of assembly 【发布时间】:2020-10-23 00:36:31 【问题描述】:

我有一个使用“RethinkDb.Driver”库的 .NET Standard 项目,但是当我启动项目时出现以下错误

Could not load file or assembly 'Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies

但是,我的项目已经使用 Newtonsoft.Json 12.0.3。 但是,我无法返回 10.0.0 版本,因为我还在使用另一个需要最新版本的库。 我检查了我的 .csproj,PackageReference 在这里,指向版本 12.0.3 我也已经尝试过清理 NuGet 缓存之类的方法,但没有解决任何问题。

【问题讨论】:

使用<bindingRedirect/>有很多解决方案 检查这个问题,看起来可能重复:***.com/questions/44053187/… 【参考方案1】:

你必须使用assembly redirect

你必须把它放在你的配置文件中。 在库和可执行项目中为 app.config,如果是 Web 项目,则为 web.config

这是 dotnet 将这种依赖关系解析为 newVersion 的指令

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
            <bindingRedirect oldVersion="0.0.0.0-12.0.3.0" newVersion="12.0.3.0"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>

【讨论】:

这样做时我有同样的错误,但现在版本为 12.0.3.0 尝试将12.0.0.0放入新版本 我还想问你为什么将 0.0.0.0-12.0.3.0 放在“oldVersion”中,因为 RethinDb.Driver 尝试使用的是 10.0.0.0? 这是安全的。确保所有版本都只指向一个版本

以上是关于库试图加载错误版本的程序集的主要内容,如果未能解决你的问题,请参考以下文章

未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项。试图加载格式不正确的程序。

64 位 .NET Informix ADO.NET 提供程序的程序集加载错误

win7 64位 未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序。

加载插件时,提示反射异常,调用的目标出现异常,该模块应包含一个程序集清单

未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序。

未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序。