NuGet引用库版本适配问题:MCConfig无法加载新版MCData
核心原因
NuGet的版本范围是包层面的依赖规则,但强命名程序集在CLR运行时默认要求精确版本匹配。你遇到的问题本质是:MCConfig是强命名程序集,编译时它的元数据里硬编码了对MCData v25.1.11.2的引用,即使NuGet允许更高版本,CLR仍会尝试找精确版本的程序集,导致报错。
解决步骤
确认MCConfig的程序集依赖版本
用ildasm MCConfig.dll /text | findstr "MCData"命令查看MCConfig实际依赖的MCData程序集版本。如果输出显示是25.1.11.2,说明是强命名程序集的精确版本匹配问题。添加程序集绑定重定向
在项目的app.config(桌面应用)或web.config(Web应用)中添加重定向配置,强制CLR用新版本MCData替代旧版本引用:<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="MCData" publicKeyToken="替换为MCData的公钥令牌" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-25.1.12.0" newVersion="25.1.12.0" /> </dependentAssembly> </assemblyBinding> </runtime>公钥令牌可通过
sn -T MCData.dll命令获取。开启自动绑定重定向(SDK风格项目)
如果是.NET Core/.NET 5+的SDK风格项目,直接在.csproj文件中添加配置,让构建时自动生成绑定重定向:<PropertyGroup> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> </PropertyGroup>清理重建项目
执行dotnet clean或在VS中清理解决方案,再重新构建,确保bin目录中只有新版MCData,且配置文件的重定向规则生效。验证NuGet依赖配置
打开MCConfig的nuspec文件,确认<dependency id="MCData" version="[25.1.11.2,)" />配置无误,没有其他地方(如项目的packages.config或<PackageReference>)锁定了MCData的版本。
内容的提问来源于stack exchange,提问作者David

