库试图加载错误版本的程序集
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”或它的某一个依赖项。试图加载格式不正确的程序。
加载插件时,提示反射异常,调用的目标出现异常,该模块应包含一个程序集清单