Windows Forms应用错误加载Class Library引用的程序集版本问题
问题根因
- 绑定重定向仅生效于启动项目配置:.NET Framework 中,CLR 只会读取启动项目(即你的 WinForms 程序)的
exe.config,类库的app.config配置不会自动合并到启动项目的最终运行配置里——哪怕类库已经设置了正确的版本重定向。 - 自动绑定重定向的错误推断:由于你的 WinForms 项目未直接引用
Microsoft.Extensions.Logging.Abstractions,Visual Studio 的自动绑定重定向功能在扫描依赖链时,错误判定需要将该程序集定向到 6.0.0.0 版本,且生成的错误重定向会覆盖你手动添加的配置,这也是之前手动添加重定向无效的核心原因。 - 版本不匹配导致加载失败:CLR 按照错误的重定向尝试加载 6.0.0.0 版本,但你的输出目录中只有类库带来的 7.0.0.0 版本,最终抛出程序集加载异常。
无需额外安装依赖的解决方法
方法1:强制手动绑定重定向+关闭自动生成
这是最直接的方案,核心是锁定正确的重定向配置,阻止 VS 自动生成错误内容:
- 打开 WinForms 项目的
App.config,在<configuration>节点内添加以下配置:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>
- 关闭自动绑定重定向功能:
- 右键 WinForms 项目 → 属性 → 生成 → 取消勾选「生成绑定重定向」;
- 或直接编辑 WinForms 项目的
.vbproj文件,添加/修改以下配置:<PropertyGroup> <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> </PropertyGroup>
- 清理整个解决方案(删除所有
bin和obj文件夹),重新生成项目。此时检查 WinForms 输出目录下的exe.config,应能看到你手动添加的正确重定向,不会再出现 6.0.0.0 的错误配置。
方法2:引导启动项目识别正确依赖版本
无需安装 NuGet 包,仅通过间接引用让 VS 生成正确的绑定重定向:
- 右键 WinForms 项目 → 添加 → 引用 → 浏览到类库的
bin/Debug目录,选择Microsoft.Extensions.Logging.Abstractions.dll(7.0.0 版本)添加引用; - 选中该引用,在属性窗口设置「复制本地」为
True; - 重新生成项目,VS 的自动绑定重定向功能会识别到该依赖,生成指向 7.0.0.0 的正确重定向。
验证方式
生成解决方案后,打开 WinForms 项目输出目录下的[你的程序名].exe.config,确认Microsoft.Extensions.Logging.Abstractions的绑定重定向指向 7.0.0.0,随后运行程序即可验证异常是否消失。
内容的提问来源于stack exchange,提问作者G_Hosa_Phat
相关产品推荐
相关产品推荐

